📌 Java Spring Lombok 완전 정복
✅ 개요: Lombok이란?
Lombok은 Java에서 반복적으로 작성되는 보일러플레이트 코드를 자동 생성해주는 라이브러리입니다.
대표적으로
getter
, setter
, toString()
, equals()
, 생성자 등을 애너테이션 하나로 처리할 수 있어 생산성을 높이고 가독성을 향상시킵니다.✅ Lombok 주요 애너테이션 정리
애너테이션 | 설명 |
@Getter | 모든 필드 또는 개별 필드에 대한 getter 생성 |
@Setter | 모든 필드 또는 개별 필드에 대한 setter 생성 |
@ToString | toString() 메서드 자동 생성 |
@EqualsAndHashCode | equals() 및 hashCode() 자동 생성 |
@NoArgsConstructor | 파라미터 없는 생성자 생성 |
@AllArgsConstructor | 모든 필드를 포함한 생성자 생성 |
@RequiredArgsConstructor | final 또는 @NonNull 필드만 포함한 생성자 생성 |
@Data | @Getter , @Setter , @ToString , @EqualsAndHashCode , @RequiredArgsConstructor 통합 |
@Builder | 빌더 패턴 생성 지원 |
@Value | 불변 객체 생성용. final , private , getter 만 생성 |
✅ 핵심 차이점: @Getter
, @Setter
, @Data
항목 | 설명 | 생성되는 메서드 |
@Getter | 모든 필드에 대한 getter 생성 | getX() |
@Setter | 모든 필드에 대한 setter 생성 | setX(value) |
@Data | Getter + Setter + ToString + EqualsAndHashCode + RequiredArgsConstructor | 위 모두 생성 |
@Data는 DTO 등에 편리하지만, 모든 메서드를 자동 생성하므로 민감 정보 또는 순환 참조 주의 필요
✅ 주요 애너테이션 사용 예시
1. @Getter
, @Setter
@Getter @Setter public class User { private String name; private int age; }
→ 아래 메서드가 자동 생성됨:
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; }
2. @Data
@Data public class User { private String name; private int age; }
→ 다음 메서드 자동 생성:
getName()
,setName()
getAge()
,setAge()
toString()
equals(Object o)
hashCode()
RequiredArgsConstructor
도 생성됨
3. @Builder
@Builder public class Article { private Long id; private String title; private String content; }
→ 객체 생성 시 유연하게 활용 가능:
Article article = Article.builder() .id(1L) .title("Lombok Guide") .content("Details about Lombok") .build();
⚠️ 실무 시 주의사항
상황 | 주의 포인트 |
JPA Entity 클래스 | @Data 는 피해야 함 (양방향 연관관계 순환참조 위험) |
@ToString 사용 시 | 예: @ToString(exclude = "orders") 로 순환 방지 |
DTO 클래스에 @Data 사용 | OK. 순수 데이터 전달용으로는 매우 유용 |
불변 객체 필요 시 | @Value 사용. 모든 필드는 final 이 되고 setter 는 생성되지 않음 |
민감 정보 포함 클래스 | @ToString 으로 정보 노출 위험 주의 필요 (로그에 노출될 수 있음) |
✅ 추천 사용 패턴
상황 | 추천 애너테이션 |
DTO 클래스 | @Data |
Entity 클래스 | @Getter , @Setter , @ToString(exclude = ...) , @EqualsAndHashCode(exclude = ...) |
생성자 주입 필요 시 | @RequiredArgsConstructor 또는 @AllArgsConstructor |
불변 객체 설계 | @Value |
빌더 패턴 사용 | @Builder |
✅ Lombok 설정 방법 (IDE & Gradle 기준)
Gradle 설정
dependencies { compileOnly 'org.projectlombok:lombok:1.18.30' annotationProcessor 'org.projectlombok:lombok:1.18.30' }
IntelliJ 설정
Preferences > Plugins > Lombok Plugin
설치
Preferences > Build, Execution, Deployment > Compiler > Annotation Processors
→Enable annotation processing
체크
✅ 마무리 정리
- Lombok은 Java 코드의 생산성과 가독성을 높이는 필수 도구
- DTO, VO, Entity 등 각 상황에 따라 적절한 애너테이션 조합이 중요
- 자동 생성된 메서드가 코드에 미치는 영향과 유지보수성까지 고려할 것