Lombok - Annotation 정리

bw1611·2023년 5월 15일
0

Annotation

목록 보기
2/2

Lombok은 무엇일까?

  • 자바 라이브러리로 코드 에디터나 빌드 툴에 추가하여 코드를 효율적으로 작성할 수 있도록 도와주는 친구다. 메서드를 따로 작성해야하는 번거로움을 덜어주는 아주 좋은 친구다.
    텍스트

- @Getter
@Getter 메서드는 우리에게 참 편리한 기능을 많이 제공해준다.
만약에 @Getter 메서드를 사용하지 않는다면 아래 java코드를 보자!

    private Long id;
    private String username;

    public Long getId() {
        return id;
    }

    public String getUsername() {
        return username;
    }

이렇게 각 객체마다 메서드를 선언해줘야 한다. 하지만 @Getter 메서드를 선언해주면

@Getter
public class PracLombok {

    private Long id;
    private String username;
}

로 선언해주면 Lombok이 알아서 getter 메서드를 선언해주기 때문에 우리가 직접 만들 필요가 없어지게 된다.

- @Setter
@Setter도 위에서 설명했던 @Getter와 비슷하다.

    private Long id;
    private String username;

    public void setId(Long id) {
        this.id = id;
    }

    public void setUsername(String username) {
        this.username = username;
    }

직접 메서드를 선언하였을 경우

@Setter
public class PracLombok {

    private Long id;
    private String username;
}

Setter를 선언해주기 때문에 힘들게 하나하나 메서드를 선언해 줄 필요가 없게 되었다.

- @Data
@Getter / @Setter / @RequiredArgsConstructor / @ToString / @EqualsAndHashCode / @Value 가 포함되어 있는 어노테이션이다. 하지만 @Data에는 단점이 존재하는데 @Setter 어노테이션이 포함되어 있다는 것이다. Setter의 단점을 보기 위해서는 위에 있는 @Setter를 확인해보자.

- @RequiredArgsConstructor
클래스에서 final로 선언된 필드에 대한 생성자를 자동으로 생성해주는 어노테이션이다.
@RequiredArgsConstructor 어노테이션을 사용하기 위해서는 해당 클래스에서 final로 선언된 필드가 존재해야 합니다.

선언 하였을 경우

@RequiredArgsConstructor
public class MyClass {
    private final String name;
    private final int age;
    private String address; // 생성자가 만들어지지 않음
}

선언하지 않았을 경우

public class MyClass {
    private final String name;
    private final int age;
    private String address;

    public MyClass(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

이렇게 final이 붙은 필드에 대해서 따로 생성자를 만들어주는 번거로움을 덜 수 있다.

- @NoArgsConstructor
매개변수가 없는 기본 생성자를 자동으로 생성해주는 어노테이션이다. 클래스 내부에 명시적으로 작성하지 않아도 기본 생성자를 사용할 수 있다. 자바에서는 클래스를 생성하면 자동으로 기본 생성자를 하나 만들어 주지만 생성자를 정의하면 컴파일러가 자동으로 기본 생성자를 생성해주지 않습니다.

선언했을 경우

@NoArgsConstructor
public class MyClass {
    private String name;
    private int age;
}

선언하지 않았을 경우

public class MyClass {
    private String name;
    private int age;

	// 기본 생성자
    public MyClass() {
    }
}

- @AllArgsConstructor
모든 필드를 매개변수로 받는 생성자를 자동으로 생성해주는 어노테이션이다. 클래스 내부에 명시적으로 생성자를 작성하지 않아도 된다.

선언했을 경우

@AllArgsConstructor
public class MyClass {
    private String name;
    private int age;
}

선언하지 않았을 경우

public class MyClass {
    private String name;
    private int age;

    public MyClass(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

- @Builder
빌더 패턴을 자동으로 생성해주는 어노테이션이다. 객체 생성자의 인자 개수가 많아지는 경우 코드를 작성하기 힘들어지는 문제를 해결하기 위해 사용되는 패턴 중 하나이다.
생성자 대신 빌더를 이용하여 객체를 생성할 수 있다.

선언하였을 경우

@Getter
@Builder
public class Person {
    private String name;
    private int age;
    @Builder.Default // 빌더패턴을 사용할 경우 처음에 Seoul로 정의된다.
    private String address = "Seoul";
    @Builder.Default
    private boolean isMarried = false;
}
// 빌더 패턴을 사용
Person person = Person.builder()
                      .name("John")
                      .age(30)
                      .isMarried(true) // false로 되있는 것을 true로 덮어씌운다.
                      .build();

빌더 패턴을 사용하지 않았을 경우

public class Person {
    private String name;
    private int age;
    private String address;
    private boolean isMarried;

    public Person(String name, int age, String address, boolean isMarried) {
        this.name = name;
        this.age = age;
        this.address = address;
        this.isMarried = isMarried;
    }

    public Person(String name, int age, String address) {
        this(name, age, address, false);
    }

    public Person(String name, int age) {
        this(name, age, null);
    }
}
profile
Java BackEnd Developer

0개의 댓글