'청전지향'님 웹서버 구축하기를 따라하다가 Lombok을 처음 접하게 되었다. 처음이라 기본개념이 부족한 거 같아서,
좀더 자세하게 'Lombok'을 배워보려 한다.
접근자/설정자 자동 생성
제일 먼저 살펴볼 어노테이션은 @Getter
와 @Setter
입니다.
아마 Lombok에서 가장 많이 사용되는 어노테이션일 텐데요.
예를 들어, xxx
라는 필드에 선언하면 자동으로 getXxx()
(boolean 타입인 경우, isXxx()
)와 setXxx()
메소드를 생성해줍니다.
위와 같이 특정 필드에 어노테이션을 붙여주면, 다음과 같이 자동으로 생성된 접근자와 설정자 메소드를 사용할 수 있어서 매우 편리합니다.
또한, 필드 레벨이 아닌 클래스 레벨에 @Getter
또는 @Setter
를 선언해줄 경우, 모든 필드에 접근자와 설정자가 자동으로 생성됩니다.
VO 클래스를 작성할 때 마다, 접근자와 설정자 메소드를 작성해주는게 참 번거로운 일이었는데, (특히, 수정할 때는 더욱이) Lombok을 쓰게되면 이런 노가다성 코딩에서 해방될 수 있습니다. :)
생성자 자동 생성
Lombok을 사용하면 생성자도 자동으로 생성할 수 있습니다. @NoArgsConstructor
어노테이션은 파라미터가 없는 기본 생성자를 생성해주고, @AllArgsConstructor
어노테이션은 모든 필드 값을 파라미터로 받는 생성자를 만들어줍니다. 마지막으로 @RequiredArgsConstructor
어노테이션은 final
이나 @NonNull
인 필드 값만 파라미터로 받는 생성자를 만들어줍니다.
ToString 메소드 자동 생성
toString()
메소드를 작성하는 것도 여간 귀찮은 일이 아닙니다.
하지만 Lombok을 사용하면 @ToString
어노테이션만 클래스에 붙여주면 자동으로 생성해줍니다.
예제와 같이 exclude
속성을 사용하면, 특정 필드를 toString()
결과에서 제외시킬 수도 있습니다.
위와 같이 클래스에 @ToString
어노테이션을 붙이고, 아래와 같이 필드를 세팅 후 출력을 하면,
다음과 같이, 클래스명(필드1명=필드1값,필드2명=필드2값,...)
식으로 출력됩니다.
equals, hashCode 자동 생성
자바 빈을 만들 때 equals
와 hashCode
메소드를 자주 오버라이딩 하는데요. @EqualsAndHashCode
어노테이션을 사용하면 자동으로 이 메소드를 생성할 수 있습니다.
callSuper
속성을 통해 equals
와 hashCode
메소드 자동 생성 시 부모 클래스의 필드까지 감안할지 안 할지에 대해서 설정할 수 있습니다.
즉, callSuper = true
로 설정하면 부모 클래스 필드 값들도 동일한지 체크하며, callSuper = false
로 설정(기본값)하면 자신 클래스의 필드 값들만 고려합니다.
끝판왕! @Data
@Data
는 위에서 설명드린 @Getter
, @Setter
, @RequiredArgsConstructor
, @ToString
, @EqualsAndHashCode
을 한꺼번에 설정해주는 매우 유용한 어노테이션입니다.
사용 방법은 다른 어노테이션들과 대동소이합니다. 클래스 레벨에서 @Data
어노테이션을 붙여주면, 모든 필드를 대상으로 접근자와 설정자가 자동으로 생성되고, final
또는 @NonNull
필드 값을 파라미터로 받는 생성자가 만들어지며, toStirng
, equals
, hashCode
메소드가 자동으로 만들어집니다.
이상으로 자주 사용되는 Lombok 어노테이션에 대해서 살펴보았습니다.
출처 : https://projectlombok.org/features/GetterSetter
===========================================================================================
Lombok 사용 시 주의사항이 있다고 한다. 편하지만 잘 알고 사용
'JAVA' 카테고리의 다른 글
[JAVA8] Optional을 이용하여 NullPointException 처리 및 Stram의 사용 (0) | 2018.06.26 |
---|---|
[JAVA] 올바른 Equals & HashCode 만들기 (0) | 2018.06.22 |
[JAVA]생성자의 매개변수가 많을 때 - 빌더(builder) + 텔리스코핑 생성자 & 자바빈즈(JavaBeans) 패턴 구분 (0) | 2018.06.20 |
[Java] Collections의 차이(List, Set, Map) (0) | 2018.06.15 |
HTML 특수문자 변환 (0) | 2018.02.02 |