Spring | Lombok(롬복)이란?

바다·2024년 5월 13일
0

Spring

목록 보기
4/13
post-thumbnail

Lombok이란?

Java의 라이브러리로, 반복되는 메서드를 Annotation을 사용해 자동으로 작성해주는 편리한 라이브러리

Java에서는 객체의 프로퍼티에 대해서 Getter, Setter, 생성자 등을 매번 작성해 주어야 하지만
Lombok을 사용하면, 어노테이션을 이용하여 Getter, Setter, 생성자 등의 코드를 자동으로 작성할 수 있다


IntelliJ에서 Lombok 사용하기

1. build.gradle의 dependency에 코드 추가

dependencies {
	compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}

build.gradle 수정 후에는 꼭 코끼리 버튼(새로고침 버튼) 눌러서 변경사항 적용 시켜주어야 함!

2. Plugin에서 Lombok 검색 후 설치

파일 > 설정 > 플러그인

3. Annotation Processing 설정

파일 > 설정 > 빌드,실행,배포 > 컴파일러 > 어노테이션 프로세서

어노테이션 처리 활성화 체크


Lombok 어노테이션

1. Getter / Setter

Lombok에서 가장 자주 활용되는 어노테이션이다.
@Getter, @Setter를 클래스에 적용시키면 모든 변수들에 적용할 수 있고, 변수 이름 위에만 적용시키면 해당 변수들만 적용 가능하다

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

해당 클래스에 있는 id, password, name, age 모두
getter와 setter가 적용된다

2. AllArgsConstructor

모든 변수를 사용하는 생성자를 자동완성 시켜 주는 어노테이션이다

@AllargsConstructor
public class User {
	private Long id;
    private String password;
	private String name;
    private int age;
    
    /* 아래와 같은 코드가 빌드시에 생성된다
    public User(Long id, String password, String name, int age) {
    	this.id = id;
        this.password = password;
        this.name = name;
        this.age = age
    }
    */
}

3. NoArgsConstructor

아무런 변수도 사용하지 않는 기본 생성자를 자동완성 시켜 주는 어노테이션이다

@NoargsConstructor
public class User {
	private Long id;
    private String password;
	private String name;
    private int age;
    
    /* 아래와 같은 코드가 빌드시에 생성된다
    public User() {}
    */
}

4. RequiredArgsConstructor

특정 변수만을 활용하는 생성자를 자동완성 시켜 주는 어노테이션이다

  • final 로 선언된 변수를 인자로 추가한다
  • @NonNull 어노테이션을 붙여서 인자로 추가한다
@RequiredArgsConstructor
public class User {
	private final Long id;
    private String password;
    @NonNull
	private String name;
    private int age;
    
    /* 아래와 같은 코드가 빌드시에 생성된다
    public User(Long id, String name) {
    	this.id = id;
        this.name = name;
    }
    */
}

5. EqualsandHashCode

클래스에 대한 equals 함수와 hashCode 함수를 자동으로 생성해주는 어노테이션이다
서로 다른 두 객체에서 특정 변수의 이름이 똑같은 경우 같은 객체로 판단하고 싶다면 아래와 같이 해줄 수 있다.

@RequiredArgsConstructor
@EqualsAndHashCode(of = {"id", "name"})
public class User {
	@NonNull
	private Long id;
    private String password;
    @NonNull
	private String name;
    private int age;
    
    /* 아래와 같은 코드가 빌드시에 생성된다
    public User(Long id, String name) {
    	this.id = id;
        this.name = name;
    }
    */
}

@EqualsAndHashCode(of = {"id", "name"})로 설정하여 id와 name이 동일하다면 같은 객체로 인신하도록 해주고 있다.

6. ToString

클래스의 변수들을 기반으로 ToString 메소드를 자동으로 완성시켜 준다
출력을 원하지 않는 변수가 있다면 변수 위에 @ToString.Exclude 어노테이션을 붙여 주면 된다

@ToString
public class User {
	private Long id;
    @ToString.exclude
    private String password;
	private String name;
    private int age;
    
    /* 아래와 같은 코드가 빌드시에 생성된다
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    */
}

7. Data

Data 어노테이션을 사용하면 @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor를 자동으로 완성시켜준다

실무에서는 객체의 안정성을 위해 @Data의 사용을 지양한다

8. Builder

해당 클래스의 객체의 생성에 Builder 패턴을 적용시켜 준다

  • 모든 변수들에 대해 build 하기를 원하면 클래스 위에 작성
  • 특정 변수만 build 하기를 원하면 생성자를 작성하고 그 위에 작성
public class User {
	private Long id;
    private String password;
	private String name;
    private int age;
    
   @Builder
   public User(Long id, String password) {
 		this.id = id;
        this.password = password;
   }
}

Lombok 주의사항

Lombok이 많은 기능을 제공해주기 때문에, 개발자가 작성할 코드의 양은 줄어들지만! 개발자가 직접 코드를 작성하지 않기 때문에 의도하지 않은 동작들이 일어날 수 있다

  • 해당 어노테이션이 무슨 기능을 제공하는지 알고 사용하자
  • @Data 남용 금지 : 너무 많은 기능을 제공
  • @Setter 사용 자제 : 의도치 않은 값의 변화
  • @ToString 무한루프 조심
profile
ᴘʜɪʟɪᴘᴘɪᴀɴs 3:14

0개의 댓글