Programming/Java, Spring

[Spring] Lombok이란? / Lombok의 사용 이유 / Lombok의 단점 / Lombok 사용법

Juun 2022. 10. 14. 13:00
반응형

Lombok이란??

반복되는 메서드를 Annotation을 사용하여 자동으로 작성해주는 라이브러리입니다

일반적으로 DTO, VO, Model, Entity 등의 데이터 클래스에서 많이 사용됩니다.

대표적으로 많이 사용되는 Annotation

  • @Getter
  • @Setter
  • @NoArgConstructor
  • @AllArgConstructor
  • @Data
  • @ToString
  • @Builder

Lombok의 사용이유

  1. Annotation 기반의 코드 자동생성으로 인한 생산성이 증가합니다.
  2. 반복코드를 줄일 수 있어 유지보수와 가독성을 향상시킬 수 있습니다.
  3. Getter / Setter 외 Builder 패턴이나 Log 생성 등의 다양한 방면으로 활용이 가능합니다.

Lombok의 단점

  1. Lombok을 지원하는 IDE는 IntelliJ와 Eclipse 2개입니다.
  2. 자바의 컴파일러에 강하게 결합되어 있는 한계가 있습니다. 컴파일어의 수정은 공개 API를 많이 사용하는데 컴파일러를 업그레이드 하게 되면 깨질 수도 있습니다.
  3. Lombok 사용시, 모든 계층이 Lombok에 의존하게 됩니다.
  4. 모든 사람이 Lombok plugin이 필요합니다.

Lombok 사용법

pom.xml에 의존성 주입해줍니다

<dependencies> 태그 안에 <dependency>를 넣어주면 됩니다

<dependencies>
...
	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<optional>true</optional>
	</dependency>
...
</dependencies>

@Getter / @Setter

해당 클래스에 선언되어 있는 필드를 기반으로 ‘getField’ , ‘setField’ 와 같은 식으로 자동으로 메소드 생성

xxx라는 필드에 선언하면 자동으로 getXxx()으로 만들어주고 만약(boolean 타입인 경우 isXxx()와 setXxx() 메소드를 생성해줍니다.

@NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor

@NoArgsConstructor : 파라미터가 없는 생성자를 생성

@AllArgsConstructor : 모든 필드값을 파라미터로 갖는 생성자를 생성

@RequiredArgsConstructor : 필드값 중 final이나 @NotNull인 값을 갖는 생성자를 생성

@ToString

toString 메소드를 작성해주는 Annotation

@ToString 어노테이션에 exclude 속성을 사용하여 특정 필드를 toString에서 제외시킬 수 있습니다.

@EqualsAndHashCode

자바 빈을 만들 때 equals와 hashCode 메소드를 자주 오버라이딩 하는데요.

@EqualsAndHashCode 어노테이션을 사용하면 자동으로 이 메소드를 생성할 수 있습니다.

callSuper 속성을 통해 equals와 hashCode 메소드 자동 생성 시

부모 클래스의 필드까지 감안할지 안 할지에 대해서 설정할 수 있습니다.

equals : 두 객체의 내용이 같은지 동등성(equality)를 비교하는 연산자
hashCode : 두 객체가 같은 객체인지 동일성(identity)를 비교하는 연산자

즉, callSuper = true로 설정하면 부모 클래스 필드 값들도 동일한지 체크하며,

callSuper = false로 설정(기본값)하면 자신 클래스의 필드 값들만 고려합니다.

@Data

@Data는 위에서 설명한 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode를 한꺼번에 설정해주는 매우 유용한 어노테이션입니다

@Builder

@Builder를 사용하면 객체 생성이 명확해집니다. 가급적 클래스 보다는 직접 만든 생성자 혹은 static 객체 생성 메소드에 붙이는 것을 권장합니다. @Builder를 붙이면 파라미터 순서가 아닌 이름으로 값을 설정하기 때문에 리팩토링에 유연하게 대응할 수 있고, 필드 순서를 변경해도 문제가 없습니다.

여기까지가 자주 쓰이는 Lombok Annotation 입니다

아래 Annotation도 있으니 참고 부탁드립니다


@NonNull

자동으로 null 체크를 진행하여 null 인 경우 NullPointerException 을 발생 시킵니다

@Cleanup

자동으로 자원을 관리합니다. close() 메소드를 호출하여 자원을 종료시킵니다

@Value

불변 클래스를 쉽게 생성해 줍니다

@SneakyThrows

Exception 발생시 체크된 Throable로 감싸서 전달해줍니다

@Synchronized

메소드에서 동기화 Lock을 설정을 해줍니다

@Log

종류별 로그를 사용할 수 있도록 해줍니다. (@Log, @Slf4j, @CommonLog 등)등등.

@Accessors

기본 생성된 setter 들은 return type 이 void 이므로 method chaining 을 사용할 수 없습니다

**@Accessors에 chain=true 파라미터를 사용하면 생성되는 setter 의 리턴 타입이 this 로 변경됩니다

반응형