본문 바로가기

SPRING

[Spring] Optional 의 3가지 생성 방법

Java 를 기반으로 개발을 진행하다보면 NullPointException 을 자주 만나게 됩니다.

주로 Runtime 에 발생하기 때문에 찾기도 쉽지가 않고 이러한 예외를 미리 방지하기 위해서는 복잡한 방어로직이 필요하게 됩니다 .

이러한 문제를 해결하기 위해 Java 8 에서 나온 것이 Optional 입니다.

Optional 인스턴스는 다음과 같은 특징을 가지고 있습니다.

  • 불변 인스턴스 입니다.
  • hashCode, equals, toString 메서드는 인스턴스 상태에 따라 달라집니다.

 

 

 

Optional 의 3가지 정적 팩토리

Optional 의 객체 생성 메서드는 3가지의 정적 팩토리 메서드가 존재합니다.

특정 객체가 Optional 객체 생성이 필요할 때 다음과 같이 3가지 방법으로 감싸 생성할 수 있습니다.

 

 

 

public static Optional of(T value)

 

Optional 로 감싸진 객체를 생성합니다.

Optional<Board> board = Optional.of(board);

    board.orElse(new Board());
    

위의 예시처럼 of 로 Optional 에 감싸진 boad 를 생성하게 되며, 게시글을 꺼내어 사용하기 전에 다음과 같이 Null 을 체크할 수 있습니다.

만약 new Board 부분에 null 이 들어가게 되면 객체를 꺼낼 때 RuntimeException 이 발생하게 됩니다.

 

 

 

public static Optional ofNullable(T value)

 

Optinal.of 의 내부 Object 는 null 일 때 쓸 수 없습니다. 만약, 내부에 들어가는 Object 가 null 인지 아닌지 확실하지 않을 때 사용합니다.

Optional<Board> board = Optional.ofNullable(board);
    board.orElse(new Board());
    

예시는 of 와 동일하지만 선언 부가 ofNullable 로 선언하여 사용합니다.

하지만 of 와 다르게 만약 board 가 null 일 때 new Board 를 실행하여 Board 의 객체를 리턴하게 됩니다.

 

 

 

public static Optional empty(T value)

 

empty Optional 인스턴스를 리턴합니다.

즉, null 을 담고 있는 Optional 객체를 리턴하게 됩니다.

Optional board = Optional.empty();

    board.orElse(new Board());
    

board 는 처음에 null 이 담긴 Optional 이 생성되고,

orElse 로 내부 객체를 가져올 때 new Board 에서 생성된 인스턴스를 가져오게 됩니다.

 

참고

https://imasoftwareengineer.tistory.com/8

https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html

https://brunch.co.kr/@kd4/153