[IntelliJ] IntelliJ 롬복 설치 및 설정
- -
[IntelliJ] IntelliJ Lombok 설치 및 설정
안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 인텔리제이 롬복 설정] 입니다. : )
0.롬복(Lombok)이란?
▶ 롬복(Lombok)
- 롬복(Lombok)은 Java Domain(Dto, Vo)에서 반복적으로 작성되는 getters/setters나 toString, 생성자 관련 코드 등의 소스들을 간결하게 만들어주는 라이브러리다.
- 롬복에 대한 설명은 다음 링크의 포스팅에서 설명 해 두었다. (https://goddaehee.tistory.com/95)
이번 포스팅 에서는 롬복을 인텔리 제이에 설치 & 적용 하는 방법을 간단히 설명하려 한다.
1.IntelliJ 롬복 Plugin 설치
▶ 인텔리 제이 - 롬복 플러그인 설치
- Setting > Plugins
- Marketplace 탭에서 Lombok을 검색하여 플러그인을 설치할 수 있다.
2. Dependency 설정
- 최신 버전의 롬복을 적용하려 한다.
https://mvnrepository.com/artifact/org.projectlombok/lombok
- 현재 기준의 최신 버전은 1.18.12 이다. (2020/02/18)
▶ 1. maven - pom.xml
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
▶ 2. gradle
// https://mvnrepository.com/artifact/org.projectlombok/lombok
provided group: 'org.projectlombok', name: 'lombok', version: '1.18.12'
3. Enable annotation 설정
- settings > Build, Execution, Deployment > Compiler > Annotation Processors
- Enable annotation processing 체크
4. 적용 예시
- 다음의 샘플 DTO 소스를 예로 들어 이제부터 롬복을 적용 해보자.
- ex) 샘플 DTO(vo, domain)
package com.god.bo.test.vo;
public class TestVo {
private String id;
private String name;
public TestVo() {
}
public TestVo(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TestVo testVo = (TestVo) o;
return Objects.equals(id, testVo.id) &&
Objects.equals(name, testVo.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
@Override
public String toString() {
return "TestVo{" + "id='" + id + '\'' + ", name='" + name + '\'' + '}';
}
}
▶ 4.1 @Getter @Setter
- @Getter와 @Setter 애노테이션을 클래스명 위에 명시하면, 필드값에 대한 getters/setters 메소드가 자동 생성된다.
- "AccessLevel"을 통해 접근 제한자 설정이 가능하다. (Default : Public)
ex) @Getter(access = AccessLevel.PROOTECTED)
- 클래스에 선언시 모든 필드에 대해 생성, 필드에 선언시 선언된 필드에 대해서만 getter, setter를 생성한다.
▶ 4.2 @NoArgsConstructor @AllArgsConstructor
- "AccessLevel"을 통해 접근 제한자 설정이 가능하다. (Default : Public)
ex) @NoArgsConstructor(access = AccessLevel.PROOTECTED)
- @NoArgsConstructor : 기본생성자를 자동 생성해준다.
- @AllArgsConstructor : 필드값을 모두 포함한 생성자를 자동 생성해준다.
▶ 4.3 @ToString
- toString 메소드를 자동생성 하여 준다.
- 클래스명(필드명1=값1, 필드명2=값2, . . . ) 형태로 출력된다.
- exclude 키워드를 이용하여 출력을 원치 않는 필드 지정이 가능하다.
- 필드의 명을 출력하고 싶지 않을때 : includeFieldNames을 false. 제외시키고 싶은 필드는 exclude 파라미터에 추가하면된다.
- of 파라미터를 이용하여 원하는 필드만 출력할 수 도 있다. 부모 클래스의 toString을 출력하고 싶은 경우에는 callSuper 파라미터를 true로 설정하여 포함시킬 수도 있다.
- ex1) toString > 모든 필드 출력
package com.god.bo.test.vo;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class TestVo {
private String id;
private String name;
}
- ex2) exclude 선언 - name 변수만 노출된 것을 볼 수 있다.
package com.god.bo.test.vo;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString(exclude="id")
public class TestVo {
private String id;
private String name;
}
▶ 4.4 @EqualsAndHashCode
- equals()와 hashCode()를 자동으로 생성해 준다.
ex) 위의 예시 샘플 소스에 롬복 적용시
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class TestVo {
private String id;
private String name;
/* @NoArgsConstructor, @AllArgsConstructor 어노테이션을 통해 생략 가능
public TestVo() {
}
public TestVo(String id, String name) {
this.id = id;
this.name = name;
}
*/
/* @Getter, @Setter 어노테이션을 통해 생략 가능
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
*/
/* @EqualsAndHashCode 어노테이션을 통해 생략 가능
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TestVo testVo = (TestVo) o;
return Objects.equals(id, testVo.id) &&
Objects.equals(name, testVo.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
*/
/* @ToString 어노테이션을 통해 생략 가능
@Override
public String toString() {
return "TestVo{" + "id='" + id + '\'' + ", name='" + name + '\'' + '}';
}
*/
}
▶ 4.5 이외
① @Notnull
- 멤버필드에 선언해 주면, 해당 변수 Setter에 null값이 들어 올 때 NullPointException을 발생시킨다.
- ex)
public class TestVo {
@NotNull
private String id;
private String name;
}
② @cleanup
- try finally에서 close()를 대신 호출해주는 어노테이션
③ @Synchronized
- 자바의 synchronized를 사용할 때 deadlock이 발생하는 경우가 종종 발생하는걸 방지하기 위해 Lombok이 메소드가 실행되기 전에 잠글 $ lock이라는 개인 잠금 필드를 생성한다.
- lock 오브젝트를 자동으로 생성, synchronized를 손쉽게 사용할수 있게 해준다.
④ @Data
- @Getter, @Setter, @NonNull, @EqualsAndHashCode, @ToString 에 대한 걸 모두 해주는 Annotation
- @NonNull 또는 final 필드를 매개변수로 사용하는 public 생성자가 생성된다.
- @Data는 staticConstructor 하나의 파라미터 옵션만 제공하는데, 파라미터를 이름으로 하는 static factory 메서드를 생성하여 준다.
- ex) @Data(staticConstructor="of")
⑤ @Value
- Value는 Immutable Class을 생성해준다.
- @Data와 비슷하지만 모든 필드를 기본적으로 Private 및 Final로 로 하고, Setter 함수를 생성하지 않고, Class또한 Final로 지정하는 것만 빼고 동일하다.
⑥ @Slf4j, @Log 등
- 해당 어노테이션을 선언하면, log관련 static 메소드를 클래스 별로 선언할 필요가 없다.
- ex)
@Controller
@Slf4j
public class testController {
@RequestMapping(value = "/test")
public @responseBody String test(){
log.info("test!!!");
return "test";
}
}
⑦ @Builder
- 어노테이션을 선언하면 생성자 대신에 빌더를 사용할 수 있다.
- @Singular : collection 타입에 선언하게 되면 파라미터를 하나씩 추가할 수 있다.
- ex)
@Builder
public class TestVo {
private String id;
private String name;
@Singular
private List listTest;
@Singular
private Map<String, String> maps;
/* TestVo test = TestVo.builder().id("goddaehee")
.name("GodDaeHee")
.listTest("List")
.listTest("List Test")
.maps("age","20")
.maps("gender","male")
.build();
.
*/
}
※ 롬복의 실무 적용 시에는 왠만하면 @Getter, @Setter, @ToString @Slf4j 등만 사용하길 권장하고 싶다.
특정 버전 이전에서는 생각 보다 많은 버그도 있고, 잘못사용시 의도치않은 버그? 와같은 결과를 얻을 수 있는 사례가 많다.
'5. 개발도구 > IntelliJ' 카테고리의 다른 글
[IntelliJ] IntelliJ 외부 라이브러리 추가하기(SpringBoot 외부 라이브러리 추가) (1) | 2020.04.22 |
---|---|
[IntelliJ] Intellij 학생 인증, 무료 설치 방법 (13) | 2020.03.05 |
[IntelliJ] Intellij 기본 설정2(플러그인 설정) (13) | 2020.01.09 |
[IntelliJ] Intellij 기본 설정1(초기 설정) (1) | 2020.01.07 |
[IntelliJ] IntelliJ - SVN 연동 방법 (0) | 2020.01.07 |
소중한 공감 감사합니다