2018년 12월 19일 수요일

(스프링학원)(JAVA학원/Spring학원)롬복이란?자바개발자를 위한 모델 클래스 다이어트용 롬복(Lombok) 소개합니다.



(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);

댓글 없음:

댓글 쓰기