DTO, VO, Entity와 같은 클래스에서 기계적으로 작성하는 코드 getter, setter, Tostring, HashCode 등과 같은 코드를 깔끔하게 작성하게 도와주는 도구입니다.
롬복이 간편한만큼 장점만 있는것은 아닙니다.
개발자의 개발환경에 Lombok이 설치되어있어야하는 단점과 손쉽게 쓸 수 있어 어노테이션을 난발하다가는 알 수 없는 예기치못한 에러가 발생 할 수 있습니다.
그러게 위해서는 정확한 Lombok 사용가이드를 알아야겠죠?
@Data : 다음 어노테이션을 모두 한번에 처리 한다.
@ToString
@EqualsAndHashCode
@Getter(모든 필드)
@Setter(모든 필드-final로 선언되지 않은)
@RequiredArgsConstructor
종합 선물 세트처럼 보이는 @Data 어노테이션은 사실 간편해보이지만 서비스 기능명세와는 다르게 동작할 수 있다는 리스크를 가지고 있다.
예시로 @Setter 어노테이션은 자동으로 Setter 메소드를 생성해주는데 변경사항이 발생하지 않는 Entity에도 적용을 해버리기 때문에 예기치못한 상황이 발생할 가능성을 품고있어 최대한 사용은 지양해야한다.
그렇다면 어노테이션을 하나씩 살펴보도록 하자.
@NonNull Null : 값이 될 수 없다는 것을 명시합니다. NullPointerException에 대한 대비책이 될 수 있습니다.
@Cleanup : 자동으로 close() 메소드를 호출합니다.
@Getter/@Setter : 코드가 컴파일 될 때, Getter/Setter 메소드를 생성합니다.
@ToString : toString() 메소드를 생성합니다. @ToString(exclude={"제외할 값"}) 처럼 원하지 않는 속성은 제외할 수 있습니다.
@EqualsAndHashCode : 해당 객체의 equals()와 hashCode() 메소드를 생성합니다.
@NoArgsConstructor : 파라미터를 받지 않는 생성자를 만들어 줍니다.
@RequiredArgsConstructor : 지정된 속성들에 대해서만 생성자를 만듭니다.
@AllArgsConstructor : 모든 속성에 대해서 생성자를 만들어 냅니다.
@Value : 불변 클래스를 생성할 때 사용합니다.
@Builder : 빌더 패턴을 사용할 수 있도록 코드를 생성합니다.
@SneakyThrows : 예외 발생 시 Throwable 타입으로 반환합니다.
@Syncronized : 메소드에서 동기화를 설정합니다.
@Getter(lazy=true) : 동기화를 이용해서 최초 한번만 getter를 호출합니다.
@Builder 어노테이션을 사용하는 일이 많은데 builder 패턴에 대해 잘모르고 있어서 추가적으로 학습을 진행했습니다.
빌더패턴은 디자인패턴 중 하나로 생성과 분리를 목적으로하는 패턴이라고합니다.
참고 문헌 : https://lemontia.tistory.com/483