본문 바로가기

STUDY/TIL

Lombok

롬복은 어노테이션 프로세서(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();

+) 참고 (읽어보면 좋다!)

 

실무에서 Lombok 사용법 - Yun Blog | 기술 블로그

실무에서 Lombok 사용법 - Yun Blog | 기술 블로그

cheese10yun.github.io

 

생성자 주입을 @Autowired를 사용하는 필드 주입보다 권장하는 하는 이유

@Autowired를 사용하는 의존성 주입보다 생성자 주입(Constructor Injection)을 더 권장하는 이유는 무엇일까?

madplay.github.io

'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