프로그래밍/JAVA

[Java] Optional<T>

하와이블루 2023. 3. 12. 10:54
728x90

 

 

Optional을 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있다.

즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있게 된다.

 

 

Optional를 사용하지 않을 경우, 조건문을 사용하여 null 체크를 해줘야한다.

List<Member> member = memberRepository.findById(id); // member == null 일경우

String name = member.getName(); // NullPointerException 발생
List<Member> member = memberRepository.findById(id); // member == null 일경우
String name = "";

if(member != null){
	 name = member.getName();
}

 

 

Optional를 사용하기 위한 관련 메소드를 알아보자.

 

1. get()

Optional을 사용하여 Optional에 저장된 값은 get() 메서드를 통해 접근할 수 있다.\

Optional<Member> member = memberRepository.findById(id);
Member mem = member.get();

다만 직접 get()를 호출하기 전에 Optional 객체에 값이 저장되어있는지 확인하고 호출해야한다. 

만일 저장된 값이 없으면 NullPointerException 이 발생하게 된다. get()호출하기전 isPresent() 메소드를 활용하여 null 체크를 진행할 수 있다.

 

 

 

2. isPresent()

Optional 객체가 값을 가지고 있다면 true, 값이 없다면 false 리턴한다.

Optional<Member> member = memberRepository.findById(id);
String name = "";

if(member.isPresent()){ // member에 값이 있을 경우 true
	Member mem = member.get();
	name = mem.getName();
}

 

 

 

3. ifPresent()

Optional 객체가 값을 가지고 있으면 화살표 함수를 사용하여 함수를 실행하고 값이 없으면 다음으로 넘어간다.

String name = "";

member = memberRepository.findById(idx).ifpresent(mem -> {
	name = mem.getName();
});

 

 

 

4. orElse()

Optional 객체에 값 여부는 isPresent() 메소드 외 orElse()로도 가능하다. Optional 객체에 값이 저장되지 않았을 경우 orElse() 메소드를 통해 명시된 값을 대신 반환한다.

Member member = memberRepository.findById(id).orElse(new Member());

 

 

 

5. orElseThrow()

Optional 객체에 값이 저장되어있지 않을 경우, 명시적으로 예외를 던질 때 사용한다.

Member member = memberRepository.findById(id)
			.orElseThrow(new NoSuchElementException("Person not found"));

 

 

 

 

 

728x90