어제 오늘 내일

[Java] 롬복(Lombok) 완벽 가이드 - 코드를 1/10로 줄이는 마법 🪄 본문

IT/Java

[Java] 롬복(Lombok) 완벽 가이드 - 코드를 1/10로 줄이는 마법 🪄

hi.anna 2026. 2. 26. 01:52

Java 개발을 하다 보면 로직은 한 줄인데, 그 데이터를 담기 위한 클래스(DTO) 코드가 수십 줄이 되는 경험, 다들 있으시죠? 롬복은 이 "지루한 반복 작업(Boilerplate Code)"을 어노테이션 하나로 해결해 줍니다.


Java 개발자라면 피해 갈 수 없는 고통이 있습니다.
바로 Getter, Setter, 생성자, toString... 같은 '보일러플레이트(Boilerplate)' 코드들입니다.
의미 없이 반복되는 이 코드들은 클래스 파일을 길게 만들고 가독성을 떨어뜨립니다.
오늘은 이 고통에서 해방시켜 줄 Lombok(롬복)에 대해 알아봅니다.


1. 롬복(Lombok)이란?

Lombok은 Java 라이브러리로, 반복되는 메서드를 컴파일(Compile) 시점에 자동으로 생성해 주는 도구입니다.
우리가 소스 코드(src)에는 어노테이션(@Getter)만 붙여놓으면, 컴파일된 결과물(.class)에는 실제 get~() 메서드 코드가 바이트코드로 심어지는 원리입니다.

💡 왜 써야 하나요?

  1. 코드 다이어트: 100줄짜리 DTO 클래스가 10줄로 줄어듭니다.
  2. 가독성 향상: 잡다한 코드가 사라져서 핵심 필드 변수만 한눈에 들어옵니다.
  3. 생산성 증대: 타이핑할 시간이 줄어듭니다.
  4. 유지보수 용이: 필드 이름이 바뀌어도 Getter/Setter 이름을 일일이 고칠 필요가 없습니다.

2. 설치 및 설정 (IntelliJ & Gradle)

스프링 부트 프로젝트를 생성할 때 Lombok 의존성을 추가했다면 build.gradle에 이미 들어있을 겁니다. 없다면 추가해 주세요.

① build.gradle 의존성 추가

dependencies {
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}

② IntelliJ 설정 (필수!)

롬복은 컴파일 시점에 동작하므로 IDE 설정이 필요합니다.

  • Settings (Win: Ctrl+Alt+S / Mac: Cmd+,) -> Build, Execution, Deployment -> Compiler -> Annotation Processors
  • Enable annotation processing 체크박스 활성화

3. 백문이 불여일견: Before & After

회원 정보를 담는 Member 클래스를 예로 들어보겠습니다.

😱 롬복 사용 전 (Before)

필드가 고작 3개인데 코드가 이렇게 깁니다.

public class Member {
    private String id;
    private String name;
    private int age;

    public Member() {} // 기본 생성자

    public Member(String id, String name, int age) { // 전체 생성자
        this.id = id;
        this.name = name;
        this.age = age;
    }

    // Getter & Setter 지옥...
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }

    @Override
    public String toString() {
        return "Member{id='" + id + "', name='" + name + "', age=" + age + "}";
    }
}

😎 롬복 사용 후 (After)

똑같은 기능을 하는 코드가 단 6줄로 끝납니다.

import lombok.*;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Member {
    private String id;
    private String name;
    private int age;
}

4. 자주 쓰는 핵심 어노테이션 총정리

가장 많이 사용하는 것들만 모았습니다. 이것만 알아도 충분합니다!

1)  /

  • 모든 필드의 getXXX(), setXXX() 메서드를 생성합니다.
  • 특정 필드 위에 붙이면 그 필드만 생성합니다.

2) 생성자 3대장

  • @NoArgsConstructor: 파라미터가 없는 기본 생성자를 생성합니다. (JPA Entity 필수)
  • @AllArgsConstructor: 모든 필드를 파라미터로 받는 생성자를 생성합니다.
  • @RequiredArgsConstructor: final이 붙은 필드@NonNull 필드만 받는 생성자를 생성합니다.
  • 💡 Spring Boot 꿀팁: 의존성 주입(DI)할 때 @Autowired 대신 이걸 가장 많이 씁니다!

3)

  • 클래스의 데이터를 문자열로 예쁘게 찍어줍니다. 로그 찍을 때 유용합니다.
  • @ToString(exclude = "password") 처럼 민감한 정보는 제외할 수 있습니다.

4)  (종합 선물 세트)

  • @Getter + @Setter + @RequiredArgsConstructor + @ToString + @EqualsAndHashCode 를 한 방에 해결합니다.
  • ⚠️ 주의: DTO에는 좋지만, Entity에는 쓰지 마세요! 양방향 연관관계 시 toString 무한 루프에 빠질 수 있습니다.

5)  (빌더 패턴)

  • 생성자 파라미터가 많을 때 순서를 헷갈리지 않게 해주는 빌더 패턴을 자동으로 생성합니다.
// 사용 예시
Member member = Member.builder()
        .id("user1")
        .name("김철수")
        .age(20)
        .build();

6)  (로깅)

  • private static final Logger log = ... 이 긴 코드를 자동으로 넣어줍니다.
  • 그냥 바로 log.info("메시지"); 를 쓸 수 있습니다.

5. 실무 사용 시 주의사항 ⚠️

롬복은 정말 편하지만, 너무 과하게 쓰면 독이 됩니다.

  1. JPA Entity에는 @Data를 쓰지 마세요.
  • @ToString이 서로를 계속 호출하다가 스택 오버플로우(StackOverflow) 에러가 날 수 있습니다.
  • Entity에는 @Getter@NoArgsConstructor(access = AccessLevel.PROTECTED) 정도만 쓰고, Setter는 꼭 필요할 때만 여는 것이 좋습니다.
  1. @AllArgsConstructor 남발 주의
  • 필드 순서가 바뀌면 생성자 호출 코드에서 심각한 버그가 생길 수 있습니다.
  • 가능하면 @Builder를 사용하는 것을 권장합니다.

🎉 마무리

이제 롬복 없는 자바 개발은 상상하기 힘듭니다.
반복되는 타이핑 노동에서 벗어나, 진짜 중요한 비즈니스 로직에 집중하세요!
오늘부터 여러분의 코드는 Lombok으로 다이어트 시작입니다! 💪
 
 

반응형
Comments