출처: http://november11tech.tistory.com/88 [Mr.november11] null 대신 Optional :: 사월은 봄이다.

Null  때문에 발생하는 문제

1. 에러의 근원

NullPointException이 자주 발생한다..


2. 코드를 어지럽힌다.

중첩된 null 확인 코드로 인해 가독성이 떨어진다.


3. 아무 의미가 없다.

null은 아무 의미도 없다. 특히 정적 형식 언어에서 값이 없음을 표현하는 방법으로는 적절하지 않다.


4. 자바철할에 위배

자바는 포인터를 숨겼다. 하지만 null은 포인터다. ㅠ


5. 형식 시스템에 구멍을 만든다.

null은 무형식이며 정보를 포함하지 않으므로 모든 레퍼런스 형식에 null을 할당할 수 있다.


JAVA8에선 Optional이라는 클래스를 제공한다.

메서드 

설명 

 empty

 빈 Optional 인스턴스 반환

 filter

 값이 존재하며 프레디케이트와 일치하면 값을 포함하는 Optional을 반환하고, 값이 없거나 프레디케이트와 일치하지 않으면 빈 Optional을 반환

 flatMap

값이 존재하면 인수로 제공된 함수를 적용한 결과 Optional을 반환하고, 값이 없으면 빈 Optional을 반환 

 get

값이 존재하면 Optional이 감싸고 있는 값을 반환, 없으면 NoSuchElementExeption 발생 

 ifPresent

값이 존재하면 지정된 Consumer를 실행, 없으면 아무 일도 일어나지 않음 

 isPresent

값이 존재하면 True, 없으면 False 

 map

 값이 존재하면 제공된 매핑함수를 적용

 of

값이 존재하면 값을 감싸는 Optional을 반환, 값이 Null이면  NullPointException 발생

 ofNullable

값이 존재하면 값을 감싸는  Optional을 반환, 값이 Null이면 빈 Optional을 반환

 orElse

 값이 존재하면 값을 반환, 없으면 디폴트 값을 반환

 orElseGet

 값이 존재하면 값을 반환, 없으면 Supplier에서 제공하는 값 반환

 orElseThrow

값이 존재하면 값을 반환, 없으면 Supplier에서 생성한 예외 발생 





'개발 > JAVA' 카테고리의 다른 글

Java8 함수형  (0) 2018.09.19
Math.random()  (0) 2018.08.07
assertThat 사용  (0) 2018.06.04
BigDecimal 사용법  (0) 2018.06.03
string.join 사용기  (0) 2018.05.14

+ Recent posts