JAVA

[Java] Lombok 라이브러리

kimyongjun0129 2025. 5. 10. 13:25

 


 

Lombok 정의

Java 개발에서 보일러 플레이트 코드를 줄여주는 라이브러리입니다.

더보기

보일러 플레이트 코드
: 최소한의 변경으로 여러곳에서 재사용되며, 반복적으로 사용되는 표준화된 코드를 말합니다.

 


 

Lombok 특징

  • `어노테이션 기반`으로 동작
  • 코드 간결성
  • 유지보수 편의성 향상
  • 프로젝트 빌드 시 자동으로 필요한 메서드가 생성

 


 

Lombok 작동 방식

컴파일 타임에 주어진 어노테이션을 바탕으로 필요한 코드를 자동으로 생성합니다.

 


 

대표적인 Lombok 어노테이션

어노테이션 설명
`@Getter` 모든 필드에 대해 getter 메서드 생성
`@Setter` 모든 필드에 대해 setter 메서드 생성
`@ToString` `toString()` 메서드 자동 생성
`@EqualsAndHashCode` `equals()`와 `hashCode()` 메서드 생성
`@NoArgsConstructor` 파라미터가 없는 기본 생성자 생성
`@AllArgsConstructor` 모든 필드를 파라미커로 받는 생성자 생성
`@RequiredArgsConstructor` `final`이나 `@NonNull` 필드만 파라미터로 받는 생성자 생성
`@Data` `@Getter`, `@Setter`, `@ToString`, `@EqualsAndHashCode`, `@RequiredArgsConstructor` 를 한 번에 적용
`@Builder` 빌더 패턴 구현 (체이닝 방식 객체 생성)
`@Slf4j` `log.info()`, `log.error()` 등을 사용할 수 있는 로거 자동 생성

 

 


 

주요 Lombok Annotation 예시

1. `@Getter`, `@Setter` : 클래스의 모든 필드에 대한 getter와 setter 메서드를 자동으로 생성합니다.

더보기

User

@Setter
@Getter
public class User {
    private String name;
    private int old;
}

 

Main

public class Main {
    public static void main(String[] args) {
        User user = new User();
        user.setName("철수");
        user.setOld(20);

        System.out.println("이름: " + user.getName());
        System.out.println("나이: " + user.getOld());
    }
}

setter, getter를 넣지 않아도 어노테이션을 통해 `getName()`, `getOld()`, `setName`, `setOld`이 자동으로 생성됩니다. 

 

 

결과

 

2. `@ToString` : 객체의 `toString()` 메서드를 자동으로 생성합니다

더보기

User

@ToString
public class User {
    private String name="철수";
    private int old=20;
}

 `toString()` 메서드는 객체 정보를 String으로 변환해주는 역할을 수행합니다. 

 

Main

public class Main {
    public static void main(String[] args) {
        User user = new User();

        System.out.println("user = " + user);
    }
}

 

결과

 

 

3. `@NoArgsConstructor` : 기본 생성자를 생성합니다.

더보기

User

import lombok.NoArgsConstructor;

@NoArgsConstructor
public class User {
    private String name;
    private int old;

    public User(String name, int old) {
        this.name = name;
        this.old = old;
    }
}
  • 이미 생성자가 정의되어 기본 생성자를 생성하지 못할 때 사용 ✅

 

Main

public class Main {
    public static void main(String[] args) {
        User user = new User();
    }
}
  • User Class에서 `@NoArgsConstructor`를 통해 기본 생성자도 생성하여, 컴파일 오류가 생기지 ❌

 

4. `@AllArgsConstructor` : 모든 필드를 매개변수로 하는 생성자를 생성합니다.

더보기

User

@AllArgsConstructor
public class User {
    private String name;
    private int old;
}
  • 모든 필드를 초기화하는 생성자를 생성해줍니다.

 

Main

public class Main {
    public static void main(String[] args) {
        User user = new User("철수", 20);
    }
}
  • 객체 생성 시, 파라미터를 넘겨주지 않으면 컴파일 오류 발생 

 

5. `@RequiredArgsConstructor` : 필수(final) 필드만을 매개변수로 하는 생성자를 자동으로 생성합니다.

더보기

User

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class User {
    private final String name;
    private int old;
}
  •  final 필드인 name만 받는 생성자를 생성합니다.

 

Main

public class Main {
    public static void main(String[] args) {
        User user = new User("철수");
    }
}
  • final로 설정된 필드 name에 한해서만 파라미터를 넘겨줘야 컴파일 오류가 발생하지 않습니다.

 


 

 

결론

Lombok 라이브러리가 없던 때로 돌아갈 순 없을 거같다.

  • 반복적인 코드를 쓰지 않아도 되서 좋다.
  • 어노테이션만 봐도 뭘 의미하는지 바로 알 수 있다. (명시적)
  • 여러 개의 어노테이션을 복합적으로 사용할 수 있다.