Clean Code hochulshin.com

Java - Lombok

2016-10-14

Lombok은 아주 유용한 Java annotation 라이브러리이다. 이것은 지저분한 boilerplate 코드를 줄이고 이에 따라 코딩을 더 빠르고 실수없이 할 수 있도록 도와준다. Lombok은 getter, setter, toString, constructor, equals, hashCode 메소드들을 자동적으로 생성한다. 개발자는 단지 클래스를 만들고 필드를 추가하면 된다.

1. Lombok 소개

자세한 내용은 여기를 참조하고 annotation이 어떤 것을 지원하는지 간단히 알아보자

1.1 val

lombok.val을 임포트하면 final 키워드를 추가하지 않아도 필요한 변수에는 final을 추가한다.

import lombok.val;

1.2 @NonNull

Null이여서는 안되는 메소드 parameter에 @NoneNull 키워드를 붙여주면 Null인 경우 NullPointerException을 throw한다.

public Shape(@NonNull Person person) {
    ...
}    

1.3 @Cleanup

InputStream이나 OutputStream 선언시 @Cleanup 키워드를 붙여 주면 자동으로 close()를 호출해서 리소스를 반환해 준다.

@Cleanup InputStream in = new FileInputStream(args[0]);

1.4 @Getter / @Setter

클래스의 필드에 키워드를 추가하면 자동으로 setter와 getter를 만들어 준다. 접근 레벨도 설정할 수 있다.

@Getter @Setter 
private int age = 10;

@Setter(AccessLevel.PROTECTED) private String name;

1.5 @ToString

클래스의 toString() 메소드를 만들어준다. 이때 어떤 필드를 추가할 지 설정할 수 있다.

@ToString(exclude="id") 
public class Shape { 
    private String name;
    private double score;
    private String[] tags;
    private int id;
    ...
}    

@ToString(callSuper=true, includeFieldNames=true) 
public static class Square extends Shape { 
    ...
}    

1.6 @EqualsAndHashCode

클래스의 필드를 기반으로 자동으로 hashCode()와 equals() 메소드를 만들어준다.

@EqualsAndHashCode(exclude={"id"}) 
public class Shape { 
    private String name;
    private double score;
    private String[] tags;
    private int id;
    ...
}   

@EqualsAndHashCode(callSuper=true)
public static class Square extends Shape { 
    ....
}

1.7 @NoArgsConstructor, @RequiredArgsConstructor 그리고 @AllArgsConstructor

Constructor를 자동으로 만든다.

@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class Shape { 
    ...
}   

1.8 @Data

@ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor를 한번에!!!

@Data
public class Shape { 
    ...
}   

1.9 @Value

Immutable 클래스를 쉽게 만든다. 이건 자세한 내용을 참조하자.

1.10 @Builder

builder 패턴을 쉽게 만든다. 이건 자세한 내용을 참조하자.

1.11 @SneakyThrows

Throws를 제대로! 이건 자세한 내용을 참조하자.

1.12 @Synchronized

synchronized를 제대로! 이건 자세한 내용을 참조하자.

1.13 @Getter(lazy=true)

성능을 잡아먹는 cache이슈를 피해서 lazy getter를 구현한다. 이건 자세한 내용을 참조하자.

1.14 @Log

주저리 주저리 긴 log선언을 깔끔하게 처리한다. 이건 자세한 내용을 참조하자.

2. IntelliJ에서 Lombok 사용하기

2.1 Plugin 설치

Lombok plugin을 설치한다. Preferences > Plugins > Browse repositories..에서 lombok 검색 후 설치

2.2 Annotation Processor enable

Preferences > Build, Execution, Deployment > Compiler > Annotation Processor에서 Enable Annotation Processing을 체크

2.3 라이브러리 설정

Maven project로 만든 후 pom.xml에 dependency 추가

<dependencies>	
  <dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<version>1.16.12</version>
		<scope>provided</scope>
	</dependency>
</dependencies>

Similar Posts

Comments