본문 바로가기
Study/Spring

Lombok 라이브러리 쉽게 쓰기!

by 오늘만 사는 여자 2022. 5. 13.
728x90
반응형

인텔리제이 롬복 설치방법

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만 붙이면 바로 코드도 깔끔해지고 정갈해지니 많이들 쓸 것이다.

하지만 좀더 생성자를 활용하거나 빌더패턴을 활용하고 싶으면 결국 각각의 어노테이션을 활용해야하고 불필요한 기능이 추가되므로 필자는 각각 필요한 어노테이션들을 선언해서 처리하는 편이다.

 

 

출처  : https://sas-study.tistory.com/378

728x90
반응형

댓글