일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AOP
- pointcut
- 알고리즘
- Thymeleaf
- JDBC
- spring
- jpa
- Android
- kotlin
- Greedy
- JPQL
- 그리디
- http
- 자바
- Spring Boot
- db
- Proxy
- 스프링 핵심 원리
- 스프링
- QueryDSL
- 스프링 핵심 기능
- SpringBoot
- java
- springdatajpa
- 인프런
- Exception
- Servlet
- 백준
- transaction
- 김영한
- Today
- Total
개발자되기 프로젝트
['21.07.17] Null check, ENum 본문
1. Null이란
존재하지 않는 값을 의미
2. Null Point Exception(NPE)
Copile단계에서 확인이 되지 않고 Runtime동안 발생하는 Error이다.
Null인 객체에 접근하여 발생하는 예외이다.
3. Enumerate
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에 추가해보자.
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
'Project > 영화리뷰 관리' 카테고리의 다른 글
['21,07,18] 중복제거 (0) | 2021.07.18 |
---|---|
['21.07.18] 검색 결과에서 HTML Tag 제거하기 (0) | 2021.07.18 |
['21.07.15] Naver 영화검색 API (0) | 2021.07.15 |
['21.07.14] Entity, DTO 분리 (0) | 2021.07.15 |
['21.07.14] Service class생성, api test (0) | 2021.07.14 |