Java 개발을 하다보면 번거로운 Getter와 Setter 메서드를 반복해서 작성해야 하는 경우가 있습니다. 이런 불필요한 작업을 줄여주고 가독성을 높여주는 도구 중 하나가 Lombok입니다. 이 글에서는 Lombok을 사용하지 않았을 때와 사용했을 때의 차이를 예제와 함께 살펴보겠습니다.
Lombok을 사용하지 않은 경우
먼저, Lombok을 사용하지 않았을 때의 코드를 살펴봅시다.
public class PersonWithoutLombok {
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;
}
}
위의 코드에서는 PersonWithoutLombok 클래스를 정의하고, name과 age 필드에 대한 Getter와 Setter 메서드를 수동으로 작성해야 합니다. 이렇게 수동으로 Getter와 Setter를 작성하면 코드 양이 증가하고 가독성이 저하됩니다.
Lombok을 사용한 경우
이제 Lombok을 사용하여 동일한 클래스를 구현하는 방법을 살펴봅시다.
import lombok.Data;
@Data
public class Person {
private String name;
private int age;
}
Lombok을 사용하면 @Data 어노테이션은 Getter, Setter, Equals, HashCode, ToString 메서드를 자동으로 생성합니다. 즉, 클래스의 모든 기본 메서드를 자동으로 생성해주어 코드를 간결하게 만들어줍니다.
Lombok 어노테이션 설명
1. @Getter와 @Setter
@Getter와 @Setter 어노테이션은 Getter와 Setter 메서드를 자동으로 생성합니다. 이를 통해 필드에 접근하고 수정하는 메서드를 수동으로 작성하지 않아도 됩니다.
예제:
import lombok.Getter;
import lombok.Setter;
public class Person {
@Getter @Setter
private String name;
@Getter @Setter
private int age;
}
2. @Data
@Data 어노테이션은 Getter, Setter, Equals, HashCode, ToString 메서드를 자동으로 생성합니다. 즉, 클래스의 모든 기본 메서드를 자동으로 생성해주어 코드를 간결하게 만들어줍니다.
예제:
import lombok.Data;
@Data
public class Person {
private String name;
private int age;
}
3. @EqualsAndHashCode
@EqualsAndHashCode 어노테이션은 equals() 및 hashCode() 메서드를 자동으로 생성합니다. 객체의 내용을 기반으로 동등성 비교와 해시 코드 생성을 수행합니다.
예제:
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class Person {
private String name;
private int age;
}
4. @ToString
@ToString 어노테이션은 toString() 메서드를 자동으로 생성합니다. 객체의 문자열 표현을 반환합니다.
예제:
import lombok.ToString;
@ToString
public class Person {
private String name;
private int age;
}
5. @NoArgsConstructor와 @AllArgsConstructor
- @NoArgsConstructor 어노테이션은 매개변수가 없는 기본 생성자를 자동으로 생성합니다.
- @AllArgsConstructor 어노테이션은 모든 필드를 매개변수로 받는 생성자를 자동으로 생성합니다.
예제:
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
public class Person {
private String name;
private int age;
}