티스토리 뷰
반응형
NullPointerException은 자바 개발자를 가장 많이 괴롭히는 예외 중 하나입니다. 컴파일 시에는 잠복해 있다가 런타임에 발생하는 NPE는 코드 곳곳에 묻혀있는 지뢰나 다름없습니다. 실제로 NULL 참조를 처음 고안한 영국의 컴퓨터 공학자 Tony Hoare 조차 NULL 참조를 만든 것은 10억불짜리 실수라고 이야기 했을 정도입니다.
이전까지 자바 개발자들은 NPE를 피하기 위해 다음과 같은 방어 코드를 만들어야 했습니다.
public City getCity(InputInformation input) {
if (input.getCity() == null) {
return City.SEOUL;
}
return input.getCity();
}
NPE를 방지하기 위해 분기문을 사용하게 되고 자연히 코드가 길어지고 가독성이 나빠집니다. JAVA8 부터는 자바 개발자들이 NULL 을 대하는 패러다임이 변화하기 시작합니다.
JAVA8의 설계자들은 아마도 함수형 언어에서 해답을 찾은 것 같습니다. 스칼라나 하스켈과 같은 소위 함수형 언어들에서는 존재할지 안 할지 모르는 값을 표현하는 별도의 타입을 가지고 있습니다. 자바8에는 존재할지 안할지 모르는 값을 위한 Optional<T> 라는 새로운 클래스를 도입하게 되었습니다.
Optional은 존재할 수도 있지만 없을 수도 있는, 다시말해 null 일 수도 있는 객체를 감싸는 일종의 래퍼 클래스라고 볼 수 있습니다. 혹은 원소가 없거나 하나 밖에 없는 Stream으로 생각해도 좋을 것 같습니다. 위의 코드를 Optional 클래스를 이용해서 표현하면 다음과 같습니다.
public City getCity(InputInformation input) {
return Optional.of(input)
.map(InputInformation::getCity)
.orElse(City.SEOUL);
}
반응형
'language > JAVA' 카테고리의 다른 글
자바(JAVA)에서 배열(Arrays), 리스트(List) 정렬하기 (0) | 2021.01.22 |
---|---|
JAVA 인터페이스(Interface) 다중상속 시 메서드 충돌 해결하기 (1) | 2021.01.22 |
Stream, 스트림 (0) | 2020.05.06 |
람다 표현식(Lambda Expressions) (0) | 2020.05.03 |
레거시 코드를 테스트 하는 코드를 만들기 (0) | 2020.04.02 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- RESTful
- java
- html
- 로그
- 몰라서망신
- 전략패턴
- 디자인패턴
- markov chain
- 마르코프
- 유지보수
- 경고
- was
- REST API
- Markov
- Count
- 야근
- 마르코프 연쇄
- 크롬
- restful api
- GROUP BY
- 동적계획법
- 문장 생성기
- 코딩의 기술
- Spring in Action
- Warning
- 자바스크립트개론
- CONVENTIONS
- DP
- 클린코드
- 자바스크립트 개론
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함