개발/Java

Lombok @Data 애노테이션 - 코드 간결화를 위한 필수 도구

이쪽저쪽살짝 2023. 3. 31. 22:16
반응형

1. 들어가며
Lombok은 Java 개발자를 위한 라이브러리로, 반복적인 코드를 줄여 소스 코드를 간결하게 유지할 수 있게 도와줍니다. 특히, Lombok의 @Data 애노테이션은 클래스에 자동으로 getter, setter, toString, equals, hashCode 메서드를 추가해주어 작성해야 할 코드를 크게 줄여줍니다. 

Lombok @Data 애노테이션의 사용법 및 활용 사례를 소개합니다.

 

2. Lombok 설치
Maven 또는 Gradle 프로젝트에 Lombok을 추가하려면, 빌드 파일에 다음 종속성을 추가하세요.

 

Maven:

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.22</version>
  <scope>provided</scope>
</dependency>

Gradle:

compileOnly 'org.projectlombok:lombok:1.18.22'
annotationProcessor 'org.projectlombok:lombok:1.18.22'

3. Lombok @Data 애노테이션 사용법

 

3.1 기본 사용법
@Data 애노테이션을 사용하면, 클래스에 자동으로 getter, setter, toString, equals, hashCode 메서드가 추가됩니다. 아래 예제에서는 Person 클래스에 @Data 애노테이션을 사용하여 간단한 구현을 살펴봅니다.

import lombok.Data;

@Data
public class Person {
    private String name;
    private int age;
}

@Data 애노테이션을 사용함으로써, 다음과 같은 코드를 생략할 수 있습니다.

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() {
    // 구현 생략
}

@Override
public boolean equals(Object o) {
    // 구현 생략
}

@Override
public int hashCode() {
    // 구현 생략
}

3.2 생성자와 @Data 애노테이션

`@Data` 애노테이션은 기본 생성자 및 getter, setter, toString, equals, hashCode 메서드를 추가하지만, 모든 필드를 초기화하는 생성자는 추가되지 않습니다. 이때 필요한 생성자를 자동으로 추가하려면 `@AllArgsConstructor` 애노테이션을 사용할 수 있습니다.

 

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Person {
    private String name;
    private int age;
}

이제 모든 필드를 초기화하는 생성자를 사용할 수 있습니다.

Person person = new Person("John Doe", 30);

또한, @NoArgsConstructor 애노테이션을 사용하여 기본 생성자를 명시적으로 추가할 수 있습니다.

import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
    private String name;
    private int age;
}

3.3 상속과 @Data 애노테이션
상속 구조에서 @Data 애노테이션을 사용할 때는 주의가 필요합니다. 상위 클래스에 정의된 필드에 대해 하위 클래스가 자동으로 생성된 메서드를 오버라이드하게 되어, 예기치 않은 동작이 발생할 수 있습니다.

예를 들어, 아래의 Employee 클래스는 Person 클래스를 상속받습니다.

@Data
public class Person {
    private String name;
    private int age;
}

@Data
public class Employee extends Person {
    private String employeeId;
}

이 경우, Employee 클래스의 toString, equals, hashCode 메서드는 상위 클래스인 Person 클래스의 메서드를 오버라이드하게 됩니다. 이 문제를 해결하려면, @EqualsAndHashCode(callSuper = true)와 @ToString(callSuper = true) 애노테이션을 사용하여 상위 클래스의 메서드를 명시적으로 호출할 수 있습니다.

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class Employee extends Person {
    private String employeeId;
}

이렇게 하면, `Employee` 클래스의 `toString`, `equals`, `hashCode` 메서드가 상위 클래스인 `Person` 클래스의 메서드를 올바르게 호출하게 됩니다.

 

4. 결론
Lombok 라이브러리의 `@Data` 애노테이션은 자동으로 getter, setter, toString, equals, hashCode 메서드를 생성하여 코드를 간결하게 유지하는 데 도움이 됩니다. 이 글에서는 기본 사용법부터 상속 구조에서의 사용법까지 다양한 활용 사례를 소개했습니다.

 

그러나 Lombok은 컴파일 시간에 코드를 생성하므로, 디버깅 및 코드 가독성에 영향을 줄 수 있습니다. 따라서 Lombok을 사용하기 전에 이러한 점을 고려해야 하며, 프로젝트 요구사항에 따라 적절한 사용이 필요합니다.

 

참고자료:
1. [Lombok 공식 웹사이트]

2. [Lombok GitHub 저장소]

3. [Lombok 사용자 설명서]

반응형