패스잇
백엔드 개발 · 기초

JPA에서 엔티티 설계 시 @Setter 사용을 지양하는 이유와 대안은 무엇인가요?

힌트 · 객체의 일관성 유지와 비즈니스 메서드 사용을 생각해보세요.

불변성객체지향Side-Effect도메인_로직생성자

모범답안

JPA 엔티티 설계 시 @Setter를 지양하는 이유는 객체의 일관성을 해칠 수 있기 때문입니다. @Setter를 무분별하게 사용하면 객체의 상태를 예측하기 어려워지고, Side-Effect가 발생할 가능성이 높아집니다.

대안으로는 다음과 같은 방법들이 있습니다.

  1. 생성자를 통한 초기화: 객체 생성 시 필요한 값을 받아 불변성을 확보합니다.
  2. 비즈니스 로직 메서드 활용: 엔티티 내에서 상태를 변경하는 메서드를 직접 정의하여, 객체의 상태 변화를 제어하고 도메인 로직을 캡슐화합니다. 예를 들어, order.cancel() 메서드처럼 객체의 상태 변화를 명확하게 표현하는 것이죠.
  3. 필요한 경우 제한적인 Setter 사용: 정말 필요한 경우에만, 그리고 그 이유를 명확히 설명할 수 있을 때만 @Setter를 사용합니다.

이러한 방법을 통해 객체지향적인 설계를 유지하고, 데이터의 일관성을 확보할 수 있습니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 JPA / ORM 면접 질문

← JPA / ORM 면접 질문 전체 보기