| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- 자바스크립트
- junit
- 배열
- math
- Eclipse
- 인텔리제이
- 정규식
- list
- SpringBoot
- Array
- Visual Studio Code
- HashMap
- 자바
- javascript
- 자바문법
- 단위테스트
- 테스트자동화
- junit5
- 스프링부트
- js
- vscode
- string
- java테스트
- input
- IntelliJ
- 문자열
- Java
- CSS
- html
- ArrayList
- Today
- Total
어제 오늘 내일
[Java] 롬복(Lombok) 완벽 가이드 - 코드를 1/10로 줄이는 마법 🪄 본문
Java 개발을 하다 보면 로직은 한 줄인데, 그 데이터를 담기 위한 클래스(DTO) 코드가 수십 줄이 되는 경험, 다들 있으시죠? 롬복은 이 "지루한 반복 작업(Boilerplate Code)"을 어노테이션 하나로 해결해 줍니다.
Java 개발자라면 피해 갈 수 없는 고통이 있습니다.
바로 Getter, Setter, 생성자, toString... 같은 '보일러플레이트(Boilerplate)' 코드들입니다.
의미 없이 반복되는 이 코드들은 클래스 파일을 길게 만들고 가독성을 떨어뜨립니다.
오늘은 이 고통에서 해방시켜 줄 Lombok(롬복)에 대해 알아봅니다.
1. 롬복(Lombok)이란?
Lombok은 Java 라이브러리로, 반복되는 메서드를 컴파일(Compile) 시점에 자동으로 생성해 주는 도구입니다.
우리가 소스 코드(src)에는 어노테이션(@Getter)만 붙여놓으면, 컴파일된 결과물(.class)에는 실제 get~() 메서드 코드가 바이트코드로 심어지는 원리입니다.
💡 왜 써야 하나요?
- 코드 다이어트: 100줄짜리 DTO 클래스가 10줄로 줄어듭니다.
- 가독성 향상: 잡다한 코드가 사라져서 핵심 필드 변수만 한눈에 들어옵니다.
- 생산성 증대: 타이핑할 시간이 줄어듭니다.
- 유지보수 용이: 필드 이름이 바뀌어도 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. 실무 사용 시 주의사항 ⚠️
롬복은 정말 편하지만, 너무 과하게 쓰면 독이 됩니다.
- JPA Entity에는
@Data를 쓰지 마세요.
@ToString이 서로를 계속 호출하다가 스택 오버플로우(StackOverflow) 에러가 날 수 있습니다.- Entity에는
@Getter와@NoArgsConstructor(access = AccessLevel.PROTECTED)정도만 쓰고, Setter는 꼭 필요할 때만 여는 것이 좋습니다.
@AllArgsConstructor남발 주의
- 필드 순서가 바뀌면 생성자 호출 코드에서 심각한 버그가 생길 수 있습니다.
- 가능하면
@Builder를 사용하는 것을 권장합니다.
🎉 마무리
이제 롬복 없는 자바 개발은 상상하기 힘듭니다.
반복되는 타이핑 노동에서 벗어나, 진짜 중요한 비즈니스 로직에 집중하세요!
오늘부터 여러분의 코드는 Lombok으로 다이어트 시작입니다! 💪
'IT > Java' 카테고리의 다른 글
| [Java] Enum 사용법 총정리 (0) | 2026.02.17 |
|---|---|
| [Java] Immutable 객체란? (0) | 2026.01.04 |
| [Java] Lambda(람다식) 쉽게 이해하기 (0) | 2026.01.03 |
| [Java] Stream API 기초와 예제 (0) | 2026.01.03 |
| [Java] Optional 사용법 (NullPointerException 방지) (0) | 2026.01.02 |
