Optional

Optional의 역할

값이 null이 될 수 있음을 명시적으로 표현함으로써 메서드의 시그니처만으로 선택형 값인지 구분할 수 있다.
(따라서 모든 null 참조를 Optional로 대치하는 것은 바람직하지 않다.)
Optional이 등장하면 값이 없을 수 있는 상황에 적절하게 대응하도록 강제할 수 있다.

Optional과 Serializable

java.util.Optional은 Serializable 인터페이스를 구현하지 않았다. 따라서 엔터티 속성을 Optional로 매핑해서는 안된다. 대신 getter 메서드에 Optional을 사용한다.

@Entity
public class PostComment implements Serializable {
 
    @Id
    @GeneratedValue
    private Long id;
 
    private String review;
 
    @ManyToOne(fetch = FetchType.LAZY)
    private Post post;
 
    @ManyToOne(fetch = FetchType.LAZY)
    private Attachment attachment;
 
    public Optional<Attachment> getAttachment() {
        return Optional.ofNullable(attachment);
    }
 
    public void setAttachment(Attachment attachment) {
        this.attachment = attachment;
    }
     
    ...
}