(JAVA학원/Spring학원)롬복이란?자바개발자를 위한 모델 클래스 다이어트용 롬복(Lombok) 소개합니다.
롬복(lombok)소개
n 자바에서 모델객체를 생성할 때 setter/getter/toString/hashCode/equals 메소드를 만드는데 이럴 경우 클래스 파일의 소스가 길어지고 복잡해지는데 이를 해결하기 위해 롬복(Lombok)을 사용한다.
n 클래스 안에 있는 필드에 대해 Getter, Setter의 생성이나, toString(), equals(), hashCode() 메서드, 생성자를 자동으로 생성 해준다.
n 설치
ü http://projectlombok.org/download.html 에서 jar 파일을 다운로드 후 실행(더블클릭해서 실행 안되면 javaw –jar lombok.jar로 실행하자)
ü maven의 설정 파일에 의존성 추가
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version></dependency>
ü Gradle의 설정 파일에 의존성 추가
Compile('org.projectlombok:lombok:1.16.6')
스프링 부트를 사용한다면 프로젝트 생성시 두번째 화면에서 Core -> Lombok을 선택하면 자동으로 라이브러리가 추가된다.
n 어노테이션
@Getter : Getter 메소드를 생성해 준다.
@Setter : Setter 메소드를 생성해 준다.
getter 는 필드값을 리턴하며 필드명이 name 일때 게터 메소드 이름은 getName (name이 boolean 일때는 isName), 기본 setter는 filed 명이 name 일때 setName이 된다. return type은 void 이며 field 와 동일한 type의 라파미터를 한 개만 입력받는다. 생성된 getter/setter method 의 기본 접근레벨은 AccessLevel 키워드를 명시적으로 지정하지 않았다면 public 이며 Accesslevels 은 PUBLIC, PROTECTED, PACKAGE, and PRIVATE 중에 설정할 수 있다.
@ToString : 클래스의 필드를 확인해서 toString 메소드를 적절히 만들어 준다.
@Entity
@Table(name=“sawon_hobby")
@Getter @Setter
@ToString(exclude={“sawon", “hobby"})
@NoArgsConstructor //아규먼트 없는 생성자를 만듬
public class SawonHobby {
……
}
@EqualsAndHashCode : equlas와 hashcode 메소드를 만들어 주는데 static 또는 transien가 아닌 필드가 대상이다. 명시적으로 필드를 제외하려면 exclude={“필드1”,”필드2”}로 표시하고 포함하려면 of={“필드1”,”필드2”}로 표시한다.
@Data : 클래스안의 모든 private 필드에 대해 @Getter와 @Setter를 적용하여 Getter/Setter를 만들어주고 @ToString 과 @EqualsAndHashCode를 적용시켜 메소드를 오버라이드 해준다. 또한 @RequiredArgsConstructor를 지정하여 생성자를 만들어 준다.
val : 로컬변수에 사용되며 final을 사용한것과 비슷한 효과를 내는데 형식을 자동 유추하여 타입을 따로 쓰지 않고 변수를 선언할 수 있다.
@Cluenup : 로컬 변수에 어노테이션을 붙이면 해당 변수의 clean up 코드가 메소드가 종료될 때 자동 호출되어 자원을 정리시켜 준다. 기본적으로 clean up 메소드 이름은 close 이며 다르다면 @Cleanup("메소드명")와 같이 기술하면 된다.
//현재 스코프를 빠져 나가기 전에 in.close()가 자동 호출된다.
@Cleanup
InputStream in = new FileInputStream("some/file");
[Before]
InputStream in = new FileInputStream(args[0]);
try {
OutputStream out = new FileOutputStream(args[1]);
try {
byte[] b = new byte[100];
while (true) {
int r = in.read(b);
......
out.write(b, 0, r);
}
} finally {
if (out != null) { out.close();}}
} finally { if (in != null) in.close();
}
[After]
@Cleanup
InputStream in = new FileInputStream(args[0]);
@Cleanup
OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[100];
while (true) {
int r = in.read(b);
……
out.write(b, 0, r);
}
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor : 생성자를 자동으로 만들어준다. 특히 자바에서는 파라미터 있는 생성자를 만들어 놓은 경우 기본생성자(인자없는 생성자)를 자동으로 만들지 않으므로 @NoArgsConstructor를 사용하면 유용하다.
@RequiredArgsConstructor : 모든 초기화 안된 final 변수, @NonNull 어노테이션이 붙은 초기화 안된 필드에 대해 인자로 생성자를 만들어 준는데 @NonNull 어노테이션이 붙은 필드는 명시적으로 null을 체크하는 부분을 자동 추가해 준다.
@NoArgsConstructor : 파라미터 없는 기본 생성자를 자동 생성한다.
@AllArgsConstructor : 모든 필드에 대한 생성자를 자동 생성한다.
[Before]
[After]
@Delegate : 한 클래스에 다른 클래스의 메소드를 위임하여 생성하게 한다. 예문을 보자.
public class Test {
@Delegate(types=Set.class) //Set인터페이스의 메소드가 Test 클래스에 생긴다.
//그리고 Test에서 Set의 메소드를 호출하도록 만들어준다.
private final Set<String> emps = new HashSet<String>();
}
다음 코드와 비슷한 모양이다.
public class Test {
private final Set<String> emps =
new HashSet<String>();
public boolean add(final String item) {
return this.emps.add(item);
}
public boolean remove(final String item) {
return this.emps.remove(item);
}
......
}
@CommonsLog : Creates private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@Log : Creates static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j : Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Slf4j : Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
댓글 없음:
댓글 쓰기