Lombok
은 기계적인 코드 작성을 자동화하여 개발을 단순화하고 코드 가독성을 향상시킨다. 이번 포스팅을 통해 Lombok
에서 많이 사용되는 Annotation
을 기록해두고자 한다.
Annotation | 기능 |
---|---|
@NoArgsConstructor | 파라미터가 없는 기본 생성자 자동 생성 |
@AllArgsConstructor | 모든 필드 값을 파라미터로 받는 생성자 자동 생성 |
@RequiredArgsConstructor | final, @NonNull인 필드 값만 파라미터로 받는 생성자 자동 생성 |
@Getter | Getter 생성 |
@Setter | Setter 생성 |
@ToString | 오버라이딩된 toString 생성 (클래스명 + 필드명) |
@EqualsAndHashCode | Equals와 HashCode 메서드 오버라이딩 |
@Data | @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode를 합친 Annotation |
@Slf4j | log.info("{}", arg1); 출력가능 |
@Builder | 빌더 패턴을 사용할 수 있도록 코드를 생성, 생성자와 비슷하나 builder의 형식으로 제공 |
public class Item {
private Integer id;
private String name;
public Item() {
}
}
@NoArgsConstructor
는 파라미터가 없는 기본 생성자 자동 생성한다.
@NoArgsConstructor
public class Item {
private Integer id;
private String name;
}
public class Item {
private Integer id;
private String name;
public Item(Integer id, String name) {
this.id = id;
this.name = name;
}
}
@NoArgsConstructor
는 모든 필드 값을 파라미터로 받는 생성자 자동 생성한다.
@AllArgsConstructor
public class Item {
private Integer id;
private String name;
}
public class Item {
private Integer id;
private final String name;
public Item(String name) {
this.name = name;
}
}
@RequiredArgsConstructor
는 final, @NonNull인 필드 값만 파라미터로 받는 생성자 자동 생성한다.
@RequiredArgsConstructor
public class Item {
private Integer id;
private String name;
}
public class Item {
private Integer id;
private String name;
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
}
@Getter
@Setter
어노테이션을 붙이면 해당 클래스 멤버 변수들의 getter, setter 메소드를 이용할 수 있다.
@Getter
@Setter
public class Item {
private Integer id;
private String name;
}
해당 클래스의 객체의 생성에 Builder
패턴을 적용시켜준다. 모든 변수들에 대해 적용하길 원하면 클래스 위에 @Builder
를 붙이면 되지만, 특정 변수에만 적용하길 원하면 생성자를 작성하고 그 위에 @Builder
어노테이션을 붙여주면 된다.
@Getter
@NoArgsConstructor
public class Item {
private Integer id;
private String name;
@Builder
public Item(String name){
this.name = name;
}
}
@Builder
를 실제 활용한다면 아래와 같이 사용할 수 있다.
Item item = Item.builder()
.name("연필");