코딩항해기

[기타] 롬복 라이브러리 Lombok 본문

기타

[기타] 롬복 라이브러리 Lombok

miniBcake 2024. 11. 16. 10:20

 

 

Lombok

프로젝트 롬복은 표준판 코드를 최소화하거나 제거하는데 사용되는 자바 라이브러리이다. 개발 시간과 노력을 절약해주며, 어노테이션을 사용해 코드 가독성을 증가시켜준다. (기계적 코드 작성을 자동화 시켜주는 라이브러리)

 

필요성

로그 프레임워크 (logback 등)을 사용할 때 상단에 객체를 선언하고 사용해야하는 번거로움이 있었다. 이때 롬복을 사용하면 선언을 생략할 수 있다.

그 외에도 VO,DTO와 같은 클래스의 필드변수가 변경되었을 때 getter, setter, toString을 다시 만들어야하는 번거로움을 해소시켜주는 장점이 있다. 또한 getter setter 오탈자나, toString 일부 누락과 같은 휴먼에러를 줄여주는 역할을 수행한다. (가독성 증가)

 

환경세팅

이클립스에서는 설치가 필요하며 인텔리제이에서는 기본 플러그인으로 변경되었기 때문에 추가 설치를 필요로 하지 않는다.

의존성 주입은 필요하다. 인텔리제이라면 사용 선언 시 자동으로 추가할지 여부를 묻게 된다.

//maven (pom)
	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<version>1.18.36</version>
		<scope>provided</scope>
	</dependency>


//gradle
repositories {
	mavenCentral()
}

dependencies {
	compileOnly 'org.projectlombok:lombok:1.18.36'
	annotationProcessor 'org.projectlombok:lombok:1.18.36'
	
	testCompileOnly 'org.projectlombok:lombok:1.18.36'
	testAnnotationProcessor 'org.projectlombok:lombok:1.18.36'
}

 

 

어노테이션 정리

@Getter 모든 필드의 getter 메서드 생성
@Setter 모든 필드의 setter 메서드 생성
@ToString toString() 메서드 자동 생성
@EqualsAndHashCode equals()와 hashCode() 메서드 생성
@NoArgsConstructor 매개변수가 없는 기본 생성자 생성
@AllArgsConstructor 모든 필드를 매개변수로 받는 생성자 생성
@RequiredArgsConstructor final/NonNull 필드만을 매개변수로 받는 생성자
@Data @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 모두 포함
@Builder 빌더 패턴 구현
@Value 불변(immutable) 클래스 생성 (@ToString, @EqualsAndHashCode, @AllArgsConstructor, @Getter 포함)
@Slf4j Logger 객체 자동 생성
@NonNull null 체크 로직 자동 생성

 

(공식 사이트 중 기능 정리 페이지)

 

Stable

 

projectlombok.org

 

 

주의사항

Data 어노테이션을 활용하면 한 번에 여러 기능을 자동 완성시켜주지만 실무에서는 Data가 너무 무겁고 객체의 안정성을 지키기 어렵기 때문에 Data의 활용을 지양하고 필요한 기능을 직접 선언해주는 것이 좋다. (*을 지양하는 개념과 유사한 느낌이다.)

그 외에도 Setter가 남용되어 객체의 일관성을 유지하기 어렵다.

 

그 외에도 AllArgsConstructor, RequiredArgsConstructor 사용을 주의해야한다. 타입이 같을 때 값이 잘못 들어가는 논리적 이슈가 생길 수 있기 때문이다. 어떤 멤버변수에 어떤 값을 넣을지 확실히 하는 Builder를 사용하는 것이 좋다. 하지만 Builder의 경우에도 AllArgsConstrutor을 가지고 있으므로 직접 만든 생성자에 Builder를 붙이는 것이 좋다.

그리고 Builder를 사용할 때는 매개변수를 최소화해 받아야할 데이터만 받을 수 있도록 하는 것이 좋다.

 

ToString 또한 주의해야한다. 양방향 연관관계 시 순환참조 문제가 생길 수 있기 때문이다. JPA를 사용하다보면 객체를 직렬화하는 과정에서 발생하는 문제와 동일한 이유이며 무분별하게 ToString을 사용하게 되면 이러한 문제를 만나기 쉽다. 순환참조 문제를 일으키는 멤버를 제외해 해결할 수 있다.

@ToString(exclude = "coupons") //coupons는 제외

 

 

무분별한 EqualsAndHashCode 사용도 주의해야한다. 변경 가능한 필드의 경우 hashCode가 변경되어 찾을 수 없게되는 문제가 일어나기도 한다. 이를 방지하기 위해서는 3가지 방법이 있다.

  1. Immutable(불변) 클래스를 제외하고는 아무 파라미터 없는 @EqualsAndHashCode사용을 금지한다.
  2. 일반적으로 비교에서 사용하지 않는 단순 클래스의 경우에는 equals()와 hashCode()를 구현하지 않는게 낫다.
  3. 항상 @EqualsAndHashCode(of={"name"}) 형태로 동등성 비교에 필요한 필드를 명시하는 형태로 사용한다.

 

사용 방지 설정

롬복은 lombok.config 파일을 이용해 설정을 할 수 있는데, 그 중 여러 어노테이션을 사용 금지하는 설정이 있다. 이 설정을 할 경우 Data등의 어노테이션의 사용을 금지하며 컴파일 에러가 나도록 설정할 수 있다.

config.stopBubbling = true //현재 디렉토리에만 설정 적용, 상위 디렉토리의 설정은 무시
lombok.data.flagUsage=error //Data 어노테이션 사용 시 컴파일 에러 발생
lombok.allArgsConstructor.flagUsage=error //AllArgsConstructor 사용 시 컴파일 에러 발생
lombok.requiredArgsConstructor.flagUsage=error //RequiredArgsConstrutor 사용 시 컴파일 에러 발생

'기타' 카테고리의 다른 글

[기타] 액션스크립트 ActionScript (X)  (0) 2024.12.16
[기타] Commit Calendar  (0) 2024.12.11
[기타] 시간복잡도  (0) 2024.11.15
[기타] Docker 기초 이해  (0) 2024.11.12
[오블완] 오늘 블로그 완료 이벤트 11.07-11.27  (2) 2024.10.28