Today I Learned

Lombok 어노테이션 본문

JAVA & Spring

Lombok 어노테이션

하이라이터 2021. 3. 1. 02:42
728x90

Lombok이란?

- 자바에서 Model Object를 생성 할 때, 멤버필드에 대한 getter, setter, toString 및 생성자 등에 대한 코드가 반복적으로 사용된다.

롬복(Lombok)은 이러한 메서드들을 어노테이션을 통해 줄여주는 자바 라이브러리이다.


@Getter / @Setter

접근자(getter)와 설정자(setter)에 대한 메소드 생성을 지원한다.

특정 필드에 어노테이션을 추가하면 자동으로 접근자와 생성자 메소드를 사용할 수 있다.

또한 필드 레벨이 아닌 클래스 레벨에 선언할 경우, 모든 필드에 적용된다.

(setter는 final인 필드에 대해서는 제외된다.)

public class User {
    private final String id;
    private String name;
    private int age;

    public String getName() {
        return name;
    }
    public String getName() {
        return name;
    }
    public String setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
@Getter
@Setter
public class User {
    private final String id;
    private String name;
    private int age;
}

 

@NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor

생성자에 대한 자동 생성을 지원한다.

  • @NoArgsConstructor - 파라미터가 없는 기본 생성자

  • @AllArgsConstructor - 모든 값을 파라미터로 받는 생성자

  • @RequiredArgsConstructor - final 또는 @NotNull 필드 값만 파라미터로 받는 생성자

public class User {
    private final String id;
    private String name;
    private int age;

    public user() {
    }
    
    public user(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    
    public user(String id) {
        this.id = id;
    }
}
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class User {
    private final String id;
    private String name;
    private int age;
}

@ToString

모든 필드를 출력하는 toString() 메소드를 생성한다.

@ToString(exclude = "id")와 같이 특정 필드만 제외시킬 수도 있다.

public class User {
    private final String id;
    private String name;
    private int age;

    @Override
    public String toString() {
        return "id=" + this.id + ", name=" + this.name + ", age=" + this.age;
    }
}
@ToString
public class User {
    private final String id;
    private String name;
    private int age;
}

@EqualsAndHashCode

자바 bean에서 동등성 비교를 위해 사용하는 equals와 hashCode 메소드를 생성한다.

  • equals : 두 객체의 내용이 같은지, 동등성(equality) 를 비교하는 연산자

  • hashCode : 두 객체가 같은 객체인지, 동일성(identity) 를 비교하는 연산자

@EqualsAndHashCode(callSuper=true)로 설정할 경우 부모 클래스의 필드 값까지 동일한지 체크한다.

(기본설정은 false)

 

 

@Data

@Getter와 @Setter, @ToString, @RequiredArgsConstructor, @EqualsAndHashCode를 한번에 설정해준다.


Lombok 사용 시 주의점

롬복은 반복되는 코드를 줄여주어 코드의 가독성과 생산성에 도움을 준다.

하지만 편리성을 제공하는만큼 잘못 사용할 경우 문제가 될 수 있기에 주의할 점을 파악하고 API의 내부 동작을 숙지하고 사용해야한다.

 

대표적으로 toString 메소드로 인한 순환참조 문제, 무분별한 Setter 남용으로 인한 객체 불변성 보장불가 문제 등이 있다.

 

주의점에 대한 예시는 링크로 대체한다.

 

Lombok 사용 상 주의점

실무에서 Lombok 사용법

728x90

'JAVA & Spring' 카테고리의 다른 글

Feign 적용  (0) 2021.03.04
크론(CRON ) 표현식  (0) 2021.02.06
스프링 스케쥴러 (@Scheduled) 설정 및 사용하기  (0) 2021.02.06
Comments