본문 바로가기
서버 공부

[스프링] @NoArgsConstructor & @AllArgsConstructor & @RequiredArgsConstructor

by 모선효 2024. 6. 2.

안녕하세요!

오늘은 @NoArgsConstructor 와 @AllArgsConstructor, @ RequiredArgsConstructor 개념에 대해 정리해보겠습니다.

 

위 세 가지는 모두 생성자를 자동으로 만들어주는 어노테이션입니다.

차이점은 어떤 값을 파라미터로 받는가 입니다.

 

@NoArgsConstructor

명시적으로 생성자를 선언해주지 않아도 파라미터가 없는 디폴트 생성자를 생성해줍니다.

@NoArgsConstructor
public class Member {
	private Long id;
    private String name;
}

// -> 아래와 같은 코드
public class Member {
	private Long id;
    private String name;
    
    public Member(){}
}

 

@NoArgsConstructor는 accessLevel (접근 제한자) 을 설정할 수 있습니다.

그리고 개발자분들은 이 중에서도 protected를 선호합니다.

이는 proxy 때문인데, 조만간 꼭 정리해보는 시간을 갖겠습니다..!

@AllArgsConstructor

클래스 내 모든 필드 값을 파라미터로 받는 생성자를 생성해줍니다.

모든 필드를 한 번에 초기화 해야 할 때 사용하기 좋습니다.

@AllArgsConstructor
public class Member {
	private Long id;
	private String name;
}

// -> 아래와 같은 코드
public class Member {
	private Long id;
	private String name;
    
    public Member(Long id, String name) {
    	this.id = id;
        this.name = name;
    }
}

 

@RequiredArgsConstructor

final 혹은 @NonNull로 선언된 필드만 파라미터로 받는 생성자를 생성합니다.

클래스가 의존하는 필드를 쉽게 초기화할 수 있다는 장점이 있습니다.

@RequiredArgsConstructor
public class Member {
	private Long id;
    private final String name;
    private final int age;
}

// -> 아래와 같은 코드
public class Member {
	private Long id;
    private final String name;
    private final int age;
    
    public Member(final String name, final int age) {
    	this.name = name;
        this.age = age;
    }
}

 

정리

- @NoArgsConstructor : 파라미터가 없는 디폴트 생성자 생성

- @AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자 생성

- @RequiredArgsConstructor : final 혹은 @NonNull이 선언된 필드만 파라미터로 받는 생성자 생성

 

💛 Reference

https://velog.io/@code-10/%EB%A1%AC%EB%B3%B5-AllNoArgsConstructor-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%95%8C%EA%B3%A0-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EC%9E%90