Wookim

[java 1.8] Optional을 이용한 null 처리 본문

카테고리 없음

[java 1.8] Optional을 이용한 null 처리

개발자인 경우 2021. 7. 14. 16:31

Optional

자바 1.8 버전 이후로 추가된 함수지향 메소드

사용 이유

  1. null 처리의 간소화
  2. 특정 데이터의 필터링
  3. null 이 가능한 데이터의 명시적인 표현
  4. 가독성 향상

 

null 처리 간소화 

ex) 기존 방식

if(someClassInstace ! = null 
&& someClassInstace.innerObject ! = null 
&& someClassInstace.innerObject.memberData ! = null
&& someClassInstace.innerObject.memberData > 5){
	// 로직
}else{
	// 예외 처리
}

 

ex) Optional 처리

Optional.of(someClassInstance) // null 이면 orElseThrow
.map(x -> x.innerObject)         // null 이면 orElseThrow
.map(x -> x.memberData)          // null 이면 orElseThrow
.filter(x -> x > 5)                // 5보다 작다면 orElseThrow 
.orElseThrow(()->new RuntimeException("에러 메시지"));

// 로직

 


Optional 메소드 리스트

1. of 

// 객체가 null이 아닐 때 사용하는 함수 Optional.of()
// 해당 함수는 a 라는 객체가 null이면 nullpointException 발생
Optional<ClassA> optA = Optional.of(a);

2. ofNullable

// a가 null이 가능할때 사용
// a가 null이 들어와도 NPE 예외 발생 x
// 대신 null인 a클래스를 Optional 클래스로 래핑함
Optional<ClassA> optA = Optionl.ofNullable(a);

3. orElse

// getA 값이 있던 없던 항상 default A
String a = optA.map(ClassA::getA).orElse("default A");

4. orElseGet

// getA 값이 null 이면 default A 값을 할당하는 코드
String a = optA.map(ClassA::getA).orElseGet("default A");

5. map

이전 인자 (of, nullOf)에서 특정 데이터로 변경(접근)하는 함수

SomeClass someInstance = new SomeClass();


String name = Optional.of(someInstance) // 인스턴스 null 체크
			.map(SomeClass::getName) // 멤버 null 체크
            		.orElseGet(()->"default name"); // 값이 null일 때 설정한 값 리턴

6. filter

데이터에 필터(조건)을 걸어 데이터 전처리

 

SomeClass someInstance = new SomeClass();


String name = Optional.of(someInstance) // 인스턴스 null 체크
			.map(SomeClass::getName) // 멤버 null 체크
           		.filter(x->!x.empty())
            		.orElseGet(()->"default name"); // 값이 null일 때 설정한 값 리턴

 

Comments