본문 바로가기
웹 개발/spring

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

by dani0312 2024. 2. 3.

이번 시간에는 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/


/* 내가 추가한 코드 */ /* 내가 추가한 코드 끝끝 */