경험/기술

[Java] [Lombok] 제대로 알고 사용하기 !

호야_ 2023. 10. 17. 16:49
728x90

Java + SpringBoot를 사용하는 프로젝트를 한다면 롬복을 한 번쯤은 써봤을 것이고, 없으면 안 된다는 사람도 있을 것이다. 근데 "롬복을 제대로 알고 있나?"라는 의문이 들어서 정리해보려고 한다.

 

Lombok 🌶️

공식문서를 보면 롬복은 코드 작성을 편하고 훨씬 간결하게 도와주는 도구라고 생각하면 된다.

https://projectlombok.org/ 

Project Lombok(롬복)은 자바 라이브러리로, 자동으로 에디터와 빌드 도구에 연결됩니다. 이 라이브러리를 사용하면 자바 코드 작성을 훨씬 간결하게 할 수 있습니다.

롬복을 사용하면 귀찮은 getter, setter, equals, hashCode와 같은 메서드를 수동으로 작성할 필요가 없습니다. 단순한 어노테이션 하나로 클래스에 완전한 빌더 기능을 제공할 수 있습니다. 또한 로깅 변수 자동화와 같은 다양한 기능도 제공하여 코드의 반복과 중복을 줄여주며, 개발자의 생산성을 향상해 줍니다.

 

먼저 자주 사용하는 기능 중에 헷갈릴만한 `@NoArgsConstructor`, `@AllArgsConstructor`, `@RequiredArgsConstructor`에 대해 정리해보려고 한다.

 

@NoArgsConstructor

  • `@AllArgsConstructor`는 인자(파라미터)가 없는 기본 생성자를 생성한다.
      > 이름에서 알 수 있듯이 '아무것도 필요하지 않은 생성자'를 만들어준다.
import lombok.NoArgsConstructor;

@NoArgsConstructor
public class ToyBox {
    private String toyName;
    private int toyCount;

    public void showToys() {
        System.out.println("장난감 이름: " + toyName + ", 장난감 개수: " + toyCount);
    }
}

class TestMain {
    public static void main(String[] args) {
        // 빈 상자(ToyBox)를 만듭니다.
        ToyBox emptyBox = new ToyBox();
        emptyBox.showToys();  // 이 상자 안에는 아무것도 들어있지 않다.
    }
}

 

더보기
생일 선물로 상자를 받았다고 생각해 보자. 그 상자 안에는 아무것도 들어있지 않다. `@NoArgsConstructor`는 그런 빈 상자 같은 역할을 하는 생성자를 만들어주는 기능이다.

여기서 `ToyBox`라는 클래스는 장난감의 이름(`toyName`)과 개수(`toyCount`)라는 두 가지 정보를 가지고 있다. 보통 상자 안에 무언가를 넣을 때는 무엇을 넣을지 알아야 하는데, `@NoArgsConstructor` 덕분에 아무것도 안 넣고 빈 상자를 만들 수 있다.

`TestMain`에서 `ToyBox`의 빈 상자를 만들고, 그 상자 안의 내용을 확인해 보면, 장난감의 이름은 아직 모르는 상태(`null`)이며, 장난감의 개수도 0개라는 것을 알 수 있다.

 

@RequiredArgsConstructor

  • `@RequiredArgsConstructor `는 초기화되지 않은 `final` 필드 또는 `@NonNull`로 표시된 필드에 대한 생성자를 생성한다. 즉, 필수적으로 초기화가 필요한 필드들만을 인자로 받는 생성자를 생성한다.
      > '필수로 필요한 것만을 가진 생성자'를 자동으로 만들어준다.
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class SpecialBox {
    private final String favoriteToy;  // 'final'은 이 변수가 꼭 필요하다는 것을 의미
    private String otherToy;

    public void showToys() {
        System.out.println("가장 좋아하는 장난감: " + favoriteToy + ", 다른 장난감: " + otherToy);
    }
}

class TestMain {
    public static void main(String[] args) {
        // 가장 좋아하는 장난감만 있는 SpecialBox를 만든다.
        SpecialBox specialBox = new SpecialBox("트랜스포머");
        specialBox.showToys();
    }
}
더보기
이번에는 상자에 가장 좋아하는 장난감만 들어있다고 생각해 보자. 다른 것은 필요 없고, 그 장난감만 있으면 된다. `@RequiredArgsConstructor`는 그런 상자를 만들 때 필요한 생성자를 자동으로 만들어주는 기능이다.

`SpecialBox`라는 클래스는 `favoriteToy`와 `otherToy`라는 두 가지 정보를 가지고 있다. 하지만 `favoriteToy`는 `final` 키워드가 붙어있기 때문에 이 장난감은 상자에 꼭 들어가야 한다. 그래서 `@RequiredArgsConstructor`는 `favoriteToy`만을 요구하는 생성자를 만들어준다.

 

@AllArgsConstructor

  • ` @AllArgsConstructor`는 모든 필드에 대한 생성자를 생성한다. 즉, 클래스의 모든 멤버 변수를 인자로 받는 생성자를 만든다.
      > '모든 것을 필요로 하는 생성자'를 자동으로 만들어준다.
import lombok.AllArgsConstructor;

@AllArgsConstructor
public class GiftBox {
    private String toy;
    private String chocolate;

    public void showGifts() {
        System.out.println("장난감: " + toy + ", 초콜릿: " + chocolate);
    }
}

class TestMain {
    public static void main(String[] args) {
        // 장난감과 초콜릿이 들어있는 GiftBox를 만든다.
        GiftBox filledBox = new GiftBox("레고", "허쉬");
        filledBox.showGifts();
    }
}
더보기
이번에는 선물로 상자를 받았는데, 그 안에는 좋아하는 장난감과 초콜릿이 들어있다고 생각해 보자. 이 상자는 선물 받기 전에 이미 내용물이 들어있어야 한다. ' @AllArgsConstructor`는 그런 상자를 만들 때 필요한 생성자를 자동으로 만들어주는 기능이다.

`GiftBox`라는 클래스는 장난감(`toy`)과 초콜릿(`chocolate`)이라는 두 가지 정보를 가지고 있다. `@AllArgsConstructor` 덕분에 우리는 장난감과 초콜릿을 모두 담은 `GiftBox`를 만들 수 있다.

 

이렇게 롬복을 사용하면 코드를 더 간결하게 만들어주면서, 자주 사용하는 패턴의 생성자 코드를 쉽게 작성할 수 있도록 도와준다.

 

더 확인해 보면 좋을 것 같은 Builder 심화
https://adjh54.tistory.com/96
https://adjh54.tistory.com/152

 

 

 

언제나 잘못된 설명이나 부족한 부분에 대한 피드백은 환영입니다🤍

728x90