개발노트

Lombok, Builder Pattern

dantae 2020. 3. 24. 15:30

Lombok

롬복(Lombok)은 자바에서 많이 사용되는 getter/setter, equlas, 생성자 등의 소스코드를 자동으로 생성하고 관리 해 주는 자바 라이브러리이다.  lombok을 사용하면 각 변수에 대하여 개발자가 일일히 getter/setter를 추가하지 않아도 되므로 소스코드가 매우 간결해지고 유지보수가 편리해진다.

 

 

IntelliJ IDE와 Lombok 연동하기

Lombok을 사용하여 프로젝트를 빌드하기 위해, build 파일의 의존성 부분에 lombok annotation processor를 사용할것임을 명시하여야 한다. build tool로 Gradle을 사용할 경우 다음과 같다.

 

compileOnly, annotationProcessor 부분에 lombok 사용을 명시하였다.

 

그리고 IntelliJ에 아직 Lombok 플러그인을 설치하지 않았다면 File->Settings->Plugins 메뉴에서 [Lombok]을 검색하여 플러그인을 설치한다. 설치가 완료되면 IntelliJ를 재시작하게 되고, 플러그인이 Installed 상태로 변경된다.

 

IntelliJ IDE에 Lombok plugin 설치

 

LomBok Annotation

Lombok은 Annotation을 사용하여 코드를 매우 간단하게 만들어 준다. 몇가지 Annotation의 사용법을 정리 해 보자.

 

@Getter/@Setter

   클래스에 선언할 경우 해당 클래스의 모든 멤버변수에 대하여 Getter/Setter 함수를 생성한다. 

   변수 앞에 선언할 경우 해당 변수에 대한 Getter/Setter 함수를 생성한다.

 

@NoArgsConstructor/@AllArgsConstructor

   클래스에 선언하여 각각 해당 클래스의 기본 생성자(NoArgsConstructor)와

   모든 멤버변수를 포함하는 생성자(AllArgsConstructor)를 생성한다.

 

@Builder

  Builder Pattern을 사용위한 builder() 함수를 생성한다.

 

Lombok Annotation을 사용하면 class가 이와 같이 단순해진다.

 

 

Builder Pattern

 다음과 같은 생성자가 있다고 가정 해 보자.

 간단한 객체라면 상관없지만 만약 새로운 멤버 변수가 계속해서 추가되고 객체 생성 시에 이들 모두를 초기화해야 한다면, 생성자의 어떤 파라미터가 어떤 멤버 변수에 해당하는지 눈에 잘 들어오지 않고 코드의 가독성이 많이 떨어질 것이다. 그렇다고 멤버 변수를 Setter를 사용하여 설정한다면 객체 생성이 한번에 끝나지 않아 좋지 않은 구현이 될 것이다.

 이런 상황에 사용할 수 있는것이 Builder 패턴이다.

 

 이러한 Builder 패턴을 사용하면 어떤 객체를 생성할 때 각 인자의 의미가 무엇인지 한눈에 볼 수 있기 때문에 소스 코드의 유지보수가 편해지고, 파라미터의 조합에 따른 모든 종류의 생성자를 선언하지 않아도 되며, 생성자의 파라미터를 순서대로 넘겨주지 않아도 된다는 여러 가지 장점이 있다.

 

 본래 이와 같은 Builder 패턴을 구현하려면 개발자가 직접 클래스에 builder() 함수를 작성해야만 한다. 하지만 Lombok을 사용하면 클래스에 @Builder 어노테이션을 작성하는것만으로 간단하게 builder 패턴을 사용할 수 있다.