[Spring] Lombok 라이브러리

벼랑 끝 코딩·2025년 3월 18일

Spring

목록 보기
3/16

클래스를 설계할 때 기본적으로 생성해야할 것들이 있다.
생성자, get() 메서드, set() 메서드가 이에 속한다.

이러한 코드는 클래스를 지저분하게 만들고,
특히 필드가 많아지면 get(), set() 메서드의 경우 코드 줄을 의미 없이 길게 만든다.
너무 공통적인 작업인데 어떻게 할 수 있는 방법이 없을까?

그 해결책이 바로 Lombok 라이브러리이다.

Lombok 라이브러리 설치

Lombok을 사용하기 위해서는 먼저 라이브러리를 설치해야 한다.
Lombok 라이브러리는 Window 기준 다음과 같은 경로로 설치할 수 있다.

  • File → Settings → plugin

  • lombok 설치 및 재시작

Lombok 사용 설정

Lombok 라이브러리 설치 이후 정상적으로 사용하기 위해서는 설정 작업이 필요하다.

  • File → Setting

  • Annotation Processors → Enable annotation processing 체크

build.gradle 라이브러리 추가

Lombok 라이브러리를 설치하고 사용 설정을 완료했으면,
build.gradle에 설치한 라이브러리를 추가하고 사용할 수 있다.

build.gradle

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

Lombok 기능

본격적으로 Lombok의 기능을 사용해보자.

@RequiredArgsConstructor

@RequiredArgsConstructor
class Service {
	
    private final Repository repository;
}

@RequiredArgsConstructor 애노테이션은
final 키워드와 함께 사용된 필드의 생성자를 자동으로 생성한다.

Spring에서는 생성자가 1개인 경우 @Autowired 애노테이션 생략이 가능하기 때문에,
Lombok 라이브러리를 사용하면 필드를 선언하는 것만으로 의존관계 주입이 가능하다.

@NoArgsConstructor

@NoArgsConstructor(access = AccessLevel.PUBLIC)
class Service {
	
    // 코드
}

아무 인자도 받지 않는 기본 생성자를 자동으로 만들어주는 애노테이션이다.
access 속성을 통해 접근 제어자를 설정할 수 있다.

  • PUBLIC : 접근 제어자를 public으로 설정
  • PROTECTED : 접근 제어자를 protected로 설정
  • PACKAGE : 접근 제어자를 default로 설정
  • PRIVATE : 접근 제어자를 private로 설정
  • NONE : 생성자를 만들지 않음

@Getter, @Setter

@Getter
@Setter
class Service {
	
    private String name;
    private int age;
    
    // ** get(), set() 메서드 자동 생성 **
}

클래스에 선언된 모든 필드에 대하여 get(), set() 메서드를 자동 생성한다.

class Service {
	
    @Getter
    @Setter
    private String name;
    
    private int age;
    
    // ** get(), set() 메서드 자동 생성 **
}

클래스가 아닌 필드 레벨에 선언하는 경우,
get(), set() 메서드를 생성할 필드를 특정할 수 있다.

@Slf4j

로그는 스레드 정보, 클래스 이름과 같은 정보를 함께 볼 수 있고
출력 정보를 조절하는 등 다양한 기능을 사용할 수 있다.
System.out보다 성능이 좋기 때문에 로그를 사용해야 한다.

SpringBoot는 로그 기능을 사용하기 위해 로깅 라이브러리로
SLF4J, Logback을 사용한다.
SLF4J는 인터페이스, Logback은 구현체이다.

로그 기능을 사용하기 위해서는 Logger 객체를 생성하여 사용해야 한다.

private static final Logger log = LoggerFacotry.getLogger(Object.class);

@Slf4j 애노테이션을 사용하면 객체를 생성하는 위 코드를 자동으로 생성해준다.
log 변수를 통해 로그 기능을 사용할 수 있다.

log.trace();
log.debug();
log.info();  // default
log.warn();
log.error();

  • 로그 레벨

로그에는 중요도 레벨이 있다.
trace(가장 양호) → debug → info → warn → error(가장 심각) 순서로 구성된다.

예를 들어 info를 로그 레벨로 설정한 경우, 이보다 중요도가 약한 레벨인
trace와 debug와 관련된 로그는 출력되지 않는다.
개발 서버에서는 debug, 운영 서버에서는 info를 출력한다.

  • {} 사용

로그에서는 문자열의 더하기 연산을 사용하지 않는다.
더하기 연산 대신 '{}' 기호를 사용한다.

log.info("Log Level = " + logLevel)  // ** 사용 금지 **
log.info("Log Level = {}", logLevel);  // ** {} 사용 **

더하기 연산을 사용할 경우, 출력하지 않아도 되는 로그에서 더하기 연산이 발생한다.
'{}'를 사용해야 연산이 발생하지 않고 무시 가능한 로그는 무시된다.

@ToString

클래스의 ToString() 메서드를 자동으로 생성해주는 애노테이션이다.

@EqualsAndHashCode

클래스의 equals() 메서드, hashCode() 메서드를 자동으로 생성해주는 애노테이션이다.

@Data

@RequiredArgsConstructor, @Getter, @Setter,
@ToString, @EqualsAndHashCode
를 자동으로 적용해주는 애노테이션이다.

마무리

Lombok 라이브러리를 사용하면 코드를 간소화하여 클린하게 클래스를 설계할 수 있다.
Lombok 라이브러리의 더 많은 기능을 배워나가면서 편리하게 개발해보자.

(Lombok 라이브러리 기능 향후 계속해서 추가 예정)

profile
복습에 대한 비판과 지적을 부탁드립니다

0개의 댓글