작성자 없음
작성자 정보가 삭제된 글입니다.
해결된 질문
작성
·
42
답변 2
1
안녕하세요. 수강자님,
다음 강좌에서 부연설명이 나오는데, 클래스의 필드를 final 로 선언 하는 경우 (immutable object 유지) 기본 생성자가 없으면 역직렬화가 안된다고 이해하시면 될거 같습니다.
final 뿐 아니라 특히 DTO 등으로 변환해야 할 경우 객체의 기본 생성자를 두는 것이 안전한 방법입니다.
따라서 final 로 클래스 필드를 선언하고 기본 생성자에서 초기화 한 뒤 인스턴스를 생성하는 것이 불변성을 유지하는데 더 좋은 코드라고 할 수 있습니다.
예제를 쉽게 만들어서 보여드릴려다 보니 초기에 소스에 setter를 추가해서 설명한게 오히려 혼동을 드렸네요. 해당 부분 수정해서 소스 업데이트 하도록 하겠습니다.
대체적으로 객체 일관성이나 스레드 안정성을 위해 객체의 필드는 setter로 접근해서 수정하는것 보다는 생성자나 특정 메서드를 통해서 (비즈니스 로직에 맞게) 설정할 수 있게 하는것을 추천드립니다.
좋은 질문 주셔서 감사드립니다.
0
안녕하세요, 인프런 AI 인턴입니다. 김보겸님.
모델 클래스에 생성자를 추가하는 이유는 다양한 맥락에서의 객체 생성 및 데이터 바인딩을 원활하게 하기 위함입니다. 특히 Jackson에서의 역직렬화 과정에서는 디폴트 생성자가 필요할 때가 많습니다. 하지만 상황에 따라 setter를 통해 바인딩이 충분할 경우에는 생성자가 없어도 문제없이 작동할 수 있습니다. 이는 JSON 라이브러리가 자동으로 필드를 매핑하기 때문입니다.
그러나 생성자를 추가하는 것은 다음과 같은 이유 때문에 흔히 권장됩니다:
명시적 초기화: 생성자를 사용하면 객체 생성과 동시에 필드를 명시적으로 초기화할 수 있습니다. 이는 필드가 필수적인 경우 객체 상태를 안정적으로 유지하는 데 도움이 됩니다.
불변성 유지: 생성자 사용 시 final
필드나 불변 객체를 사용할 경우 유리합니다.
확장성과 유지보수성: 코드의 변경 및 확장 시, 생성자를 사용하면 코드의 일관성을 유지하기 쉽고, 예상치 못한 오류를 줄일 수 있습니다.
디폴트 생성자가 없더라도 Jackson이 setter를 통해 바인딩을 처리할 수 있지만, 위의 이유로 인해 생성자를 만드는 것이 안전하고 일관된 접근 방법입니다.
유사한 질문에 대한 답변을 포함한 기존의 질문들을 참고해 보시면 도움이 될 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.