Lombok
Lombok이란 애노테이션 기반으로 코드를 자동완성 해주는 라이브러리이다. Lombok을 사용하면 Getter, Setter, 생성자 등 다양한 코드를 자동완성 할 수 있다.
Lombok 기능
@Getter, @Setter
Getter와 Setter 메서드를 자동완성한다. @Getter와 @Setter를 클래스 이름 위에 적용하면 모든 필드에 적용되며 필드 위에 적용하면 해당 필드에만 적용된다.
@Getter
@Setter
public class User {
private String email;
private String name;
/*자동 생성 코드
String getEmail() {
return email;
}
void setEmail(String email) {
this.email = email;
}
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
*/
}
@AllArgsConstructor
모든 필드를 인자로 갖는 생성자를 자동완성한다.
@AllArgsConstructor
public class User {
private String email;
private String name;
/*자동 생성 코드
public User(String email, String name) {
this.email = email;
this.name = name;
}
*/
}
@NoArgsConstructor
인자를 갖지 않는 기본 생성자를 자동완성한다.
@NoArgsConstructor
public class User {
private String email;
private String name;
/*자동 생성 코드
public User() {
}
*/
}
@RequiredArgsConstructor
특정 필드를 인자로 갖는 생성자를 자동완성한다. 생성자의 인자로 추가할 필드에 @NonNull 또는 final을 붙이면 된다.
@RequiredArgsConstructor
public class User {
@NonNull
private String email;
final private String name;
/*자동 생성 코드
public User(String email, String name) {
this.email = email;
this.name = name;
}
*/
}
@EqualsAndHashCode
Object 클래스의 equals 메서드와 hashCode 메서드를 자동완성한다.
@ToString
Object 클래스의 toString 메서드를 자동완성한다.
@Data
@ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor를 자동완성 한다. 실무에서는 너무 무겁고 객체의 안정성을 위협하기에 사용을 지양한다.
그외에 여러 애노테이션이 있다.
자동 주입 코드 자동 완성, @RequiredArgsConstructor
스프링은 기본적으로 생성자를 통한 자동 주입을 권장한다.
@Service
public class UserService {
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
@Autowired
public UserService userService(UserRepository userRepository, PasswordEncoder passwordEncoder) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
}
}
하지만 주입 받을 빈의 개수가 많은 경우 생성자 자동 주입 코드를 작성하는 건 귀찮은 일이다. Spring 4.3부터 클래스의 생성자가 1개 뿐인 경우 자동으로 @Autowired로 인식하여 자동 주입을 진행하는데 이러한 Spring의 동작 방식과 Lombok의 @RequiredArgsConstructor 애노테이션을 이용하면 생성자 자동 주입 코드를 자동완성 할 수 있다.
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
/* 자동 생성 코드
UserService(UserRepository userRepository, PasswordEncoder passwordEncoder) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
*/
}
참고)
https://mangkyu.tistory.com/78
[Java] Lombok이란? 및 Lombok 활용법
Java 언어를 이용해 개발을 하다 보면 기계적으로 작성해야 하는 코드들이 상당히 많다. 이번에는 기계적인 코드 작성을 자동화하여 코드 다이어트를 해주는 Java 필수 라이브러리 Lombok에 대해 알
mangkyu.tistory.com