[Spring] @Data 에 대해서 알아보자
Java에서 클래스를 정의할 때, 보통 필드(field)와 그에 상응하는 접근자 메소드(getter, setter)를 함께 정의합니다. 이때, 자바 빈(JavaBean) 규약을 따르는 클래스라면, 필드와 메소드를 정의하는 작업이 번거로울 수 있습니다. 이러한 문제를 해결하기 위해 롬복(Lombok) 라이브러리에서는 @Data 어노테이션을 제공합니다.
@Data 어노테이션이란?
@Data 어노테이션은 롬복 라이브러리에서 제공하는 어노테이션 중 하나로, 클래스 내부에 정의된 필드에 대해 getter, setter, equals, hashCode, toString 메소드를 자동으로 생성해줍니다. 이렇게 생성된 메소드들은 모두 자바 빈 규약을 따르므로, 자바 빈 규약을 따르는 클래스를 간단하게 정의할 수 있습니다.
예제
먼저 이름과 나이를 가지고 있는 Person 클래스를 만들어보겠습니다.
기존 코드
public class Person {
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;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
위 예제에서 Person클래스는 name과 age에 대해서 getter, setter, equals, hashCode, toString 메서드를 생성하여 여러가지 기능을 수행할 수 있습니다. 하지만 필드가 늘어날수록 그에대한 메서드들을 추가해줘야 하기 때문에 코드 가독성도 떨어지고 유지보수도 힘들어 집니다. 이럴 때 @Data 어노테이션을 활용하면 위 코드를 간결하게 바꿀 수 있습니다.
바뀐 코드
import lombok.Data;
@Data
public class Person {
private String name;
private int age;
}
위 예제에서는 @Data 어노테이션을 사용하여 Persone 클래스를 정의합니다. 이렇게 정의된 클래스는 필드와 메서드를 생성하므로 기존 코드와 같이 코드를 작성할 필요가 없습니다.
@Data 어노테이션 사용
이제 위에서 정의한 Person클래스를 사용하는 예제를 보도록 하겠습니다.
public class DataTest {
public static void main(String[] args) {
Person person = new Person();
person.setName("홍길동");
person.setAge(30);
System.out.println(person.toString());
}
}
DataTest 클래스에서는 Person 객체를 생성한 후, setter를 사용하여 필드 값을 설정하고, toString() 메소드를 사용하여 객체의 내용을 출력합니다.
위 코드를 실행하면 "Person{name='홍길동', age=30}"와 같이 출력되는 것을 확인할 수 있습니다. @Data 어노테이션으로 생성된 toString() 메소드는 객체의 필드를 포함한 문자열을 반환하므로, 개발자가 별도로 toString() 메소드를 정의하지 않아도 간단하게 객체의 내용을 확인할 수 있습니다.
결론
@Data 어노테이션은 롬복 라이브러리에서 제공하는 어노테이션 중 하나로, 클래스 내부에 정의된 필드에 대해 getter, setter, equals, hashCode, toString 메소드를 자동으로 생성해줍니다. 이렇게 생성된 메소드들은 모두 자바 빈 규약을 따르므로, 자바 빈 규약을 따르는 클래스를 간단하게 정의할 수 있습니다. 따라서, @Data 어노테이션을 사용하면 클래스 정의 작업을 간단하게 할 수 있으며, 필드와 메소드가 자동으로 생성되므로, 생산성을 높일 수 있습니다.