Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

['21.07.17] Null check, ENum 본문

Project/영화리뷰 관리

['21.07.17] Null check, ENum

Seung__ 2021. 7. 17. 14:20

1. Null이란


  존재하지 않는 값을 의미

 

 

2. Null Point Exception(NPE)


   Copile단계에서 확인이 되지 않고 Runtime동안 발생하는 Error이다.

   Null인 객체에 접근하여 발생하는 예외이다.

 

 

3. Enumerate


 

@Entity 속성 2

1. SQL이란? SQL 종류 들어가기에 앖서서 SQL(Structed Query Language, 구조적 질의언어)에 대해서 간략하게 알아보자. SQL은 관계형 DB의 관리시스템의 DATA를 관리하기 위한 만들어진 특수 목적의 프로그래

bsh-developer.tistory.com

 

enum을 활용하여 method처리 결과의 상태를 같이 전달해 보자.

 

enum에 대한  자세한 내용은 위에있는 링크 참고.

 

간단히 설명하면 enum은 일종의 상수이고, 예를들어 OK, ERROR가 있다고 해보자.

 

예를들어 상태를 정수로 표현한다면 ERROR를 0,  정상 상태를 1이라고 한다고 해보자.

 

이 때 enum을 활용한다면 0 --> ERROR, 1 --> OK로 대체가 된다.

 

Null check를 해서 Null인경우 객체를 생성하여 error code를 set하여 return해보자.

public enum StatementCode {

    SC_NoResult

}

 

4. DB에서 검색 결과가 없을 경우


 1)findAll

   검색 결과가 없을 경우 빈 객체를 return한다. 값이 없는 경우 명시적으로 빈 객체에 상태 코드를 추가해서 return해주자.

   


        }else { //null인경우

            List<MovieDTO> movieDTOList = new ArrayList<>();
            var movieDTO = new MovieDTO();
            movieDTO.setStatementCode(StatementCode.SC_NoResult);
            movieDTOList.add(movieDTO);
            return  movieDTOList;
        }

    }

 

 

2) findByID, finBy Title

   Repository에서 id로 검색하는 경우는 현재 2 가지 이다.

  - id를 통해 영화 entity를 찾기만 하거나

  - id를 통해 영화 entity를 찾은 후 comment 추가

 

   Repository에서 title로 검색하는 경우는 현재 2 가지 이다.

  - title을 통해 영화 entity를 찾기만 하거나

  - title을 통해 영화 entity를 찾은 후 comment 추가

 

위의 네 가지 경우에 동작해야 하는 로직은 비슷하니 method로 만들어 버리자.

  public MovieDTO noSearchResultInfoId(int id){
        log.info("id : {} 인 영화가 DB에 없습니다.", id);
        MovieDTO movieDTO = new MovieDTO();
        movieDTO.setStatementCode(StatementCode.SC_NoResult);
        return movieDTO;
    }

    public MovieDTO noSearchResultInfoTitle(String title){
        log.info("제목 : {}인 영화가 DB에 없습니다.", title);
        MovieDTO movieDTO = new MovieDTO();
        movieDTO.setStatementCode(StatementCode.SC_NoResult);
        return movieDTO;
    }

 

사용은 아래와 같이 했다.

 public MovieDTO findMovieByTitle(String title) {

        var movieEntity = movieRepository.findByTitleContains(title);


        if(movieEntity != null){
            return movieEntityToDTO(movieEntity);
        }
        else {

            return noSearchResultInfoTitle(title);
        }

    }

 

5. 기타


그리고 나머지 코드에서 Null 객체에 접근이 가능한 부분은 모두 null check를 진행했다.

 

 

 

6.결과


1) 이상한 제목으로 naver 영화검색을 해보자.

아아아아아

2) 실제 존재하는 제목으로 검색해보자.

 

3) 영화를 list에 추가해보자.

흠..? id의 상태가..?

4) 저장된 영화 list를 불러오자.

post method와 id가 다른 이유는 post의 경우 DB에 저장된 값을 불러와서 return해주지 않고,

입력된 값을 바로 return한다. 이 때 id가 별도로 입력되지 않기 때문에, default인 0으로 출력된것.

실제 db에는 id가 반영되어 있다.

 

5) id로 검색

6) 존재하지 않는 id로 검색

 

7) 제목으로 검색

 

8) 존재하지 않는 제목으로 검색

 

9) 제목으로 comment 추가

 

10) 존재하지 않는 제목으로 comment 추가

 

 

 

7.  GitHub : 210717, nullcheck, enum


 

bsh6463/MovieManager

Contribute to bsh6463/MovieManager development by creating an account on GitHub.

github.com

 

Comments