[Spring]Lombok 알아보기!

Intro

스프링을 배울 당시에 롬복이라는 라이브러리가 있다고는 들었지만 배우지 못했다. 그렇기에 어떤 것인 지 정리해보려 한다.

Lombok(롬복)

Lombok이란, 어노테이션을 기반으로 코드를 자동화하여 작성해주는 라이브러리다.
구체적으로 getter, setter constructor 작성 등의 많은 코드를 작성해야 하는데 이를 자동화 하여 작성해준다.

  1. 장점
    • 코드 길이를 줄여 가독성을 키울 수 있다.
    • 유지보수성을 높일 수 있다.
  2. 단점
    • 플러그인을 별도로 설치해야 하는 점으로 인해 프로젝트에서 설치하지 않은 팀원의 경우 오류가 발생함.
    • 무분별하게 @Data 등과 같은 어노테이션을 사용해서는 안된다고 한다. (아직 사용해보지 않아서 주변 글들을 참조함.)

Lombok 사용 예시

1. @Getter / @Setter


Lombok 사용 전(일반적인 클래스)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Student {
    private int studentNum;
    private String name;
    private int age;
 
    public int getStudentNum() {
        return studentNum;
    }
 
    public void setStudentNum(int studentNum) {
        this.studentNum = studentNum;
    }
 
    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;
    }
}

Lombok 사용 후

1
2
3
4
5
6
7
8
9
import lombok.Getter;
import lombok.Setter;
 
@Getter @Setter
public class Student {
    private int studentNum;
    private String name;
    private int age;
}
  • @Getter, @Setter 어노테이션을 통해 코드가 간결해진 것을 확인할 수 있다.
  • @Getter@Setter는 자동으로 getter 메소드와 setter 메소드를 생성해주는 어노테이션이다.

2. @ToString


@ToString 사용 전

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Student {
    private int studentNum;
    private String name;
    private int age;
 
    @Override
    public String toString() {
        return "Student{" +
                "studentNum=" + studentNum +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

@ToString 사용 후

1
2
3
4
5
6
7
8
import lombok.ToString;
 
@ToString
public class Student {
    private int studentNum;
    private String name;
    private int age;
}
  • @ToString 어노테이션은 클래스의 변수들을 기반으로 ToString 메소드를 자동으로 완성시킨다.
  • 만약, 제외하고 싶은 변수가 있다면 @ToString.Exclude 를 붙여주면 된다.

3. 생성자

3-1 @NoArgsConstructor

파라미터 없는 기본 생성자(constructor)를 생성해주는 어노테이션이다.

1
2
3
4
5
6
7
8
9
10
@NoArgsConstructor
public class Student {
    private int studentNum;
    private String name;
    private int age;
	
    //@NoArgsConstructor 사용 시 
    //=> 하단의 생성자를 자동 생성해준다.(생략할 수 있음.)
    public Student() { }

3-2 @AllArgsConstructor

NoArgsConstructor과는 달리 모든 변수들을 받는 생성자(constructor)를 만들어준다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@AllArgsConstructor
public class Student {
    private int studentNum;
    private String name;
    private int age;
	
    /*
    @AllArgsConstructor 사용 시 
    //=> 하단의 생성자를 자동 생성해준다.(생략할 수 있음.)
   public Student(int studentNum, String name, int age) {
        this.studentNum = studentNum;
        this.name = name;
        this.age = age;
    }
    */
}

3-3 @RequiredArgsConstructor

RequiredArgsConstructor란, 필수적인 변수들만 설정하는 생성자를 만드는 어노테이션이다.

  • 필수적으로 사용하는 변수들에 @NonNull를 붙이면 어노테이션이 붙은 필드들만 파라미터로 받는 생성자를 만든다.
  • 변수에 final로 선언하는 경우도 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@RequiredArgsConstructor
public class Student {
    private int studentNum;
    @NonNull
    private String name;
    @NonNull
    private int age;
	
    /*
    @RequiredArgsConstructor 사용 시 
    //=> 하단의 생성자를 자동 생성해준다.(생략할 수 있음.)
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    */
}

4. @EqualsAndHashCode

equals와 hashcode를 자동 생성해주는 어노테이션이다.

  • equals : 두 객체의 내용이 같은지, 동등성을 비교하는 연산자
  • hashcode : 두 객체가 같은 객체인지, 동일성을 비교하는 연산자

5. @Data

위에서 설명한 생성자 생성 어노테이션과 @ToString, @EqualsAndHashCode를 한 번에 설정해주는 어노테이션이다.
실무에서는 너무 무겁고 객체의 안정성을 지키기 때문에 @Data의 활동을 지양한다고 한다.

6. @Builder

@Builder 어노테이션을 사용하면 해당 클래스의 객체에 Builder 패턴을 적용시켜 준다.

빌더 패턴이란, 디자인 패턴에서 생성패턴에 해당되는 패턴이다.
구체적으로 객체를 생성하는 방법과 클래스에서 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴이다. 자세한 설명은 여기로!

참조 사이트

https://dev-coco.tistory.com/86
https://velog.io/@seongwon97/Spring-Boot-Lombok#noargsconstructor