작성
·
187
0
@Data
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class MemberDto {
private String username;
private int age;
/* public MemberDto(String username,int age){
this.username = username;
this. age =age;
}*/
}
롬복 @All Args 가 아래 주석처리된 생성자 코드를 대체한다고 알 고 있는데
빨간줄이 나오는 이유가 무엇일까요? 그냥 All Args 빼고 직접 생성자 입력하면(주석해제) 하면 잘됩니당.
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
dionisos198님의 질문에 대해서, 롬복의 @AllArgsConstructor
어노테이션이 제공하는 모든 인자를 가진 생성자가 실제로 정의되었음에도 불구하고, JPA의 createQuery
메서드를 통해 DTO를 직접 생성할 때 “Cannot resolve constructor” 오류가 발생하는 상황에 대해 논의하고자 합니다.
이 문제는 롬복이 컴파일 시점에 생성자를 생성해주는 방식 때문에 IDE나 컴파일러에서 롬복이 생성해주는 생성자를 적시에 인식하지 못하는 경우 발생할 수 있습니다. 특히, JPA의 createQuery
메서드는 실행 시점(런타임)에 쿼리와 매핑되는 DTO의 생성자를 찾게 되는데, 롬복에 의해 생성된 생성자는 실제 소스 코드에 직접적으로 명시되어 있지 않기 때문에 IDE나 빌드 과정에서 오류를 판단하기 어려울 수 있습니다.
이와 관련하여 유사한 상황에서 롬복을 사용하여 DTO의 생성자를 정의하는 방법과 관련된 질문 링크를 참고해드릴 수 있습니다:
@AllArgsConstructor
와 @NoArgsConstructor
등 롬복의 어노테이션 사용에 관한 논의가 있습니다. 롬복 어노테이션을 사용할 때 주의할 점 등에 관한 설명이 포함되어 있어 공부에 도움이 될 것입니다.사용하고 계신 환경에서 롬복 어노테이션이 올바르게 작동하도록 설정이 되어 있는지 확인해보시길 바랍니다. 예를 들어, IDE에 롬복 플러그인이 설치되어 있고, 빌드 도구에 롬복 의존성이 적절히 추가되었는지 등을 체크해보세요.
JPA의 createQuery
메서드를 사용할 때는 롬복 대신 명시적으로 생성자를 코드에 정의하는 것이 더 안정적일 수 있습니다. 이 경우 IDE에서 오류를 인식하지 못하고, 런타임 시에 예상대로 작동할 것입니다.
롬복의 동작 방식과 IDE, 빌드 시스템 간의 상호작용을 이해하는 것이 중요합니다. 때때로 롬복의 편리함을 100% 활용하기 위해서는 개발 환경을 적절히 설정해야 할 필요가 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.