본문 바로가기
Programming/JAVA

[JAVA] Optional<> 이 뭘까?

by 기딩 2024. 3. 7.
728x90

Optional<T>

Generic 클래스로 T타입의 객체를 감싸는 래퍼 클래스로서, 최종 결과를 그냥 반환하는 게 아니라 Optional 객체에 담아서 반환

 

Why? 왜 쓸까?

반환된 결과가 null인지 매번 if문으로 체크하는 대신 Optional에 정의된 메서드를 통해 간단히 처리 가능

if문 없이 NullPointerException 발생x

간결, 안전한 코드

 

Wrapper Class
자바의 자료형 : 기본 타입 | 참조 타임
기본 타입 : char, int, float, double, boolean ...
참조 타입 : class, interface, ...

기본 타입의 데이터를 객체로 표현해야 할 때가 존재 -> 래퍼 클래스 사용!
모든 기본타입은 값을 갖는 객체 생성 가능 (포장 객체) -> 기본 타입 값은 외부에서 변경 x
박싱 : 기본 타입 -> 포장 객체
언박싱 : 포장 객체 -> 기본 타입
* 래퍼 객체끼리  비교 위해 == 연산자 사용 X ( ∵ == 연산자는 내부 값이 아니라 참조 주소를 비교 & 래퍼는 객체이므로 참조 주소 다름), equals 사용해야 함
But, 래퍼 클래스와 기본자료형 비교는 ==, equals 모두 가능 ( ∵ 컴파일러가 자동으로 auto박싱, 언박싱)

 

 

Optional 객체 생성하기

of() 또는 ofNullable() 를 사용하여 만든다.

 

1. of() 사용

String str = "abc";
Optional<String> optval = optional.of(str);
Optional<String> optval = optional.of("abc");
Optional<String> optval = optional.of(new String ("abc"));

 

2. ofNullable() 사용

참조변수의 값이 null이 가능성 있으면, ofNullable() 사용

of()는 NullPointerException 발생 ㅇ

Optional<String> potVal = Optional.ofNullable(null); // OK

 

+ 참조변수를 기본값으로 초기화

null보단 empty() 빈 객체로 초기화하는 것이 바람직

Optional<String> optVal = Optional.<String>empty();

 

Optional 객체 값 가져오기

1. get() 사용 
null이면 NoSuchElementException 발생

Optional<String> optVal = Optional.of("abc");
String str1 = optVal.get();

 

2. orElse()

null이면 ""를 반환

String str2 = optVal.orElse("");

 

 

 

참고 : Java의 정석 3rd Edition

728x90

'Programming > JAVA' 카테고리의 다른 글

[JAVA] Map과 HashMap의 차이  (0) 2024.03.08
[JAVA] 간단한 회원관리 프로그램  (0) 2024.01.10
[JAVA] 10. 패키지  (1) 2023.10.23
[JAVA] 9. 추상클래스와 인터페이스  (0) 2023.10.23
[JAVA] 8. 상속과 다형성  (0) 2023.10.19