본문 바로가기
SpringBoot

왜 @Entity에는 @AllArgsConstructor와 @NoArgsConstructor가 필요한가?

by devebucks 2020. 8. 8.
728x90

안녕하세요.

이번 글에서는 @Entity객체에 왜 @AllArgsConstructor와 @NoArgsConstructor가 필요한지 알아보고자 합니다.

Entity 객체에서 사용되는 어노테이션

일단, 두 어노테이션은 객체의 생성자를 만들어줍니다. 

생성자의 정의는 위키피디아에서 다음과 같이 정의되어 있습니다.

생성자(영어:constructor, 혹은 약자로 ctor)는 객체 지향 프로그래밍에서 객체의 초기화를 담당하는 서브루틴을 가리킨다. 생성자는 객체가 처음 생성될 때 호출되어 멤버 변수를 초기화하고, 필요에 따라 자원을 할당하기도 한다. 객체의 생성 시에 호출되기 때문에 생성자라는 이름이 붙었다.

@AllArgsConstructor는 객체의 모든 필드를 가지는 생성자를 자동으로 만들어주는 lombok 어노테이션입니다.

@NoArgsConstructor는 객체의 어떤 필드도 가지지 않는 기본 생성자를 자동으로 만들어주는 lombok 어노테이션입니다.

 

사실, @Entity가 선언된 객체에서는 @NoArgsConstructor가 없어도, 생성자를 객체 안에 선언해 주지 않아도 컴파일러가 자동으로 만들어줍니다.

 

그런데, 전체 필드를 대상으로 하는 생성자는 객체 안에 직접 생성해 주어야 합니다.

 

그래서 @AllArgsConstructor는 선언을 해주어야 합니다.

 

그렇다고 해서, @NoArgsConstructor를 빼고, @AllArgsConstructor만을 객체에 선언해 줄 경우에는 컴파일러는 우선적으로 전체 필드를 가지는 생성자를 우선적으로 생성하기 때문에, 기본 생성자 호출을 필요로 할 경우에도 전체 필드를 가지는 생성자가 호출되어 버립니다. 그럴 경우 에러가 발생합니다.

 

이상으로, @Entity 클래스에 @AllArgsConstructor와 @NoArgsConstructor를 클래스에 함께 선언해야 하는 이유를 알아보았습니다.

틀린 부분이 있으면,, 댓글로 알려주세요! 많이 부족합니다.

728x90

댓글