Open HanaHww2 opened 1 year ago
(갑자기,,)예전에 조사해보았던 자바의 단점 + 개인적으로도 공감하는 NPE 에 대한 불만을 공유합니다.
자바의 런타임 예외(Exception)중 NullPointerException(이하 NPE)은 다음과 같은 상황에서 발생합니다.
NPE는 꼭 필요한 예외지만 개발을 하다보면 NPE가 발생한 시점을 찾기 어렵고 오류 메시지도 구체적으로 어디서 발생했는지 명시해 주지 않기때문에 자칫 잘못하면 디버깅에 많은 시간을 허비할 수 있습니다. 즉, null 처리 관련 책임을 언어 차원이 아닌, 프로그래머에게 전적으로 위임하게 됩니다.
cf) 코틀린에서의 null 처리 동일한 JVM 계열 언어이지만 아래와 같은 특징으로 자바와 차이점을 보이고 있다.
즉, NPE는 충분히 언어차원에서 방지할 수 있다는 점을 통해 자바에서 개발자에 의한 NPE 처리는 설계적 결함이라고 생각합니다.
제가 있는 실무에서도 옵셔널을 많이 쓸 수 있게 되면 좋겠네요..
옵셔널 반환을 할 경우 null값인지 주의해야겠네요
상황: 특정 연산의 리턴값이 "있을수도 없을수도 있다"
Optional
Optional을 사용하지 않는 예제
Optional을 사용하는 예제
주의할 점
옵셔널 어디에 쓰이고 있을까?
옵셔널 사용해 보기
값이 없을때 값을 지정하는 orElse 사용가능
예외를 던지는 orElseThrow 사용가능
값이 채워져 있을거라 확신한다면? get 사용가능 (하지만 만약 Optional에 값이 없다면 NoSuchElementException 이 발생함.)
get 쓰고싶다. 하지만 Exception 발생시키긴 싫다면? orElseGet 사용가능
옵셔널이 채워져 있는지 먼저 확인하고 싶다면? 옵셔널의 안전 벨브, isPresent
map
(NoSuchElementException이 발생해야하는거 아닌가? -> 아님 )
옵셔널들을 필터링하고 싶다면? filter
옵셔널을 스트림으로 변환하고 싶다면? flatMap
옵셔널을 사용하지 말아야 하는 경우
컨테이너 타입
(다른 객체를 담을 수 있는 객체)은 옵셔널로 감싸면 안 된다.를 반환하기보다는 빈 List를 반환하는게 좋다. 빈 컨테이너를 그대로 반환하면 클라이언트에 옵셔널 처리 코드를 넣지 않아도 된다.
옵셔널을 사용해야 하는 경우