1. 문제 상황

다음과 같이 optional를 사용하여 npe를 방지하고자 하였음

int color = Optional.of(text.getStyle.getColor.getRgb())
				.orElse(0xffffff);

만약 of() 메서드 안에 전달된 값에서 npe가 발생한다면 orElse()를 사용해 자동으로 흰색을 넣으려는 의도였으나 예외가 적절히 처리되지 않았음.

2. 문제 원인

Optional.of() 가 예상과 달리 인자로 null을 허용하지 않는 메서드였기 때문에 발생한 문제였음

대신, null을 받을 수 있는 Optional.ofNullable() 메서드가 따로 존재했음

3. 문제 해결

Optional.ofNullable()을 적용한 모습

int color = Optional.ofNullable(text.getStyle().getColor().getRgb())
				.orElse(0xffffff);

여기서 npe를 발생시킬 수 있는 메서드는 getRgb()가 아닌 getColor()임. 따라서

int color = Optional.ofNullable(text.getStyle().getColor())
				.map(textColor -> textColor.getRgb())
				.orElse(0xffffff);

다음과 같이 color까지만 인자로 넣은 후 map()을 통해 헥사 코드를 추출하여 본래 의도대로 동작하는 코드를 작성할 수 있었음.