Lombok과 어노테이션 정리

이수빈·2023년 8월 30일
0

Spring

목록 보기
4/4

Lombok이란

  • Lombok은 자바 개발자들이 코드에서 반복적으로 작성해야 하는 보일러플레이트 코드(중복된, 반복적인 코드)를 줄이고 간결하게 만들어주는 라이브러리임.

  • Lombok은 클래스나 메서드의 구조를 정의할 때 어노테이션을 사용하여 코드를 자동으로 생성하도록 도와줌.

  1. @Data:

    • 클래스 내에 필드들의 Getter, Setter, toString, equals, hashCode 등을 자동으로 생성해줍니다.
    • 보통 데이터 객체를 표현하는 클래스에서 사용됩니다.
  2. @Getter / @Setter:

    • 필드에 대한 Getter와 Setter 메서드를 자동으로 생성합니다.
    • 필드마다 개별적으로 @Getter 또는 @Setter를 사용하여 설정할 수도 있습니다.
  3. @NoArgsConstructor / @AllArgsConstructor:

    • 매개변수 없는 생성자(@NoArgsConstructor)와 모든 필드를 매개변수로 받는 생성자(@AllArgsConstructor)를 생성합니다.
    • 데이터 객체 생성 시 편리하게 사용할 수 있습니다.
  4. @ToString:

    • toString() 메서드를 자동으로 생성하여 객체의 필드 값을 문자열로 출력해줍니다.
    • 주로 디버깅 및 로깅 목적으로 사용됩니다.
  5. @EqualsAndHashCode:

    • equals()hashCode() 메서드를 자동으로 생성해줍니다.
    • 객체의 동등성 비교와 컬렉션에서의 사용을 위해 유용합니다.
  6. @Builder:

    • 빌더 패턴을 구현하여 객체 생성 시 가독성 있고 유연한 방식으로 객체를 생성할 수 있도록 합니다.
    • 복잡한 객체 생성을 간단하게 할 때 사용됩니다.
  7. @Value:

    • @Data와 유사하게 Getter, equals(), hashCode(), toString() 등을 생성하지만, 불변(immutable)한 객체를 생성합니다.
  8. @Slf4j:

    • 로깅을 위한 Slf4j 라이브러리의 Logger 객체를 자동으로 생성합니다.

    • private static final Logger log = LoggerFactory.getLogger(ClassName.class);와 같은 코드를 대신합니다.

    • log라는 단어 자동생성해줌.

@Builder

  • 사용하려는 엔티티나 객체에 붙히면 자동으로 builder 패턴을 사용 할 수 있도록 도와줌

  • Builder 패턴 직접구현

public class Person {
    private String firstName;
    private String lastName;
    private int age;

    private Person(Builder builder) {
        this.firstName = builder.firstName;
        this.lastName = builder.lastName;
        this.age = builder.age;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getAge() {
        return age;
    }

    public static class Builder {
        private String firstName;
        private String lastName;
        private int age;

        public Builder firstName(String firstName) {
            this.firstName = firstName;
            return this;
        }

        public Builder lastName(String lastName) {
            this.lastName = lastName;
            return this;
        }

        public Builder age(int age) {
            this.age = age;
            return this;
        }

        public Person build() {
            return new Person(this);
        }
    }
}
  • Builder 패턴사용코드
public class Main {
    public static void main(String[] args) {
        Person person = new Person.Builder()
            .firstName("John")
            .lastName("Doe")
            .age(30)
            .build();

        System.out.println("First Name: " + person.getFirstName());
        System.out.println("Last Name: " + person.getLastName());
        System.out.println("Age: " + person.getAge());
    }
}
profile
응애 나 애기 개발자

0개의 댓글