- @Getter
@Getter 메서드는 우리에게 참 편리한 기능을 많이 제공해준다.
만약에 @Getter 메서드를 사용하지 않는다면 아래 java코드를 보자!
private Long id;
private String username;
public Long getId() {
return id;
}
public String getUsername() {
return username;
}
이렇게 각 객체마다 메서드를 선언해줘야 한다. 하지만 @Getter 메서드를 선언해주면
@Getter
public class PracLombok {
private Long id;
private String username;
}
로 선언해주면 Lombok이 알아서 getter 메서드를 선언해주기 때문에 우리가 직접 만들 필요가 없어지게 된다.
- @Setter
@Setter도 위에서 설명했던 @Getter와 비슷하다.
private Long id;
private String username;
public void setId(Long id) {
this.id = id;
}
public void setUsername(String username) {
this.username = username;
}
직접 메서드를 선언하였을 경우
@Setter
public class PracLombok {
private Long id;
private String username;
}
Setter를 선언해주기 때문에 힘들게 하나하나 메서드를 선언해 줄 필요가 없게 되었다.
- @Data
@Getter / @Setter / @RequiredArgsConstructor / @ToString / @EqualsAndHashCode / @Value 가 포함되어 있는 어노테이션이다. 하지만 @Data에는 단점이 존재하는데 @Setter 어노테이션이 포함되어 있다는 것이다. Setter의 단점을 보기 위해서는 위에 있는 @Setter를 확인해보자.
- @RequiredArgsConstructor
클래스에서 final로 선언된 필드에 대한 생성자를 자동으로 생성해주는 어노테이션이다.
@RequiredArgsConstructor 어노테이션을 사용하기 위해서는 해당 클래스에서 final로 선언된 필드가 존재해야 합니다.
선언 하였을 경우
@RequiredArgsConstructor
public class MyClass {
private final String name;
private final int age;
private String address; // 생성자가 만들어지지 않음
}
선언하지 않았을 경우
public class MyClass {
private final String name;
private final int age;
private String address;
public MyClass(String name, int age) {
this.name = name;
this.age = age;
}
}
이렇게 final이 붙은 필드에 대해서 따로 생성자를 만들어주는 번거로움을 덜 수 있다.
- @NoArgsConstructor
매개변수가 없는 기본 생성자를 자동으로 생성해주는 어노테이션이다. 클래스 내부에 명시적으로 작성하지 않아도 기본 생성자를 사용할 수 있다. 자바에서는 클래스를 생성하면 자동으로 기본 생성자를 하나 만들어 주지만 생성자를 정의하면 컴파일러가 자동으로 기본 생성자를 생성해주지 않습니다.
선언했을 경우
@NoArgsConstructor
public class MyClass {
private String name;
private int age;
}
선언하지 않았을 경우
public class MyClass {
private String name;
private int age;
// 기본 생성자
public MyClass() {
}
}
- @AllArgsConstructor
모든 필드를 매개변수로 받는 생성자를 자동으로 생성해주는 어노테이션이다. 클래스 내부에 명시적으로 생성자를 작성하지 않아도 된다.
선언했을 경우
@AllArgsConstructor
public class MyClass {
private String name;
private int age;
}
선언하지 않았을 경우
public class MyClass {
private String name;
private int age;
public MyClass(String name, int age) {
this.name = name;
this.age = age;
}
}
- @Builder
빌더 패턴을 자동으로 생성해주는 어노테이션이다. 객체 생성자의 인자 개수가 많아지는 경우 코드를 작성하기 힘들어지는 문제를 해결하기 위해 사용되는 패턴 중 하나이다.
생성자 대신 빌더를 이용하여 객체를 생성할 수 있다.
선언하였을 경우
@Getter
@Builder
public class Person {
private String name;
private int age;
@Builder.Default // 빌더패턴을 사용할 경우 처음에 Seoul로 정의된다.
private String address = "Seoul";
@Builder.Default
private boolean isMarried = false;
}
// 빌더 패턴을 사용
Person person = Person.builder()
.name("John")
.age(30)
.isMarried(true) // false로 되있는 것을 true로 덮어씌운다.
.build();
빌더 패턴을 사용하지 않았을 경우
public class Person {
private String name;
private int age;
private String address;
private boolean isMarried;
public Person(String name, int age, String address, boolean isMarried) {
this.name = name;
this.age = age;
this.address = address;
this.isMarried = isMarried;
}
public Person(String name, int age, String address) {
this(name, age, address, false);
}
public Person(String name, int age) {
this(name, age, null);
}
}