Java/Grammar

[Java 문법] 롬복 (Lombok)

annovation 2024. 12. 22. 10:21

롬복 (Lombok)

  • 롬복(Lombok)은 Java에서 반복적인 코드를 줄여주는 라이브러리입니다.
  • 롬복을 사용하면 Getter, Setter, Constructor, toString, Equals/HashCode 같은 코드를 자동으로 생성해줍니다.
  • 이를 통해 코드 작성 시간을 줄이고 가독성을 높일 수 있는 도구입니다.

주요 기능

1. Getter/Setter 자동 생성

  • 클래스 필드에 대해 @Getter, @Setter 어노테이션을 사용하면 getter와 setter 메서드가 자동으로 생성됩니다.

2. 생성자 자동 생성

  • @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor 어노테이션으로 생성자를 자동 생성합니다.

3. toString, Equals, HashCode 자동 생성

  • @ToString, @EqualsAndHashCode를 사용해 메서드를 자동으로 생성합니다.

4. 빌더 패턴 지원

  • 빌더 패턴
    • 객체를 생성할 때 복잡한 생성자 호출을 피하고, 가독성을 높이는 방법
    • 객체의 필드가 많거나, 일부만 초기화해야 하는 경우에 유용
    • 메서드 체이닝을 활용해 객체 생성 과정을 직관적이고 단계적으로 표현
  • @Builder 어노테이션을 통해 빌더 패턴을 쉽게 구현합니다.

5. 로그 객체 생성

  • 로그 객체 : 애플리케이션 실행 중에 발생하는 정보를 기록(log)하기 위한 객체
  • @Slf4j, @Log 등을 사용하면 로그 객체를 자동으로 생성합니다.

6. 메서드 집합

  • @Data를 사용해 한번에 여러 메서드를 자동으로 생성합니다.
    • @Getter (모든 필드의 getter 메서드)
    • @Setter (모든 필드의 setter 메서드)
    • @ToString (객체 정보를 문자열로 반환하는 메서드)
    • @EqualsAndHashCode (객체 비교 메서드)
    • @RequiredArgsConstructor (final 필드를 포함하는 생성자)

설치

1. Maven

pom.xml에 Lombok 의존성을 추가합니다.

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.28</version> <!-- 버전은 최신으로 설정 -->
    <scope>provided</scope>
</dependency>

 

2. Gradle

build.gradle에 Lombok 의존성을 추가합니다.

implementation 'org.projectlombok:lombok:1.18.28'
annotationProcessor 'org.projectlombok:lombok:1.18.28'

 

3. IDE 설정

Lombok은 IDE에서도 동작해야 하므로, Lombok 플러그인을 설치해야 합니다.

  • IntelliJ: Settings > Plugins > Lombok 검색 후 설치
  • Eclipse: Eclipse Marketplace에서 Lombok 설치

사용법

1. Getter/Setter 자동 생성

import lombok.Getter;
import lombok.Setter;

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

 

  • 위 코드로 인해 getName(), setName(String name) 등이 자동 생성됩니다.
  • 개발자가 직접 메서드를 작성하지 않아도 됩니다.

2. 생성자 자동 생성

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;

@NoArgsConstructor // 기본 생성자 생성
@AllArgsConstructor // 모든 필드 포함 생성자 생성
@RequiredArgsConstructor // final 필드만 포함하는 생성자 생성
public class User {
    private String name;
    private final int age; // RequiredArgsConstructor는 final 필드만 포함
}

 

 

3. 빌터 패턴

 

(1) 빌더 패턴 없이

public class User {
    private String name;
    private int age;
    private String email;

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

public class Main {
    public static void main(String[] args) {
        User user = new User("Alice", 25, "alice@example.com");
        System.out.println(user);
    }
}

 

(2) 빌더 패턴 사용

import lombok.Builder;

@Builder
public class User {
    private String name;
    private int age;
}

// 빌더 사용 예시
public class Main {
    public static void main(String[] args) {
        User user = User.builder()
                        .name("Alice")
                        .age(25)
                        .build();
        System.out.println(user);
    }
}

 

4. 로그 자동 생성

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Main {
    public static void main(String[] args) {
        log.info("Hello, Lombok!"); // 로그 객체를 자동 생성
    }
}

룸복 사용 전후 비교

1. 룸복 없이 작성

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

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{name='" + name + "', age=" + age + "}";
    }
}

 

2. 룸복 사용

import lombok.Data;

@Data // @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 포함
public class User {
    private String name;
    private int age;
}

장단점

* 장점

  1. 코드 간소화 : 반복적인 getter, setter, 생성자, toString 코드 작성을 줄임
  2. 가독성 향상 : 핵심 로직에만 집중할 수 있음
  3. 생산성 증가 : 더 적은 코드로 더 빠르게 개발 가능

* 단점

  1. 코드 간소화 : 반복적인 getter, setter, 생성자, toString 코드 작성을 줄임
  2. 가독성 향상 : 핵심 로직에만 집중할 수 있음
  3. 생산성 증가 : 더 적은 코드로 더 빠르게 개발 가능

출처

OpenAI ChatGPT (https://openai.com)

 

 

 

'Java > Grammar' 카테고리의 다른 글

[Java 문법] Stream API 주요 method 정리  (1) 2024.12.31
[Java 문법] 데이터 타입 (Data Type)  (1) 2024.12.28
[Java 문법] HashMap  (1) 2024.12.10
[Java 문법] Map  (1) 2024.12.09
[Java 문법] 삼항 연산자 (ternary operator)  (0) 2024.12.09