Java 라이브러리 Lombok이란? + 자주 사용 어노테이션 정리!
○ LomBok 이란?
LomBok이란 어노테이션 기반으로 코드 자동완성 기능을 제공하는 라이브러리이다.
Spring, Spring Boot 로 Web 개발을 하다보면 반복되는 코드가 자주 등장하며 가독성을 떨어트린다.
예를 들어보면 Getter, Setter, ToString, Constructor(생성자)가 대표적인 예제일 것이다.
- 간단 예시
예시를 간단히 설명해 보자면, 필자의 경우 Legacy 시스템(AS-IS)을 TO-BE로 개선하는 작업을 진행했었다.
Legacy 코드를 처음보고 적잖이 당황했었다. 왜냐하면
DTO혹은 VO Class 의 경우 필드의 갯수가 많게는 30-50개 정도 (혹은 그이상)이었기 때문이다.
만약 이 30-50개의 필드들을 하나하나 Getter, Setter, ToString 코드를 만들게 된다면,,?
Class 코드 길이가 2배이상으로 불필요하게 길어지게 되는것이다...
이 길고 긴 코드들을 어노테이션(Annotation)하나로 해결 할 수 있다면?
생산성이 높아짐과 더불어 개발자의 개발 편의성이 크게 증가한다.
◎ Lombok 장점
- 어노테이션을 통한 코드 자동 생성을 통한 생산성, 편의성 증가
- Code의 길이가 줄어듬으로 가독성, 유지보수성 향상
- Builder 패턴의 적용, Log 생성 등등 편의성
○ Annotaion(어노테이션) 정리
- lombok 어노테이션의 종류는 생각보다 많다.
- 여기선 자주 사용하는, 중요한 어노테이션 순서대로 기술 하도록 하겠다.
@Getter | code가 컴파일 될 때 getter 메서드들을 생성한다. - 속성 @Getter(lazy = true) 사용시 최초 한번만 Getter 호출. 이후 캐시된 값을 사용 |
@Setter | code가 컴파일 될 때 setter 메서드들을 생성한다. |
@ToString | toString() 메서드를 생성한다. |
@EqualsAndHashCode | 사용 객체에 대해서 equals(), hashCode() 메서드를 생성한다. |
@Data | @Getter(모든속성), @Setter(final이 붙지 않은), @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 위의 어노테이션들을 합쳐둔 어노테이션이다. |
@NoArgsConstructor | 파라미터(매개변수)가 없는 생성자를 생성한다. |
@RequiredArgsConstructor | final, @NonNull이 있는 필드를 포함하여 생성자를 생성한다. |
@AllArgsConstructor | 모든 필드를 파라미터(매개변수)로 갖는 생성자를 생성한다. |
@Builder | 해당 클래스에 빌더 패턴을 사용할 수 있도록 해준다. |
@Log | log라는 변수를 이용하여 로그 기능을 사용할 수 있다. 컴파일시 : private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(this.class.getName()); -> 해당 코드가 생성되는것이다. |
@Log4j, @Slf4J | Log4J(Slf4J) 설정을 이용하여 로그 기능 사용할 수있다. 마찬가지로 log 변수를 통해 사용 한다. |
@SneakyThrows | 예외 발생시 Throwable 타입으로 반환해준다. JVM(.class) 에서 검사 여부 관계없이 모든 예외에 대해 throw동작. - 논란의 여지가 있는 어노테이션!! - 사용시 주의! - 롬복 공식 홈페이지에서는 신중하게 사용하라는 권고 있음. |
@Synchronized | Method 에서 동기화 설정. - 동기화 관련 문제 발생을 해당 어노테이션을 통해 가상의 필드 레벨에서 조금이나마 안전하게 락을 걸어준다. |
@NonNull | 필드의 값이 null이 될 수 없음을 명시해준다. |
@Value | 불변 클래스를(Immutable Class) 생성해준다. - 모든 필드를 Private, Final 로 설정하고, Setter를 생성하지 않는다.(상수로 만들어준다.) - FInal 이 붙기 때문에 Setter는 존재할 수가 없는것이다. |
○ 개인적 생각 및 정리
Lombok 라이브러리가 무엇인지, 주로 사용되는 어노테이션은 어떤것인지 정리해 보았다.
필자 또한 롬복이 무엇인지 어노테이션은 정확히 어떤 기능을 하는지 모르고 사용을 했던 감이 있다.
하지만 전부는 아니더라도 자주 사용하는 Annotation 들은 알고 사용 할 수록 Code에 대한 이해도가 높아질 것이며,
더 좋은 Code Quailty 를 낼 수 있을 것이다.
다음 포스팅 에서는 중요 어노테이션들을 실제 사용, 적용 하는 방법들을 소개해 보겠다.
머리로 아는것 보다 한번의 코드 작성이 더 좋을 것이다! 시간을 내서라도 따라해보면 좋을것 같다.
실제 사용방법이나 예제는 아래의 링크에서 확인해보세요!
https://lucas-owner.tistory.com/27
'Language > Java' 카테고리의 다른 글
[Java] Multi Thread를 이용한 간단 게임 구현(구구단) (0) | 2023.01.26 |
---|---|
[Java] Lombok 실제 사용법(2) (0) | 2023.01.17 |
[Java] Stack 2개로 Queue 처럼 사용하기 (0) | 2023.01.13 |
[Java] DTO <-> Entity 변환(ModelMapper & method & ModelMapper List 바인딩) (0) | 2022.12.22 |
[Java] DAO, DTO, VO, Entity 란? (2) | 2022.12.22 |
댓글