Java에는 Optional이라는 특이한 클래스가 존재한다.
Optional이 무엇인지, 왜 사용하는 지에 대해서 알아보자.
Optional이란?
Optional이란 NULL이 발생할 가능성을 감안하는 Wrapper Class이다.
Optional<T>
와 같이 선언을 하고 사용한다.
즉, Optional<T>
내부의 값은 NULL일 수도 있고, 객체 T가 있을 수도 있다.
Optional의 사용
보통 Optional 타입은 DB에서 객체를 조회할 때 많이 사용한다.
만약 조회를 했는데 DB에는 없는 아이디여서 NULL인 객체가 반환이 되었다면?
그 객체에 접근하려고 하면, NPE(Null Point Exception)이 당연히 발생할 것이다.
하지만 Optional 타입은 유용한 여러가지 Method들을 제공한다.
isPresent()
: Boolean Type으로 객체의 값이 존재하는지 판단한다.- 이 Method는 if문들의 나열 대신에 간편하고 유용하게 사용 가능하다.
get()
: Optional 내의 값을 가져온다.- 보통
isPresent()
와 묶어서 값이 존재하면get()
을 한다.
- 보통
orElse(something)
: NULL이 아니라면, 객체를 반환한다.- 하지만 NULL이라면, 객체가 아닌 인자로 넘어온 Something을 반환하게 된다.
orElseThrow(Exception)
: NULL이라면, Exception 메시지를 띄워버린다.Optional.ofNullable()
: 단일 객체에 대해서 NULL을 허용한다.- 반드시 NULL이 아니라는 보장이 있다면,
Optional.of()
도 사용이 가능하다.
- 반드시 NULL이 아니라는 보장이 있다면,
주의점
Optinal이 NPE를 방지시켜 주는 좋은 Wrapper Class임은 분명하다.
하지만 Wrapping하고 푸는 과정에서 Overhead가 발생하므로, 성능 저하가 있을 수 있다.
따라서 무조건 NULL이 아닌 객체라면, 굳이 Optional을 쓰지 말자!