엔티티를 작성하며 Getter,Setter를 사용할까 하다 이전에 사용했던 lombok이 생각났다.
lombok을 이 프로젝트에 적용하는게 좋을까 고민이 돼 lombok에 대해 정리해보았다.
설치법은 생략.
Lombok은 Java 프로젝트에서 상용구 코드를 줄이는 데 도움이 되는 Java 라이브러리입니다. 코드에 적용하면 컴파일 중에 공통 상용구 코드를 자동으로 생성하는 주석을 제공합니다. Lombok의 주요 목표는 코드 가독성과 유지 관리성을 향상시키고 개발자가 작성해야 하는 반복적인 코드의 양을 줄이는 것입니다.
사용 예제
기존의 자바코드
package com.example.studentproject.model;
public class Student {
private int studentId;
private String name;
private int age;
public Student(int studentId, String name, int age) {
this.studentId = studentId;
this.name = name;
this.age = age;
}
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
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() {
return "Student{" +
"studentId=" + studentId +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
lombok 적용후
import lombok.*;
@ToString
@Getter
@Setter
@AllArgsConstructor
public class Student {
private int studentId;
private int age;
private String name;
}
lombok을 이용해 위 그림의 어노테이션들을 통해 간결한 코드를 작성하는 것이 가능하다.
그렇다면 각 어노테이션은 무슨의미일까?
어노테이션의 종류
- @Data
- @ToString, @EqualsAndHashCode, @Getter 및 @Setter를 결합합니다.
- toString, equals, hashCode, getter 및 setter를 자동으로 생성합니다.
- 사용하지 않는 메서드를 포함해 더 큰 클래스 파일이 생성될 수 있어 주의.
- @Getter @Setter
- 주석이 달린 필드에 대한 getter 및 setter 메서드를 자동으로 생성합니다.
- @ToString
- 클래스에 대한 toString 메소드를 자동으로 생성하여 객체 상태의 문자열 표현을 제공합니다.
- includeFieldNames 매개변수가 true로 설정되면 생성된 문자열에 필드 이름이 포함됩니다.
- @NoArgsConstructor
- 매개변수가 없는 기본 생성자를 제공하여 인수가 없는 생성자를 생성합니다.
- @AllArgsConstructor
- 모든 필드를 포함하는 생성자를 생성합니다.
- @RequiredArgsConstructor
- null이 아닌(@NonNull) 또는 final을 적용한 최종 필드에 대한 매개변수를 사용하여 생성자를 생성합니다.
- @EqualsAndHashCode
- equals 및 hashCode 메소드를 생성합니다.
- of 속성은 생성된 equals 및 hashCode에 id 필드만 포함하는 데 사용됩니다.
- @NonNull:
- 생성자 매개변수 및 설정자에 대한 null 검사를 생성합니다.
- 필드가 null일 수 없음을 나타냅니다.
- @Builder
- 빌더 패턴을 구현하여 연결된 메소드 호출을 통해 더 읽기 쉬운 객체 생성을 허용합니다.
- 사용자 정의 구성을 위해 정적 빌더 메소드(createUser)도 정의됩니다.
사용 예제 전/후
@Getter @Setter
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
import lombok.Getter;
import lombok.Setter;
@Getter @Setter
public class Student {
private int id;
private String name;
}
@ToString
public class Student {
private int id;
private String name;
@Override
public String toString() {
return "Student(id=" + this.id + ", name=" + this.name + ")";
}
}
import lombok.ToString;
@ToString
public class Student {
private int id;
private String name;
}
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
public class Student {
private int id;
private String name;
public Student() {}
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public Student(String name) {
this.name = name;
}
}
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class Student {
private int id;
private String name;
}
단점
- 지원 IDE가 정해져있다. 인텔리제이, 이클립스 등
- Lombok은 컴파일 타임 코드 생성에 의존하므로 특정 IDE 또는 빌드 도구와 호환성 문제가 있을 수 있음.
- 코드를 처음 접하는 개발자의 경우 자동으로 생성된 메서드의 동작을 이해하는 것이 어려울 수 있음.
결론
사용자의 환경에 따라 결정하면 된다. lombok은 단순성과 가독성에 있어 큰 이점이 있으므로 좋은 생산성을 가진 도구다. 수동적인 제어 코드가 감소하지만, 빠른 개발이 트렌드라면 lombok을 사용하는것도 좋아보인다. 또한 팀프로젝트의 경우 사용하지 않는 사람이 있을 수 있어 사용 전 토의가 필요해보인다.
참고
What is Project Lombok and how to use it with Spring Boot?
Hello everyone. In this article, we are going to see in-depth about Project Lombok and see how to use it with Spring Boot. Most of you must…
medium.com