Java의 라이브러리로, 반복되는 메서드를 Annotation을 사용해 자동으로 작성해주는 편리한 라이브러리
Java에서는 객체의 프로퍼티에 대해서 Getter, Setter, 생성자 등을 매번 작성해 주어야 하지만
Lombok을 사용하면, 어노테이션을 이용하여 Getter, Setter, 생성자 등의 코드를 자동으로 작성할 수 있다
dependencies {
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}
build.gradle 수정 후에는 꼭 코끼리 버튼(새로고침 버튼)
눌러서 변경사항 적용 시켜주어야 함!
어노테이션 처리 활성화
체크
Lombok에서 가장 자주 활용되는 어노테이션이다.
@Getter
, @Setter
를 클래스에 적용시키면 모든 변수들에 적용할 수 있고, 변수 이름 위에만 적용시키면 해당 변수들만 적용 가능하다
@Getter
@Setter
public class User {
private Long id;
private String password;
private String name;
private int age;
}
해당 클래스에 있는 id, password, name, age 모두
getter와 setter가 적용된다
모든 변수를 사용하는 생성자
를 자동완성 시켜 주는 어노테이션이다
@AllargsConstructor
public class User {
private Long id;
private String password;
private String name;
private int age;
/* 아래와 같은 코드가 빌드시에 생성된다
public User(Long id, String password, String name, int age) {
this.id = id;
this.password = password;
this.name = name;
this.age = age
}
*/
}
아무런 변수도 사용하지 않는 기본 생성자
를 자동완성 시켜 주는 어노테이션이다
@NoargsConstructor
public class User {
private Long id;
private String password;
private String name;
private int age;
/* 아래와 같은 코드가 빌드시에 생성된다
public User() {}
*/
}
특정 변수만을 활용하는 생성자
를 자동완성 시켜 주는 어노테이션이다
@RequiredArgsConstructor
public class User {
private final Long id;
private String password;
@NonNull
private String name;
private int age;
/* 아래와 같은 코드가 빌드시에 생성된다
public User(Long id, String name) {
this.id = id;
this.name = name;
}
*/
}
클래스에 대한 equals 함수와 hashCode 함수
를 자동으로 생성해주는 어노테이션이다
서로 다른 두 객체에서 특정 변수의 이름이 똑같은 경우 같은 객체로 판단하고 싶다면 아래와 같이 해줄 수 있다.
@RequiredArgsConstructor
@EqualsAndHashCode(of = {"id", "name"})
public class User {
@NonNull
private Long id;
private String password;
@NonNull
private String name;
private int age;
/* 아래와 같은 코드가 빌드시에 생성된다
public User(Long id, String name) {
this.id = id;
this.name = name;
}
*/
}
@EqualsAndHashCode(of = {"id", "name"})로 설정하여 id와 name이 동일하다면 같은 객체로 인신하도록 해주고 있다.
클래스의 변수들을 기반으로 ToString 메소드
를 자동으로 완성시켜 준다
출력을 원하지 않는 변수가 있다면 변수 위에 @ToString.Exclude 어노테이션을 붙여 주면 된다
@ToString
public class User {
private Long id;
@ToString.exclude
private String password;
private String name;
private int age;
/* 아래와 같은 코드가 빌드시에 생성된다
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
*/
}
Data 어노테이션을 사용하면 @ToString
, @EqualsAndHashCode
, @Getter
, @Setter
, @RequiredArgsConstructor
를 자동으로 완성시켜준다
실무에서는 객체의 안정성을 위해 @Data의 사용을 지양한다
해당 클래스의 객체의 생성에 Builder 패턴을 적용시켜 준다
public class User {
private Long id;
private String password;
private String name;
private int age;
@Builder
public User(Long id, String password) {
this.id = id;
this.password = password;
}
}
Lombok이 많은 기능을 제공해주기 때문에, 개발자가 작성할 코드의 양은 줄어들지만! 개발자가 직접 코드를 작성하지 않기 때문에 의도하지 않은 동작들이 일어날 수 있다
@Data
남용 금지 : 너무 많은 기능을 제공@Setter
사용 자제 : 의도치 않은 값의 변화@ToString
무한루프 조심