주제
목차
내용
null을 반환하면 왜 안되는가?
NullPointException을 피하기 위해서 입니다.
NullPointException은 컴파일 시점에서 잡을 수 없는 오류입니다.
- 일단 참조형의 기본값은 null이고, 실행을 해야 알 수 있기 때문에, 그만큼 개발자들이 많이 보는 오류이기도 합니다.
- null은 참조형 레퍼런스에만 할당할 수 있습니다.
Integer num = null; int i = num; // 🧨 오류 발생! java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because "num" is null
Integer
와 같은 래퍼 클래스가 null을 참조하고 있을 때,이를 기본형 타입으로 unboxing 하는 경우 NullPointerException이 발생합니다.
...
레퍼런스의 존재하지 않는 값을 나타내는 null 참조는, 그 자체로 에러의 근원입니다. null 참조를 남발하게 되면 NullPointException을 정말 쉽게 만날 수 있습니다. 이러한 예외 상황을 피하기 위해 null 체크 코드를 추가하다보면 코드가 길어지게 됩니다. 그렇게 되면 코드의 가독성이 떨어질 수 있습니다.
Optional을 왜 사용하는가?
- Optional 객체의 ‘비어있다'라는 의미의 Optional.empty()는 참조하더라도 NullPointException이 발생하지 않습니다.
- 반환된 값을 사용하는 입장에서도 Optional 을 보고 해당 객체가 비어있을 수 있다고 인지할 수 있습니다.
- 그 외에도 편의 메서드를 지원하기 때문에, 코드를 깔끔하게 작성할 수 있습니다.
곽동운
- return 값으로 optional.empty를 많이 사용하는데 어떤 부분이 문제가 있는가?
- 예전에 이메일 체크 할 때 isPresent()로 처리했다.
@PostMapping(path = "user/exists") @ApiOperation(value = "이메일 중복확인") public ApiResponse<Boolean> checkEmail( @RequestBody Map<String, String> request ) { Email email = new Email(request.get("address")); return OK( userService.findByEmail(email).isPresent() ); }