알게된것,복습한것,헷갈렸던것 정리

@NoArgsConstructor, @AllArgsConsturctor, @RequiredArgsConstructor 정리

ysrec328 2025. 9. 11. 22:48

@NoArgsConstructor 와 @AllArgsConstructor 는 Lombok 라이브러리에서 제공하는 어노테이션으로,

개발자가 직접 생성자를 일일이 만들지 않아도 자동으로 생성해주는 기능입니다.

 

1. @NoArgsConstructor

뜻 : 매개변수가 없는 기본 생성자를 자동으로 만들어 줌

즉, new 클래스명() 형태로 객체를 만들 수 있게 해줌

 

예제 코드

import lombok.NoArgsConstructor;

 

@NoArgsConstructor // 기본 생성자 자동 생성

public class User {

    private String name;

    private int age;

}

 

// 위 어노테이션이 붙으면 컴파일 시 아래 코드가 자동으로 추가됨

// public User() {}

 

 

사용 예시

public class Main {

    public static void main(String[] args) {

        User user = new User();  // 기본 생성자 호출 가능

        // user.setName("철수");

        // user.setAge(20);

    }

}

 

 

2. @AllArgsConstructor

뜻 : 모든 필드를 매개 변수로 받는 생성자를 자동으로 만들어줌

즉, 객체를 만들 때 값을 한 번에 넣을 수 있음NoArgsConstructor 와 @AllArgsConstructor 는 Lombok 라이브러리에서 제공하는 어노테이션으로,

 

개발자가 직접 생성자를 일일이 만들지 않아도 자동으로 생성해주는 기능입니다.

 

 

 

1. @NoArgsConstructor

 

뜻 : 매개변수가 없는 기본 생성자를 자동으로 만들어 줌

 

즉, new 클래스명() 형태로 객체를 만들 수 있게 해줌

 

 

 

예제 코드

 

import lombok.NoArgsConstructor;

 

 

 

@NoArgsConstructor // 기본 생성자 자동 생성

 

public class User {

 

    private String name;

 

    private int age;

 

}

 

 

 

// 위 어노테이션이 붙으면 컴파일 시 아래 코드가 자동으로 추가됨

 

// public User() {}

 

 

 

 

 

사용 예시

 

public class Main {

 

    public static void main(String[] args) {

 

        User user = new User(); // 기본 생성자 호출 가능

 

        // user.setName("철수");

 

        // user.setAge(20);

 

    }

 

}

 

 

 

 

 

2. @AllArgsConstructor

 

뜻 : 모든 필드를 매개 변수로 받는 생성자를 자동으로 만들어줌

 

즉, 객체를 만들 때 값을 한 번에 넣을 수 있음

 

예제 코드

import lombok.AllArgsConstructor;

 

@AllArgsConstuctor // 모든 필드를 받는 생성자 자동 생성

public class User {

    private String name'

    private int age;

}

 

// 위 어노테이션이 붙으면 컴파일 시 아래 코드가 자동으로 추가됨

// public User(String name, int age) {

//     this.name = name;

//     this.age = age;

 

사용 예시

public calss Main

    public static void Main {

        User user = new User("철수", 20); // 모든 필드 값을 넣어 생성 가능

    }

}

 

 

정리

@NoArgsContructor 

아무 것도 안 받는 생성자 자동 생성

 

@AllArgsConstructor

모든 필드를 받는 생성자 자동 생성

 

 

실무에서는 두 개를 함께 사용하는 경우가 많다

예를 들어 JPA(Entity 클래스)는 기본 생성자가 꼭 필요해서, @NoArgsconstructor 를,

DTO나 VO 같은 경우는 한 번에 값을 넣기 위해 @AllArgsConstructor 를 씁니다.

 

 

  

3. @RequiredArgsConstructor

뜻 : final 이거나 @NonNull 이 붙은 필드만을 매개변수로 받는 생성자를 자동 생성 해줌

즉, 꼭 필요한 필드들만 생성자 파라미터로 받게 만들어줌

 

import lombok.RequiredArgsConstructor;

import lombok.NonNull;

 

@RequiredArgsConstructor

public class User {

    private final String name;    // final ->  반드시 생성 시 필요

    @NonNull

    private String email;           // @NonNull -> 반드시 생성 시 필요

    private int age;                   //  선택 사항

}

 

// 위 어노테이션이 붙으면 자동으로 이런 생성자가 추가됨

// public User(String name, String email) {

//     this.name = name;

//     this.email = email;

// }

 

사용 예시

public class Main {

    public static void main(String[] args) {

        User user = new User("철수", "chulsu@email.com");

        // age 는 생성자에 없음 -> 필요하면 setter로 나중에 넣을 수 있음

    }

}

 

 

정리 (세 가지 차이점)

@NoArgsConstructor -> 아무것도 안 받는 생성자

-> new User()

@AllArgsConstructor -> 모든 필드를 받는 생성자

-> new User("철수", 20, "email@...")

@RequiredArgsConstructor -> final 또는 @NonNull 필드만 받는 생성자

-> new User("철수", "email.@...")

 

 

실무에서는 보통 다음과 같이 사용합니다.

Entity(JPA) ->

@NoArgsConstructor (기본 생성자 필수) + @RequiredArgsConstructor (필수값만 받도록)

 

DTO ->

@AllArgsConstructor (필드 전체를 한 번에 세팅)

 

 

예제 코드 : JPA 엔티티

java

 

import jakarta.persistence.Entity;

import jakarta.persistence.GeneratedValue;

import jakarta.persistence.GenerationType;

import jakarta.persistence.Id;

import lombok.*;

 

@Entity

@Getter

@NoArgsConstructor   // JPA에서 프록시 생성을 위해 반드시 필요

@AllArgsConstructor   // 모든 필드를 받는 생성자

@RequiredArgsConstructor    // final, @NonNull 필드만 받는 생성자

public class User {

 

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private Long id;    // DB에서 자동 생성 -> 생성자에서 제외하는 경우 많음

 

    @NonNull

    private String username;    // 반드시 필요

 

    @NonNull

    private String email;           // 반드시 필요

 

    private int age;                   // 선택 사항

}

 

 

 

 

생성자 사용 방법

public class Main {

    public static void main(String[] args) {

 

        // 1. @NoArgsConstructor -> 기본 생성자

        User user1 = new User();

        // user1.setUsername("철수"); // setter 나 다른 방식으로 값 설정

        // user1.setEmail("test@test.com");

 

        // 2. @AllArgsConstructor -> 모든 필드 받는 생성자

        User user2 = new User(1L, "영희", "younghee@test.com", 25);

 

        // 3. @RequiredArgsConstructor -> 필수값(final, @NonNull)만 받는 생성자

        User user3 = new User("민수", "minsu@Test.com);

    }

}

 

정리

@NoArgsConstructor

JPA에서 필수 (프록시, 리플렉션 때문에 기본 생성자 필요)

 

@AllArgsConstructor

DTO 변환 같은 경우에 유용 (모든 값 한 번에 세팅)

 

@RequiredArgsConstructor

필수 필드만 강제할 때 유용

 

'알게된것,복습한것,헷갈렸던것 정리' 카테고리의 다른 글

LIKE와 =(등호) 차이  (0) 2025.10.03
오버로딩(Overloading) 이란?  (0) 2025.09.27
파라미터와 기본생성자  (4) 2025.08.01
테스트코드, 단위테스트  (2) 2025.07.17
JPA 정의와 설정  (1) 2025.07.15