본문 바로가기

자바☕

자바 옵셔널(Optional<T>)

728x90

Optional이란?

NPE(Null Poiter Exception)에 Optional 클래스에서 제공하는 메서드로 대응할 수 있다.

Optional 제공 메서드 : 생성

1. empty() : "비어있는" 객체 생성

Optional<String> empty = Optional.empty(); // "비어있는" Optional 타입 객체를 생성

System.out.println(empty.isPresent()); // false, 객체생성은 되었지만 값이 없으므로 false

2. of() : 값이 있는 객체 생성. Null 값이 입력되는 경우 NPE 발생 ~ Null이 확실히 발생하지 않을 경우 사용

Optional<String> empty = Optional.of("assert NotNull");

System.out.println(empty.isPresent()); // ?

3. ofNullable() : 참조 시, Null 값일 경우 "비어있는" 객체가 반환되는 객체 생성

Optional<String> empty = Optional.ofNullable(null);

System.out.println(empty.isPresent()); // ?

Optional 제공 메서드 : 최종 연산

1. ifPresent() : Optinal에서 꺼낸 객체가 존재한다면 메서드 파라미터인 코드 수행

String name = null;
Optional<String> opt = Optional.ofNullable(name);

opt.ifPresent(n -> System.out.println(n.length()));

2. orElse() : Optional의 객체가 존재한다면(값이 있다면), 객체를 반환하고 그렇지 않다면 메서드의 인자를 반환

System.out.println(Optional.ofNullable(null).orElse("냐옹"));

System.out.println(Optional.ofNullable("Hey!").orElse("냐옹"));

3. orElseThrow() : Optional 객체가 존재한다면, 객체를 반환하고 그렇지 않다면 예외 던지기

String nullName = null;
String name = Optional.ofNullable(nullName).orElseThrow(
        IllegalArgumentException::new);

 

Optional 타입의 파라미터는 객체만 가능하다 : 기본 타입의 데이터는 클래스에서 인스턴스를 생성하여 그 인스턴스를 파라미터로 사용해야하는데, 이 때 이 클래스를 Wrapper Class라고 한다.

*Wrapper Class는 인스턴스에 저장된 값을 변경할 수 없다. 그래서 값을 변경할 경우 다시 기본 타입으로 변환 후 값을 변경해야 한다 ~ 박싱과 언박싱 (JDK 1.5부터는 자동)

728x90