일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- GC
- java
- spring boot
- gdg
- 클린코드
- Producer
- OAuth
- g1
- 스프링부트
- 시큐리티
- 스프링
- assertj
- jvm
- load balancing
- 비동기
- RabbitMQ
- JPA
- Refactoring
- 권한
- 스프링 부트
- oauth2
- apache
- Spring
- JWT
- 페이징
- clean code
- Security
- 리팩토링
- tomcat
- 페이스북
Archives
- Today
- Total
허원철의 개발 블로그
Lombok - 간략 정리 본문
이번 글은 lombok에 대한 간단한 예제 글입니다.
lombok이 뭔가요..? 왜 쓰나요..?
- 흔히 Java에서 VO, DTO, Domain, Persistence, ... 같은 객체를 만들다 보면 getter/setter, toString, hashCode, equals, constructor, ... 등등 이 늘어나게 되고 비즈니스 로직이 아님에도 불구하고 코드가 길어지는 현상이 발생합니다. 이 때 "이 코드를 어떻게 줄이지?" 라는 고민을 하게 되는데, lombok을 이용하여 쉽고 빠르게 해결할 수 있습니다.
어떤 것들이 있나요??
- lombok은 어노테이션기반으로 되어 있으며, class나 field에 추가해줄 수 있습니다.
1) @Getter/@Setter
- getter/setter를 만들어 줍니다.
2) @ToString
- {className}(field1=value, field2=value, ... ) 형태의 toString()을 만들어 줍니다.
3) @EqualsAndHashCode
- equals(동등성)과 hashCode(동일성)을 만들어 줍니다.
4) @NoArgsConstructor
- 매개변수가 없는 기본생성자를 만들어 줍니다.
5) @AllArgsConstructor
- 해당 클래스에 모든 필드가 매개변수에 들어간 생성자를 만들어 줍니다.
6) @Data
- @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode, @lombok.Value를 만들어 줍니다.
※ 간단하게 쓴다면 @Data만 쓰는 것 만으로도 충분합니다.
7) @Builder
- 해당 클래스를 빌더 패턴으로 만들 수 있게 해줍니다.
8) @Slf4j
- 로그 변수를 만들어 줍니다.
...
어떻게 사용할 수 있나요..?
- IDE마다 초기 셋팅방법이 다릅니다.
1) Eclipse (STS)
① http://projectlombok.org/download.html
② [Window OS] 경우, cmd 접속하여 다운받은 lombok.jar를 실행
1 | java -jar {설치 경로}/lombok.jar | cs |
③ Specify location... 버튼 클릭 후, 사용하는 eclipse 선택
2) Intellij
① File -> Setting
② Plugins -> Browse repositories 버튼 클릭
③ lombok 검색 후, 설치
④ restart
어떻게 활용 할 수 있을까?
- Person 클래스를 만들어 예시를 들어보도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Person { private String firstName; private String lastName; private String address; private String city; private LocalDate dateOfBirth; } | cs |
1) @Getter/@Setter
- class에 어노테이션을 써주면 private로 선언한 모든 field에 getter/setter가 만들어집니다.
- 불필요한 getter/setter가 있는 경우, 해당 필드에 getter/setter를 다시 써주고 AccessLevel 옵션을 변경 해줍니다.
1 2 3 4 5 6 7 8 9 | @Getter @Setter public class Person { @Getter(AccessLevel.PRIVATE) private String firstName; // ... } | cs |
2) @EqualsAndHashCode
- Set으로 중복제거할 때, 유용하게 사용할 수 있습니다.
- of는 해당 field들 중 식별의 대상이 될 필드명을 나열해줍니다.
- exclude는 of와 반대로 식별의 대상에서 제외될 필드명을 나열해줍니다.
1 2 3 4 5 | @EqualsAndHashCode(of = {"firstName", "lastName", "dateOfBirth"}) //@EqualsAndHashCode(exclude = {"address", "city"}) public class Person { // ... } | cs |
- 테스트를 위해 임의의 데이터를 넣어둔 Person 객체를 준비합니다.
1 2 3 4 5 6 7 8 9 | public static Person getDefaultPerson() { Person person = new Person(); person.setFirstName("won chul"); person.setLastName("heo"); person.setAddress("South Korea"); person.setCity("Seoul"); person.setDateOfBirth(LocalDate.of(1992, 7, 8)); return person; } | cs |
① 테스트 1
- 단순히 객체가 동등하고 동일한 객체인지 판별해봅니다.
1 2 3 4 5 6 7 8 9 | @Test public void test_equalAndHashCode() throws Exception { Person person = new Person(); person.setFirstName("won chul"); person.setLastName("heo"); person.setDateOfBirth(LocalDate.of(1992, 7, 8)); Assert.assertEquals(person, Person.getDefaultPerson()); } | cs |
② 테스트 2
- 같은 객체를 Set에 넣으면 중복제거가 되어 size가 1이 되는지 확인해봅니다.
1 2 3 4 5 6 7 8 9 10 | @Test public void test_hashSet() throws Exception { Set<Person> personSet = new HashSet<>(); personSet.add(Person.getDefaultPerson()); personSet.add(Person.getDefaultPerson()); personSet.add(Person.getDefaultPerson()); personSet.add(Person.getDefaultPerson()); Assert.assertEquals(personSet.size(), 1); } | cs |
3) @NoArgsConstructor
4) @AllArgsConstructor
- @NoArgsContructor는 이미 위 테스트과정에서 사용을 하였습니다. 기본 생성자는 위에서 어디에도 만들지 않았고, @NoArgsContrucrtor를 이용하여 만들어냈습니다.
1 2 3 4 5 6 | @NoArgsConstructor @AllArgsConstructor public class Person { // ... } | cs |
5) @Builder
- XXXXBuilder가 class에 만들어 지면서 XXXX.builder()로 손쉽게 빌더패턴을 구현할 수 있습니다.
1 2 3 4 5 6 7 | public static Person of(String firstName, String lastName, LocalDate localDate) { return Person.builder() .firstName(firstName) .lastName(lastName) .dateOfBirth(localDate) .build(); } | cs |
6) @Slf4j
- 해당 클래스에 log라는 변수가 생깁니다.
- slf4j는 log인터페이스이기 때문에 slf4j와 log처리에 활용할 라이브러리를 추가해줘야 합니다.
1 2 3 4 5 6 7 | dependencies { compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25' compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' compile group: 'org.projectlombok', name: 'lombok', version: '1.16.16' testCompile group: 'junit', name: 'junit', version: '4.12' } | cs |
참고
- Lombok
'java' 카테고리의 다른 글
Google - Guava (423) | 2017.04.06 |
---|---|
Thread Pool 이해하기 (401) | 2017.04.01 |
Java - Garbage First(G1) Garbage Collection (417) | 2017.03.12 |
Java - JVM Architecture (429) | 2017.03.08 |
Java - Compare GC (406) | 2017.03.07 |
Comments