[Spring] Lombok 이란?

2020년 01월 14일 by Xion

    [Spring] Lombok 이란? 목차

Lombok

 

1. 왜 쓰죠?

새로운 라이브러리를 보았을때에는 항상 왜 사용하는지를 파악하는 것이 우선인것 같습니다. 당연시 여기는 것들이 가끔은 당연하지 않은 경우가 있습니다.. 왜 쓸까를 한번 생각해 보시죠.

 

Lombok 이전의 코드

우리는 프로젝트를 진행하면서 DB와 데이터를 주고받기 위해 DTO, VO Class들을 작성하여 데이터를 손쉽게 다루게 됩니다. 그런데 항상 반복되는 코드들이 눈에보입니다.

 

public class Student {
​
    private String id;
    private String name;
​
    public Student(){}
    
    public Student(String id, String name) {
        this.id = id;
        this.name = name;
    }
​
    public String getId() {
        return id;
    }
​
    public void setId(String id) {
        this.id = id;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }

    

    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                '}';
    }

    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return Objects.equals(id, student.id) &&
                Objects.equals(name, student.name);
    }
​
    @Override
    public int hashCode() {
        return Objects.hash(id, name);
    }

}

 

벌써 손이 귀찮음을 느끼고 있습니다.. 물론 근래의 IDE들은 이러한 코드들을 자동으로 완성시켜주는 기능들을 가지고 있습니다. 그럼 왜? 쓸까요? 먼저 Lombok을 이용해 위의 코드를 작성해보겠습니다.

 

Lombok을 사용한 후

@ToString
@EqualsAndHashCode
@Getter @Setter


public class Student {
    
    private String id;
    private String name;
​
    public Student(){}
​
    public Student(String id, String name) {
        this.id = id;
        this.name = name;
    }
}

그 많던 코드들이 획기적으로 줄어든 것을 볼 수 있습니다. 무엇보다도 이 DTO를 보다 더 명시적으로 볼 수 있다는 것입니다. 또한 기존 각각의 변수명을 바꾸어 줄경우, 앞서 작성했던 대량의 코드들을 각각 수정을 해주어야 했지만 지금은 그럴 필요가 없게 되었습니다.

 

 

장점

위의 장점을 간추려보면 다음과 같습니다.

1. 코드작성이 쉽고 필요한 코드가 적다.

2. 코드가 명시적이다.

3. 수정이 간편하다.

 

 

 

2. 그래서 뭔가요?

Lombok은 DTO, VO등에서 반복적으로 사용되는 코드를 @을 통해 작성이 쉽고, 수정이 간편하게 도와주는 라이브러리 입니다.

 

동작 원리

lombok annotation이 부여된 java source를 컴파일할 때 annotation processor로 등록된 lombokprocessor가 어노테이션을 확인하고 그에 맞는 메소드를 자동으로 생성하여 bytecode로 변환이 된다고 합니다.

 

 

 

3. Lombok의 Annotation(@)

@Getter, @Setter

- getter, setter 메소드를 자동으로 생성해줍니다.

- AccessLevel이라는 값을 가지고 있어, 이것을 통해 접근제한자를 설정해줄 수 있습니다. 기본값은 PUBLIC 입니다.

 

클래스에 @Getter,@Setter을 줄 경우에는 모든 필드에 대해 생성이 됩니다. 하지만 필드에 부여되는 경우에는 그 필드에 대해서만 getter, setter 생성이 됩니다. 

 

@ToString

- toString() 메소드를 자동으로 생성해줍니다.

- exclude라는 값을 가지고 있어, 제외할 필드를 지정할 수 있습니다.

 

@EqualsAndHashCode

- equals() 와hashCode()를 자동으로 생성해줍니다.

 

@AllArgsConstructor

- 모든 인스턴스 변수를 포함하는 생성자를 생성해줍니다.

- 마찬가지로 AccessLevel이란 것을 포함하고 있어 접근제한자를 지정해줄수 있습니다.

 

 @NonNull (Required Filed (필수 필드 설정하기))

https://alexandersirotin.com/2018/03/28/marking-field-as-required-when-using-lombok-builder/ 

 

4. Project 설정방법(Intellij 기준)

4.1 의존성 설정

우선 lombok dependency를 추가합니다.

 

4.2 Plugin 설치

Lombok은 Java에서 자체적으로 제공하는 기능을 이용하는 것이 아니기 때문에(JDK 7까지의 기준) 이 어노테이션을 컴파일하기 위한 별도의 플러그인을 설치해야 합니다. 위의 그림대로 따라서 설치하시면 될 것 같습니다. 설치한 후 IDE를 Restart 합니다.

 

4.3 Compiler 설정

이제 Compiler에게 Annotation proecessing을 설정을 해주면 끝입니다.

 

 

 

5. Lombok의 사용시 주의할점

Lombok이 편리하기도 하지만, 완벽한것은 아니기에 개발자가 주의하여 사용해야 합니다. 아래는 그런 문제들을 잘 정리해놓은 블로그입니다. 꼭 참고하시길 바라겠습니다.

http://kwonnam.pe.kr/wiki/java/lombok/pitfall

더보기



출처: https://galid1.tistory.com/531?category=769011 [배움이 즐거운 개발자]