티스토리 뷰
반응형
Java 8에서 지원하는 Optional를 사용하면 NullPointerException에 대한 방어코드를 functional하게 처리할 수 있습니다. Optional 내부 객체가 null 일 때 기본 값을 반환하기 위해 orElse()와 orElseGet()를 사용할 수 있습니다. Optional이 생기기 이전에는 다음과 유사한 코드를 작성했을 것 입니다.
public void method(Object o) {
if (o == null) {
// null value handling
}
// to do something
}
이제 예시를 통해 두 메서드가 어떻게 동작하는지 살펴보겠습니다.
Optional.orElse()
private static String wontRunThis() {
System.out.println("Won't run this");
return "foo";
}
public void optional1() {
String o = Optional.of("Hello World!").orElse(wontRunThis());
System.out.println("Result : " + o);
}
Result
Won't run this
Result : Hello World!
Optional.orElseGet()
public void optional2() {
String o = Optional.of("Hello World!").orElseGet(() -> wontRunThis());
System.out.println("Result : " + o);
}
Result
Result : Hello World!
결과에서 확인할 수 있듯이 두 메서드 모두 내부 객체가 null이 아니기 때문에 foo는 반환하지 않고 Hello World!를 반환합니다. 하지만 orElse()는 Optional 내부 객체의 상태와 상관없이 무조건 실행되어 Won't run this를 출력하며, orElseGet()은 내부 객체가 null인 경우에만 실행됩니다. 그 이유는 orElse()의 인자로 T other를 받기 때문입니다. 때문에 예상치 못한 사이드 이펙트가 생길 수 있으므로, 상황에 맞는 알맞은 선택이 필요합니다.
반응형
'프로그래밍 > Java' 카테고리의 다른 글
| [이펙티브 자바] 규칙46. for 문보다는 for-each 문을 사용하라 (0) | 2018.01.06 |
|---|---|
| [이펙티브 자바] 규칙45. 지역 변수의 유효범위를 최소화하라 (0) | 2018.01.06 |
| [이펙티브 자바] 규칙27. 가능하면 제네릭 메서드로 만들 것 (0) | 2017.11.28 |
| [이펙티브 자바] 규칙26. 가능하면 제네릭 자료형으로 만들 것 (0) | 2017.11.28 |
| [이펙티브 자바] 규칙25. 배열 대신 리스트를 써라 (0) | 2017.11.28 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- html
- 웹프로그래밍
- 이펙티브 자바
- Message Queue
- SK하이닉스
- CSS
- 현대차
- 투자전략
- 한미반도체
- 이수페타시스
- codecademy
- Java
- 삼성전자
- Rails
- 주식투자
- 반도체관련주
- 한화에어로스페이스
- ruby
- 국제유가
- rabbitmq
- 프로그래밍
- 알고리즘
- OpenStack
- 티스토리 초대장
- ubuntu
- javascript
- ruby on rails
- 자료구조
- HBM
- install
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함
Copyright ⓒ 2018 moneystory.blog. All rights reserved.
