내가 몰랐던 롬복Lombok

JooMal·2021년 2월 3일
0

@Builder 어노테이션

  • 해당 클래스에 자동으로 빌더를 추가해준다

빌더란?

디자인 패턴 중 하나인 빌더 패턴Builder pattern을 의미한다. 객체의 생성 방법과 표현 방법을 분리하는 것을 의미한다.

Member customer = Member.build()
	.name("홍길동")
    .age(30)
    .build();

위와 같은 스타일의 자바 코딩을 의미한다. (GoF-Design-PatternEffective Java 책을 통해 자세한 내용을 접할 수 있다.)

왜 쓰는걸까? 가독성이 올라가고 유지보수가 편리해지기 때문이다.

1. 객체 생성을 깔끔하고 유연하게 해보자! 첫단계 점층적 생성자 패턴

필수 인자를 받는 필수 생성자를 하나 만들고, 점층적으로 1개의, 2개의, ... n개의 필수적이지 않은 선택적 인자를 받는 생성자를 추가하는 패턴을 점층적 생성자 패턴이라 한다. 가령 이름을 받고, 나머지를 못받았다면 비공개로 처리해서 생성해주는 것.

  • 장점 : 호출이 깔끔하고 유연해진다.
  • 단점 : 파라미터 수가 많아지면 제대로 읽히질 않는다. 어떤 인자가 어떤 의미를 갖는지를 알 수가 없다.

2. 자바빈 패턴

setter 메서드를 이용해 생성 코드를 읽기 좋게 만든다. setName(...), setAge(...) 등으로 호출해서 생성을 해주나, 1회의 호출로 객체 생성이 끝나질 않는다. => 객체 일관성consistency이 깨진다.
그리고, setter 메서드가 있으므로 변경 불가능immutable클래스는 만들 수가 없다. 즉 어떻게 선언하든간에 다른 클래스에서 setter를 통해 생성 이후에도 내용을 변경할 수 있게 된다.

3. 빌더 패턴

Builder 클래스 안에 필수 인자를 받아서 생성해주는 Builder 생성자가 있고, 그 안에 Builder 클래스의 메서드로서 변수를 받아와 마지막에 build 메서드를 통해 객체를 생성해준다!

NutritionFacts cocaCola = new NutritionFacts
    .Builder(240, 8)    // 필수값 입력
    .calories(100)
    .sodium(35)
    .carbohydrate(27)
    .build();

(출처 : 기계인간님의 깃허브)

Lombok Builder Annotation

이러한 빌더 패턴을 어노테이션으로 만든게 롬복 빌더 어노테이션이었다. 어노테이션 하나로 이펙티브 자바 스타일 빌더 패턴을 만들 수 있다니, 너무 신기하다. 그리고 저렇게 체인(.)으로 쭉쭉 이어지는 코드 형태가 굉장히 신기하다.

로거 자동 생성, @Log

private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());

이러한 코드를 @Log 한 줄로 대체하여, log.info("...")로 사용할 수 있습니다. 흔히 들어본 로깅 프레임워크인 log4j에 대응하는 어노테이션 역시 제공하고 있습니다.
뭔가 로깅에 대한 방법론 서적도 있을 듯 합니다.
그냥 직접 java.util.logging.Logger로 하면 되는걸 왜 log4j같은 로깅 프레임워크를 쓸까요? 바로 멀티스레드 환경에서 사용해도 안전하게끔 설계되어 있고, 속도에 최적화되어있기 때문입니다. 책을 보면서 혼자 두드리는 것과 달리 역시 실무에서 사용되는 기술은 동시성과 속도에 대해 아주 많이 신경을 쏟아주어야 하네요. 머리로는 알지만 실제로 체감해본 적이 없다보니 얼마나 중요할지에 대한 감이 잡히질 않습니다.

@Getter @Setter

지금까지 타이핑해온 수많은 Getter와 Setter는 이 어노테이션으로 대체됩니다. 코드 가독성이 훨씬 올라가겠습니다.

자동 자원 닫기, @Cleanup

Cleanup 어노테이션을 통해 자원 close() 메소드 호출을 자동으로 할 수 있습니다. 직접 finally절을 통해 conn.close()를 해줄 필요가 없어진거죠.

Ref

기계인간 이종립님
Dale Seo님

profile
🏄‍♂️ 𝐒𝐭𝐮𝐝𝐲𝐢𝐧𝐠

0개의 댓글