Lombok이란??
반복되는 메서드를 Annotation을 사용하여 자동으로 작성해주는 라이브러리입니다
일반적으로 DTO, VO, Model, Entity 등의 데이터 클래스에서 많이 사용됩니다.
대표적으로 많이 사용되는 Annotation
- @Getter
- @Setter
- @NoArgConstructor
- @AllArgConstructor
- @Data
- @ToString
- @Builder
Lombok의 사용이유
- Annotation 기반의 코드 자동생성으로 인한 생산성이 증가합니다.
- 반복코드를 줄일 수 있어 유지보수와 가독성을 향상시킬 수 있습니다.
- Getter / Setter 외 Builder 패턴이나 Log 생성 등의 다양한 방면으로 활용이 가능합니다.
Lombok의 단점
- Lombok을 지원하는 IDE는 IntelliJ와 Eclipse 2개입니다.
- 자바의 컴파일러에 강하게 결합되어 있는 한계가 있습니다. 컴파일어의 수정은 공개 API를 많이 사용하는데 컴파일러를 업그레이드 하게 되면 깨질 수도 있습니다.
- Lombok 사용시, 모든 계층이 Lombok에 의존하게 됩니다.
- 모든 사람이 Lombok plugin이 필요합니다.
Lombok 사용법
pom.xml에 의존성 주입해줍니다
<dependencies> 태그 안에 <dependency>를 넣어주면 됩니다
<dependencies>
...
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
...
</dependencies>
@Getter / @Setter
해당 클래스에 선언되어 있는 필드를 기반으로 ‘getField’ , ‘setField’ 와 같은 식으로 자동으로 메소드 생성
xxx라는 필드에 선언하면 자동으로 getXxx()으로 만들어주고 만약(boolean 타입인 경우 isXxx()와 setXxx() 메소드를 생성해줍니다.
@NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor
@NoArgsConstructor : 파라미터가 없는 생성자를 생성
@AllArgsConstructor : 모든 필드값을 파라미터로 갖는 생성자를 생성
@RequiredArgsConstructor : 필드값 중 final이나 @NotNull인 값을 갖는 생성자를 생성
@ToString
toString 메소드를 작성해주는 Annotation
@ToString 어노테이션에 exclude 속성을 사용하여 특정 필드를 toString에서 제외시킬 수 있습니다.
@EqualsAndHashCode
자바 빈을 만들 때 equals와 hashCode 메소드를 자주 오버라이딩 하는데요.
@EqualsAndHashCode 어노테이션을 사용하면 자동으로 이 메소드를 생성할 수 있습니다.
callSuper 속성을 통해 equals와 hashCode 메소드 자동 생성 시
부모 클래스의 필드까지 감안할지 안 할지에 대해서 설정할 수 있습니다.
equals : 두 객체의 내용이 같은지 동등성(equality)를 비교하는 연산자
hashCode : 두 객체가 같은 객체인지 동일성(identity)를 비교하는 연산자
즉, callSuper = true로 설정하면 부모 클래스 필드 값들도 동일한지 체크하며,
callSuper = false로 설정(기본값)하면 자신 클래스의 필드 값들만 고려합니다.
@Data
@Data는 위에서 설명한 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode를 한꺼번에 설정해주는 매우 유용한 어노테이션입니다
@Builder
@Builder를 사용하면 객체 생성이 명확해집니다. 가급적 클래스 보다는 직접 만든 생성자 혹은 static 객체 생성 메소드에 붙이는 것을 권장합니다. @Builder를 붙이면 파라미터 순서가 아닌 이름으로 값을 설정하기 때문에 리팩토링에 유연하게 대응할 수 있고, 필드 순서를 변경해도 문제가 없습니다.
여기까지가 자주 쓰이는 Lombok Annotation 입니다
아래 Annotation도 있으니 참고 부탁드립니다
@NonNull
자동으로 null 체크를 진행하여 null 인 경우 NullPointerException 을 발생 시킵니다
@Cleanup
자동으로 자원을 관리합니다. close() 메소드를 호출하여 자원을 종료시킵니다
@Value
불변 클래스를 쉽게 생성해 줍니다
@SneakyThrows
Exception 발생시 체크된 Throable로 감싸서 전달해줍니다
@Synchronized
메소드에서 동기화 Lock을 설정을 해줍니다
@Log
종류별 로그를 사용할 수 있도록 해줍니다. (@Log, @Slf4j, @CommonLog 등)등등.
@Accessors
기본 생성된 setter 들은 return type 이 void 이므로 method chaining 을 사용할 수 없습니다
**@Accessors에 chain=true 파라미터를 사용하면 생성되는 setter 의 리턴 타입이 this 로 변경됩니다
'Programming > Java, Spring' 카테고리의 다른 글
[Spring] AOP란?? / AOP를 사용하는 이유 (0) | 2022.10.13 |
---|---|
[Spring boot] 스프링 부트란??? (0) | 2022.10.12 |
[Spring] DI / IOC란? / 의존성을 주입하는 방법 (0) | 2022.10.11 |
[Spring] POJO란? / POJO vs Java Beans (0) | 2022.10.10 |
[JAVA]람다식이란? / 람다식의 특징 / Lambda Expression (0) | 2022.09.25 |