'청전지향'님 웹서버 구축하기를 따라하다가 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 |