내인생에도 Optional이 있었으면 좋겠다.
그러면 null인지 아닌지 안전하게 피할 수 있을텐데...
모든 종류의 객체를 Optional에 저장할 수 있다.
null이 될수있는 모든 녀석들을 빈 Optional<T> 객체를 사용하자.
1) Option을 사용하게 된 배경
1) null을 직접 다루는것은 위험하다.. -> null을 Optional 객체 안에 담아서 (래퍼클래스) 간접적으로 다루기로 하자!
--> 항상 null 이 아니다!
2) null체크 if문 필수... --> 코드가 지저분해진다.
예를들어 아래의 코드처럼 getResult가 null을 반환할지 아니면 제대로 객체를 제대로 꺼내올 수 있을지 모르기 때문이다...!
Object result = getResult(); //반환값은 Object 혹은 null이다.. 그래서 null체크 필요....
2) Optional <T> 객체 생성하기
내부적으로는 String str 변수가 "문자열"을 가리키던것을 가운데에 Optional 객체가 들어갔다고 보면 된다.
그래서 String이 null이여도 Optional이 이를 감지해줘서 안전한거지.
자세한 그림설명은 생략한다.
String str = "abc";
Optional<String> optval = Optional.of(null); // nullPointer Exception 발생!
Optional<String> optval1 = Optional.ofNullable(null); // null이 들어갈수도 있다면 ofNullable을 쓴다.
초기화 할때도 null 대신 Optional로 초기화 하자!
Optional<String> optVal = Optional.empty(); //초기화!
Optional<T> 객체의 값 가져오기.
Optional<String> optVal = Optional.of("abc") | |
String str1 = optval.get(); | optVal 값 반환. 만약 null이면 예외발생 |
String str2 = optval.orElse("") | 만약 null일떄는 "" 반환 |
optVal.orElseGet(String::new) | 람다식 사용가능. supplier! () -> (new String()) |
optVal.orElseThrow(NullpointerException::new) | null일때 예외 발생 |
isPresent if(Optional.ofNullable(str).isPresent()) { System.out.println(str); } |
optional 객체의 값이 null이면 false, 아니면 true를 반환 |
ifPresent Optional.ofNullable(str).ifPresent(System.out::println); |
- null이 아닐때만 작업 수행. 널이면 아무일도 안함.. |
18:54 분부터..
'Today I learned' 카테고리의 다른 글
2022 03 19 - Promise 체이닝과 / async await (0) | 2022.03.19 |
---|---|
2021 11 20 혼돈의 Optional 훈련 (0) | 2021.11.20 |
2021 11 18 stream은 손에 안익네.. (0) | 2021.11.18 |
2021 11 18 실무에 어떻게 적용하면 좋을지 궁금한 functional interface (0) | 2021.11.18 |
2021 09 30 - Regex Crossword 패턴 분석을 통한 학습 (0) | 2021.09.30 |
댓글