인텔리제이 롬복 설치방법
1. shift 두번 누르기 -> plugins -> lombok 검색
2. shift 두번 누르기 -> annotation processors 검색
annotation processor를 enable 하게 하는 이유는 IDE 내부 컴파일러가 어노테이션을 컴파일할 때 Lombok의 어노테이션을 인식하여 처리할 수 있도록 합니다.
@Getter/@Setter
롬복은 주로 어노테이션으로 동작하기 때문에 여러 어노테이션이 존재합니다. 가장 대표적으로 쓰는 어노테이션은 아무래도 @Getter/@Setter 일 것입니다.
말 그대로 VO 나 DTO 따위의 클래스의 Getter / Setter 메소드를 정의해주는 어노테이션입니다. 실제 이클립스/인텔리제이의 자동생성 기능이 있지만 굉장히 많은 변수를 가진 클래스라고 생각해보시면.. 이걸 쓰느냐 안쓰느냐는 스크롤의 고통을 벗어나느냐 아니냐로 바뀔 수 있습니다...!
생성자 어노테이션
- @NoArgsConstructor : 생성자의 인자가 없는 가장 기본 생성자입니다. 예컨데 JPA의 @Entity 클래스는 기본 생성자를 protected 처리하도록 권장받고 있는데! 이때는 @NoArgsConstructor(access = PROTECTED) 이런식으로도 사용할 수 있습니다.
- @AllArgsConstructor : 클래스의 생성자에 모든 멤버변수를 인자로 받아 생성하는 어노테이션입니다. 타당한 이유가 없다면 자주 쓰지는 않는것 같아요.
- @RequiredArgsConstructor : 클래스의 멤버변수 초기화에 필요한 값만 받는 어노테이션입니다. 예컨데 클래스의 String 멤버변수로 final 키워드가 선언되어있고, 일반 Integer @RequiredArgsConstructor 어노테이션이 선언되어 있다면 String 변수만 생성자의 인자로 선언해주고 초기화하는 코드를 생성합니다.
@Builder
객체를 초기화할 때 사용하는 어노테이션 패턴이다. 객체를 초기화할 때 좀더 선언적으로 사용할 수 있다.
코드를 보면 다음과 같이 처리할 수 있다.
AddUserParam param = AddUserParam.builder().nickname("닉네임").password("password").build();
변수 초기화가 상당히 직관적이고 명확하다. 개인적으로 잘 사용하는 어노테이션인데 이는 필수적으로 전체 멤버를 인자로 받는 생성자가 필요하다. 즉, @Builder와 @AllArgsConstructor는 단짝이라고 볼 수 있다. 실질적으로 Builder 패턴이 동작하는 방식이 All Args Constructor 기반이기 때문이다.
@EqualsAndHashCode
equals() 메소드와 hashcode() 메소드를 생성해주는 어노테이션이다. 많이 쓰지는 않지만 Entity의 경우 seq라는 컬럼(DB의 PK)을 객체의 키로 봤을 때, 인스턴스가 다른경우 equals가 false로 찍힐 수 있다. 이러한 경우 @EqualsAndHashCode(of = "seq") 로 한다면 seq 라는 이름을 가진 멤버변수를 equals의 키로 보고 비교한다. 주로 이러한 경우를 제외하면 많이 쓰지는 않았던것 같다.
@ToString
그나마 또 가장 많이 사용하는 어노테이션인데. 맞다. VO나 DTO 따위의 객체의 현재 값을 출력할때 toString() 메소드를 호출한다. 딱히 설명은 더 하지 않겠다.
@Data
@Data 어노테이션은 Getter/Setter/ToString/RequiredArgsConstructor 등의 여러 어노테이션을 합친 효과를 발휘하는 어노테이션이다. 따라서 프로젝트마다 단지 Getter/Setter/ToString 만 필요한 경우 @Data만 붙이면 바로 코드도 깔끔해지고 정갈해지니 많이들 쓸 것이다.
하지만 좀더 생성자를 활용하거나 빌더패턴을 활용하고 싶으면 결국 각각의 어노테이션을 활용해야하고 불필요한 기능이 추가되므로 필자는 각각 필요한 어노테이션들을 선언해서 처리하는 편이다.
'Study > Spring' 카테고리의 다른 글
[Spring Security] 세션 정책 (0) | 2022.06.23 |
---|---|
Spring security - csrf란? (0) | 2022.06.23 |
@Retention 어노테이션 정리(RetentionPolicy SOURCE vs CLASS vs RUNTIME) (0) | 2022.05.12 |
Spring JPA ) No property desc/asc found for type Error (0) | 2022.05.09 |
[Spring] @Valid와 @Validated를 이용한 유효성 검증의 동작 원리 및 사용법 예시 (0) | 2022.05.09 |
댓글