일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- spring-batch
- springboot
- enablekafkastreams
- 플레이 프레임워크
- reactive
- kafka interactive query
- scala
- Spring
- 한빛미디어
- 카프카
- Logstash
- kafkastream
- play framework
- confluent
- Kafka
- kafka streams
- spring-kafka
- avo
- gradle
- kafkastreams
- scala 2.10
- coursera
- spring-cloud-stream
- schema registry
- Elk
- RabbitMQ
- aws
- Elasticsearch
- Slick
- statestore
- Today
- Total
b
Java Optional에 대한 생각 본문
모던 랭귀지 중에서 현업에서 써봤거나, 대충은 해봤던 언어는 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()을 호출하고 있다면 뭔가 이상하다고 생각할 것