먼저, lombok을 설치하자, 공식사이트를 들어가보면 설치하는 방법에 대해 설명되어 있다. 

https://objectcomputing.com/resources/publications/sett/january-2010-reducing-boilerplate-code-with-project-lombok

 

1. getter, setter 자동 생성

 

@Getter, @Setter : 각 전역변수에 선언해 주면 자동으로 getter, setter 메서드를 생성해 주지 않아도 된다.

public class User {
    @Getter
    @Setter(AccessLevel.PROTECTED)
    private String name;
}

또한 @Setter(AccessLevel.PROTECTED) 접근권한을 제어할 수 있다.(AccessLevel.PUBLIC, AccessLevel.PRIVATE 등등..)
AccessLevel.NONE 설정을 통해 메소드 생성을 제한시킬 수 도 있다. -> 잘 쓸 것 같지는 않음

 

2. NULL 예외처리

 

@NonNull 말 그대로 NonNull이다. 멤버필드에 선언해 주면, 해당 변수 Setter에 null값이 들어 올 때 NullPointException을 발생시킨다.

public class User {

    @NonNull
    private String name;
}

 

3. 현재 객체 정보 출력

 

@ToString -> 객체.toString() 메서드를 대체하는 어노테이션으로 callSuper값을 true로 할 경우 상속받은 클래스의 정보까지 출력되며,
exclude를 통해 제외하고자 하는 변수를 선택할 수 있다. 설정하지 않을 경우 @ToString만 선언하면 된다.

@ToString(callSuper=true,exclude="phoneNumber")
public class User extends Address{

    private String name;
    private String phoneNumber;

    /*
    @override
    public toString(){
        return "Address(super = " + super.toString() +
              ", name = " + name + ")";
    }
    */
}

 

4. 객체 비교

 

@EqualsAndHashCode -> 객체 비교에 사용되는 메소드를 대체하는 어노테이션

 

5. setter+getter+toString+nunNull+equalsAndHashCode 모두 사용할 경우

 

@Data -> 위의 어노테이션을 합체시킨 어노테이션, 그러나 각 어노테이션에서 설정할 수 있는 세분성까지는 제공하지 못한다. 위에 중요 따로 설정해서 사용할 어노테이션을 설정한 후, 추가적으로 사용하는 것을 권장한다.

@Data(staticConstructor="of") 매개 변수의 값을 원하는 메소드 이름(of)으로 설정하면 생성자를 private로 만들어 주고, 주어진 이름의 static factory method (new를 사용하지 않고 객체를 만들 수 있음)를 만들어준다.

@Data(staticConstructor="of")
public class User {

    private String name;
}


public class Addredss {

    static public void main(String []args){
        User.of().getName();
    }
}

 

6. 자동 자원 close

 

@cleanup -> try finally에서 close()를 대신 호출해주는 어노테이션

public class User {

    static public void main(String [] args){
        try {
            @Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream();
                baos.write(new byte[] {'Y','e','s'});
               System.out.println(baos.toString());
           } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

7. 동기화

 

java의 synchronized를 사용하면 객체 레벨에서 락이 걸려 여러가지 문제가 발생할 수 있다.
@Synchronized 어노테이션을 사용하면 가상의 필드 레벨에서 보다 더 안전하게 락을 걸어 준다.

@Synchronized
public class User {
    public void ok(){
        System.out.println("ok");
    }
}

 

8. 불변 객체 클래스

class에 @Value 어노테이션을 선언하면, 불변 객체를 만들 수 있다.

@Value
public class User {
    public String name; //setter 메소드 사용 불가능
}

 

9. 로그를 편하게

 

class에 @Slf4j, @Log 등 해당 어노테이션을 선언하면, log관련 static 메소드를 클래스 별로 선언할 필요가 없다.

@Controller
@Slf4j
public class HomeController {

    @GetMapping(path="/")
    public @responseBody String hello(){
        log.info("hello!!!");
        return "hello!!";
    }
}

 

10. Builder 사용

 

class에 @Builder 어노테이션을 선언하면 생성자 대신에 빌더를 사용할 수 있다.
또한 @Singular 어노테이션을 collection 타입에 선언하게 되면 파라미터를 하나씩 추가할 수 있다.

@Builder
public class User {

      private Long id;
      private String name;
      private String password;

      @Singular
      private List<String> habby;

    @Singular
     private Map<String, String> maps;

    /* Example
        User user = User.builder().id(0)
                                  .name("javaboja")
                                  .password("java123")
                                  .habby("football")
                                  .habby("Mountain climbing")
                                  .maps("abc","abc")
                                  .maps("def","def")
                                  .build();
                                  .
    */
}

 

사실상 업무 시 사용되는 어노테이션은 @Getter, @Setter, @Slf4j 등이 사용되며, 나머지 어노테이션은 가급적이면

사용하지 않는 것을 권장한다.(필자는 @Builder까지 사용할 생각이다.)

+ Recent posts