@Data
Java에서는 객체지향 프로그래밍을 위해 필드에 대한 접근을 캡슐화(encapsulation)하며, 이에 따라 getter, setter, equals(), hashCode(), toString() 등의 메서드를 반복적으로 작성해야 하는 불편함이 존재합니다.
이를 해결하기 위해 등장한 것이 바로 Project Lombok이며, Lombok의 @Data 어노테이션은 이러한 보일러플레이트 코드를 자동으로 생성해줍니다.
@Data의 내부
@Data는 Lombok이 제공하는 어노테이션 중 하나로, 해당 클래스에 대해 다음과 같은 기능을 자동으로 생성합니다
- @Getter: 모든 필드에 대해 getter 메서드 생성
- @Setter: 모든 필드에 대해 setter 메서드 생성
- @ToString: toString() 메서드 자동 생성
- @EqualsAndHashCode: equals() 및 hashCode() 메서드 자동 생성
- @RequiredArgsConstructor: final 또는 @NonNull이 붙은 필드를 인자로 받는 생성자 생성
즉, @Data는 위의 어노테이션들을 포괄하는 복합 어노테이션이라고 이해할 수 있습니다.
사용 예시
import lombok.Data;
@Data
public class User {
private String username;
private int age;
}
위 코드만 작성하면, 컴파일 시점에 다음과 같은 메서드들이 자동 생성됩니다
- getUsername(), setUsername(String username)
- getAge(), setAge(int age)
- toString()
- equals(Object o), hashCode()
- (필드가 final 또는 @NonNull일 경우 생성자도)
주의 사항
- 불변 객체(Immutable Object)를 원할 경우 @Data는 적절하지 않을 수 있습니다. 이 경우 @Value 어노테이션을 사용하는 것이 더 적합합니다.
- @Data는 모든 필드에 대해 setter를 생성하므로, 객체의 불변성을 보장할 수 없습니다.
- 민감한 정보(ex. 비밀번호)를 toString()에 포함시키고 싶지 않다면, 해당 필드에 @ToString.Exclude를 사용하여 제외해야 합니다.
요약
✅ @Data는 Lombok이 제공하는 강력한 어노테이션으로, getter, setter, toString, equals, hashCode, 생성자 등을 자동으로 생성해줍니다.
✅ 코드 작성은 편리해지지만, 모든 기능이 한꺼번에 적용되기 때문에 클래스의 역할에 따라 신중하게 사용해야 합니다.
출처
OpenAI의 ChatGPT (https://openai.com)
'프로그래머스 > Spring' 카테고리의 다른 글
| [Spring] MockMvc (0) | 2025.04.16 |
|---|---|
| [Spring] 단위 테스트(Unit Test) vs 통합 테스트(Integration Test) (0) | 2025.03.28 |
| [Spring] JPA Specification (1) | 2025.02.19 |
| [Spring] Bean (1) | 2025.02.12 |
| [Spring] 페이징 (Paiging) 주요 메서드 (0) | 2025.02.10 |