b

Java Optional에 대한 생각 본문

카테고리 없음

Java Optional에 대한 생각

dev.bistro 2018. 9. 4. 13:12

모던 랭귀지 중에서 현업에서 써봤거나,  대충은 해봤던 언어는 Java Scala Groovy Kotlin Swift python go... 이중에서 Go는 원래 태생이 그래서 제외한다면 제일 구닥다리는 Java.

그 중에 Optional에 대한 사용은 항상 고민이 된다.


http://blog.joda.org/2015/08/java-se-8-optional-pragmatic-approach.html

https://stackoverflow.com/questions/31922866/why-should-java-8s-optional-not-be-used-in-arguments


1. Optional로 인스턴스 변수를 사용하지 말 것

2. null로 내부 private scope 클래스의 데이터 유무를 나타낸다. (첨언 : 자바에는 Null이 있어서 내부적으로 null이 Optional.empty를 표현할 수 있다. 이렇게 하고, 외부로 노출하는 getMethod에는 null이 아닌 empty를 보여주면 된다)

3. getter에는 사용

4. set메소드, 생성자에서는 사용하지 말 것

5. 다른 로직에서 Optional 에 따른 비즈니스 로직이 있을 때에는 사용



즉 Class 내에서 private variable로 Optional을 가지지 말라

장점으로는 

1. 이 객체는 Application 내에서 자주 사용될것이고 그 life-cycle동안 길것이다. 그에 반헤 Getter만 Optional이라면 그 라이프 사이클은 훨씬 짧아진다. GC에 대해 이로울 것이고

2. Optional 이 있다면 Serializable  할수 없다. (jackson-modules-java8도 결국엔 Optional.empty를 null로 만든다.)

3. setter나 생성자에서 Optional을 사용하는 것 자체가 경험에 비추어 유용하지 않았다. 



단점으로는 이렇게 생성되는 Class가  beans가 아니라는 것이다 (private variable + getter + setter로 이루어진) 

일부 IDE에서 문제가 발생할 수도 있으니 확인해봐야한다. 하지만 이런식으로 된다면 사용하는 쪽에서 null에

te 고민을 없앨 수 있다. 혹시나 Optional.get()을 호출하고 있다면 뭔가 이상하다고 생각할 것




Comments