본문 바로가기
Today I learned

20201 11 19 - 혼돈의 Optional

by soheemon 2021. 11. 19.

내인생에도 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 분부터..

댓글