웹 개발/spring

[lombok] 생성자 생성 어노테이션 3가지

dani0312 2024. 2. 3. 17:02

이번 시간에는 lombok라이브러리에서 제공하는 생성자를 자동으로 생성해주는 3가지 어노테이션에 대해 알아보고자 한다. 롬북의 의미에 대해 알아보고 생성자를 생성해주는 각각의 어노테이션의 역할에 대해 알아볼 것이다.

 

 

 

📌lombok

◾lombok이란?

Java 의 라이브러리 중 하나로, 반복적이고 상투적인 코드를 줄이기 위한 어노테이션 기반의 라이브러리이다. 많이 사용되는 Getter/Setter나 생성자 등의 코드를 컴파일 과정에서 생성해주는 방식으로 동작하는 라이브러리이다.  

 

 

개발자는 lombok의 어노테이션을 통해 간결하고 가독성 있는 코드를 작성할 수 있고, 개발의 생산성을 향상시킬 수 있다. 예를 들면 DTO와 같이 자주 변경되는 클래스의 경우 멤버 변수가 추가되거나 없어질 때마다 일일히 Getter,Setter,생성자와 같은 것을 수정해줘야 하는 경우가  발생한다. 이러한 경우도 lombok을 이용하면 단순히 프로퍼티(필드)를 추가하고 삭제하는 것만으로도 충분하다. 

 

 

 

📌생성자 어노테이션

Lombok에서 생성자를 자동으로 생성해주는 어노테이션 3가지에 대해 알아보자.

 

 

`@NoArgsConstructructor`: 매개변수가 없는 기본 생성자를 생성해준다.

`@AllArgsConstructor`: 모든 필드 값을 매개변수로 받는 생성자를 만들어준다.  

`@RequiredArgsConstructor`: final이나 @NonNull인 필드 값만 매개변수로 받는 생성자를 만들어준다.

 

 

◾@NoArgsConstructor

· 매개변수가 없는 기본 생성자를 생성한다.

· `final` 필드가 있는 경우 `@NoArgsConstructor(force = true)`를 사용하여 모든 `final` 필드를 기본값으로 초기화해야 한다.

· Hibernate 와 및 Service Provider Interface와 같은 특정 Java구조에서 필요한 무인자 생성자이다. 

· DTO와 DB를 연결해서 사용할 때나 API를 호출하는 곳에서 파라미터를 DTO로 받아올 때 기본적으로 아무 인수가 없는 기본 생성자가 있어야하므로 DTO에 많이 사용된다.

 

 

어노테이션 사용 코드

@NoArgsConstructor
Public class TestClass{
}

 

🔻🔻🔻

자동 생성되는 생성자

public TestClass() {}

 

 

◾@RequiredArgsConstructor

· `fianl` 키워드가 붙은 필드 또는 @NonNull  (또는 @NotNull)  어노테이션이 붙은 필드에 대한 생성자를 생성한다. 

· @NonNull필드는 명시적인 null 체크를 생성한다.

 

 

어노테이션 사용 코드

@RequiredArgsConstructor
public class TestClass{

	@NonNull
	privatae String name;
	private final int age;
}

 

🔻🔻🔻

자동 생성되는 생성자

public TestClass(String name, int age) {
    if (name == null) {
    throw new NullPointerException("name is marked @NonNull but is null");
	}
    this.name = name;
    this.age = age;	
}

 

 

◾@AllArgsConstructor

· 모든 필드에 대한 생성자를 자동으로 생성한다.

· 클래스의 모든 필드를 초기화할 때 사용된다.

 

어노테이션 사용 코드

@AllArgsConstructor
public class TestClass{
	privatae String name;
	private int age;
}

 

🔻🔻🔻

자동 생성되는 생성자

public TestClass(String name, int age) {
	this.name = name;
	this.age = age;	
}

 

 

💡참고로, 이 어노테이션은 fianl키워드와 관계없이  말 그대로 '모든' 필드에 대한 생성자를 자동 생성해준다. 

 

 

 

 

 

 

 


참고

공식문서 https://projectlombok.org/features/constructor

https://www.daleseo.com/lombok-popular-annotations/