먼저 이 글은 허니몬g(Honeymon)의 gitblog에서 그대로 옴겨왔습니다. 제가 작성한 글이 아니기 때문에 출처를 먼저 밝히며 문제가 있을 시 삭제하도록 하겠습니다.
Lombok을 사용해봅시다.
자바에서 DTO, VO, Domain Object 만들다보면, 멤버필드에 대한 Getter/Setter 메소드, Equals, hashCode, ToString과 멤버필드에 주입하는 생성자를 만드는 코드 등으로 불필요하게 코드가 길어지는 경우를 볼 수가 있다. 불필요하지만 생성해야 하는 코드들을 줄일 수 있는 방법이 있다면, 얼마나 좋을까?
Project Lombok 소개
- 사이트 : Project lombok
- Lombok Feature : http://projectlombok.org/features/index.html
- Java Source를 컴파일할 때, Lombok의 Annotation을 확인해서 그에 적합한 메소들을 생성해주는 방식이라고 이해를 하면 되겠다.
적용사례
Lombok annotation을 적용하지 않은 현재 스터디에서 사용하는 User domain 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
|
- Lombok Annotation 적용코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
90라인이 넘는 코드를 30여줄로 1/3 줄일 수가 있다.
설치방법
- lombok.jar 다운로드
- lombok.jar 직접 다운로드
- pom.xml dependency 추가
1 2 3 4 5 6 7 8 9 10 11 |
|
- lombok.jar 설치하기
- lombok.jar 직접 다운로드의 경우 :
- 다운로드 위치 이동
- java -jar lombok.jar
- Maven pom.xml 에 추가한 경우 :
- cd ~/.m2/repository/org/projectlombok/lombok/<version></version>
- java -jar lombok-<version>.jar</version>
- IDE 설치 위치[Specify locaion…]를 검색해서 경로에 추가한다.
- eclipse.ini or sts.ini 파일 변경되고 동일한 경로에 lombok.jar 추가됨
- 별도로 프로젝트 내에 라이브러리를 추가해서 사용할 수도 있겠다.
- lombok.jar 직접 다운로드의 경우 :
소스코드에서 Lombok Annotation을 추가해보자
- @Data
- @Getter/@Setter
- 접근제어 : AccessLevel[PUBLIC, PROTECTED, PACKAGE, PRIVATE]을 통해서 접근레벨을 제한할 수 있다.
- 예 : @Getter(AccessLevel.PACKAGE), @Setter(AccessLevel.PRIVATE)
- getter/setter 관례에 따라서 get필드명, set필드명 메소드가 생성됨
- Getter
- Setter
- 접근제어 : AccessLevel[PUBLIC, PROTECTED, PACKAGE, PRIVATE]을 통해서 접근레벨을 제한할 수 있다.
- @EqualsAndHashCode
- 코드에서 객체의 비교 등의 용도로 사용되는 equals(), hashCode() 메소드의 코드를 절감할 수가 있다.
- @EqualsAndHashCode(exclude={“field1”, “field2”}) 처럼 필요에 따라서 특정 필드를 제외할 수가 있다.
- @ToString
- 로그Log에서 객체의 내용을 확인하는 등의 용도로 쓰이는 toString() 메소드를 대신할 수 있다.
- @ToString(exclude=”field1”) 처럼 필요에 따라서 특정 필드를 제외할 수 있다.
- @Log
- 최근에 알게된 기선님의 글() 녀석인데, Logger와 관련된 코드들을 줄일 수 있다.
- 추가하면 자동으로 필드에 private static final Logger log 가 추가된다. 이후 로그를 찍으려는 곳에서는 log.error(), log.warn(), log.debug(), log.info() 형태로 사용하면 된다.
정리
이전에 있던 회사에의 프로젝트에 적용해서 사용했던 녀석인데, 자바 코드를 작성하다보면 어쩔 수 없이 작성해야하는 메소드들을 애노테이션으로 클래스에 정의를 하는 것만으로 대신할 수 있다는 것은 가독성과 생산성을 높일 수 있는 좋은 수단이 된다. 사실, 이 글은 한참 전에 작성(이걸 처음 사용해보기 시작했을 때)이 되었어야하는게 맞는데, 이제서야 작성한다. 이런이런.
'Java' 카테고리의 다른 글
[JSP] 커스텀 태그를 이용해 Java 메소드 이용하기 (0) | 2021.12.22 |
---|---|
[초기셋팅] STS 설치 및 기본 설정 (0) | 2021.12.21 |
JDK 1.7 이상에서 APNS 인증서 문제 (0) | 2017.07.05 |
소스를 입력받아 동적으로 Logic을 실행해 보자! (0) | 2017.07.05 |