안녕하세요.
이번 글에서는 @Entity객체에 왜 @AllArgsConstructor와 @NoArgsConstructor가 필요한지 알아보고자 합니다.
일단, 두 어노테이션은 객체의 생성자를 만들어줍니다.
생성자의 정의는 위키피디아에서 다음과 같이 정의되어 있습니다.
생성자(영어:constructor, 혹은 약자로 ctor)는 객체 지향 프로그래밍에서 객체의 초기화를 담당하는 서브루틴을 가리킨다. 생성자는 객체가 처음 생성될 때 호출되어 멤버 변수를 초기화하고, 필요에 따라 자원을 할당하기도 한다. 객체의 생성 시에 호출되기 때문에 생성자라는 이름이 붙었다.
@AllArgsConstructor는 객체의 모든 필드를 가지는 생성자를 자동으로 만들어주는 lombok 어노테이션입니다.
@NoArgsConstructor는 객체의 어떤 필드도 가지지 않는 기본 생성자를 자동으로 만들어주는 lombok 어노테이션입니다.
사실, @Entity가 선언된 객체에서는 @NoArgsConstructor가 없어도, 생성자를 객체 안에 선언해 주지 않아도 컴파일러가 자동으로 만들어줍니다.
그런데, 전체 필드를 대상으로 하는 생성자는 객체 안에 직접 생성해 주어야 합니다.
그래서 @AllArgsConstructor는 선언을 해주어야 합니다.
그렇다고 해서, @NoArgsConstructor를 빼고, @AllArgsConstructor만을 객체에 선언해 줄 경우에는 컴파일러는 우선적으로 전체 필드를 가지는 생성자를 우선적으로 생성하기 때문에, 기본 생성자 호출을 필요로 할 경우에도 전체 필드를 가지는 생성자가 호출되어 버립니다. 그럴 경우 에러가 발생합니다.
이상으로, @Entity 클래스에 @AllArgsConstructor와 @NoArgsConstructor를 클래스에 함께 선언해야 하는 이유를 알아보았습니다.
틀린 부분이 있으면,, 댓글로 알려주세요! 많이 부족합니다.
'SpringBoot' 카테고리의 다른 글
import와 의존성 주입은 다른가? (0) | 2020.08.23 |
---|---|
properties 두 개 설정하기 (0) | 2020.08.14 |
[면접]springboot 예상 질문 (0) | 2020.07.30 |
[Springboot+Docker+AWSLightsail]애플리케이션 배포하기 (1) | 2020.07.25 |
웹 상태코드 메시지 (0) | 2020.07.11 |
댓글