롬복은 어노테이션 프로세서(annotation processor)로, 컴파일 시점에 어노테이션으로 코드를 추가할 수 있다.
@Getter, @Setter어노테이션을 추가했다면, 컴파일되는 시점에 실제로는 getter() setter()메서드가 실제 코드로 추가된다는 것.
@Getter / @Setter
getter나 setter 혹은 둘 다 필요한 변수에 어노테이션을 사용하여 바로 getter, setter를 생성할 수 있다.
필요하면 클래스에 어노테이션을 사용할 수도 있는데, static이 아닌 모든 멤버변수에 getter, setter메서드가 생성된다.
@Getter
@Setter
public class Perscon {
private String name;
private int age;
}
@Setter는 웬만하면 클래스레벨에서 사용하지 않는 편이 좋다고 한다.
무분별하게 Setter를 남발하는 것은 좋지 않다고 함.. 왜인지는 아직 내가 이해하기 어렵다...^-T... 아 그리고 Post Method로 받을 때 setter가 없어도 값이 전달된다는 것을 아시는지... 그것을 안 이후로는 웬만해서(특히 클래스에 바로) @Setter를 사용하지 않고 있다.
@ToString
클래스에 @ToString어노테이션을 사용하면 자동으로 모든 멤버변수들이 포함된 toString()메서드를 선언한 효과를 볼 수 있음.
@ToString.Exclude를 이용하면 toString에서 해당 변수를 제외할 수 있다.
@ToString
public class User {
private int id;
@ToString.Exclude private String password;
private String username;
}
// 위와 동일
@ToString(exclude = "password")
public class User {
private int id;
private String password;
private String username;
}
Constructor
- @AllArgsConstructor - 모든 멤버변수를 매개변수로 사용하는 생성자를 자동으로 생성
- @RequiredArgsConsructor - 초기화 되지 않은 final 변수나 @NonNull이 붙은 멤버변수에 대해 생성자를 생성 (주로 의존성 주입 시 많이 사용됨)
- @NoArgsConstructor - 매개변수가 없는 빈 생성자를 생성
+) @RequiredArgsConstructor를 이용해 의존성 주입(Dependency Injection)하기
final이 붙었기 때문에 RequiredArgsConstructor에서 인식해 자동으로 생성자를 통한 의존성 주입이 가능해진다.
스프링에서도 @Autowired보다 생성자를 통한 의존성 주입을 더 추천하고 있기 때문에 많이 쓰일 듯 하다.
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
}
@Data
@ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor를 모두 포함한 어노테이션이다.
매우 편리한 어노테이션이지만, 남발하는 것은 좋지 않다.
@Builder
@Builder는 클래스, 생성자 또는 메서드에서 사용할 수 있다. (클래스와 생성자에서 사용하는 것이 일반적)
클래스에 @Builder를 사용하면 @AllArgsConstructor와 같은 효과를 발생시킨다. (모든 멤버 변수를 매개변수로 받는 생성자를 만들게 됨)
@Builder를 사용할 때는 아래처럼 구체적인 생성자들을 지정하고, 그 위에 @Builder를 붙어야 한다.
// @Builder 이렇게 사용하지 말기!
public class User {
private int id;
private String name;
private String email;
private int age;
@Builder
public User(String name, String email) {
this.name = name;
this.email = email;
}
}
그리고 아래와 같은 코드로 인스턴스화 할 수 있다.
User.builder().name("Oladipo").email("vo4@miami.heat").build();
+) 참고 (읽어보면 좋다!)
'STUDY > TIL' 카테고리의 다른 글
URI와 URL (0) | 2021.04.28 |
---|---|
JPA (0) | 2021.04.06 |
Svelte | Svelte 프로젝트 github pages로 배포하기 (0) | 2021.02.03 |
Svelte | 스벨트(Svelte)로 TODO LIST 만들기 (2) (0) | 2021.02.03 |
Svelte | 스벨트(Svelte)로 TODO LIST 만들기 (1) (0) | 2021.02.03 |