강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

명성님의 프로필 이미지
명성

작성한 질문수

엔티티 비즈니스 로직

작성

·

22

0

강의에서는 엔티티의 필드값을 setter를 통해서 설정해주었는데, 실무에서 setter를 사용하지 않고 수시로 필드의 값이 변경될 수 있는 엔티티를 다룬다면, 엔티티를 생성자를 통해서만 생성하고 필드의 값을 바꾸고 싶을 때는 리포지터리에 따로 수정 메소드를 만들어 주는 것이 맞나요? 아니면 위 같은 경우에는 setter의 사용을 예외적으로 혀용하나요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
명성님, 엔티티의 필드값 설정과 관련된 질문에 대해 도움을 드리겠습니다.

실무에서는 엔티티의 불변성을 유지하기 위해 setter를 사용하지 않는 것이 일반적인 권장사항입니다. 이는 변경이력 추적이나 동시성 문제가 생길 수 있는 상황에서 안정성을 높일 수 있기 때문입니다. 불변성을 유지하려면 다음과 같은 방법을 고려할 수 있습니다:

  1. 생성자를 통한 초기화: 엔티티의 모든 필드는 생성자를 통해 초기화할 수 있으며, 변경을 허용하지 않습니다.

  2. 특정 필드의 변경이 필요: 필드를 변경해야 하는 경우, 명시적인 메서드를 통해 필드의 값을 변경하는 방법을 사용할 수 있습니다. 예를 들어, 특정 비즈니스 로직에 의해 필드값이 변경되어야 하는 경우라면, updateFieldName과 같이 명시적인 메소드를 만들고 여기에 로직을 구현할 수 있습니다.

  3. 리포지터리에 별도 메소드 작성: 엔티티의 상태 변경이 데이터 저장소와 연관된다면 리포지터리에 메소드를 작성하여 엔티티의 일부 필드만 변경할 수 있습니다. 주의할 점은 트랜잭션의 일관성을 유지해야 한다는 것입니다.

이러한 접근 방식을 사용하여 setter를 피하면서도 불변성을 유지하며 엔티티의 필드값을 유연하게 다룰 수 있습니다.

추가적인 정보가 필요하시다면 아래의 정보를 참고하시면 좋을 것 같습니다:
- Spring Boot JPA 엔티티 클래스
- Spring Data JPA - Query by Example

질문에 도움이 되었기를 바랍니다! 추가적인 질문이 있으면 언제든지 문의해 주세요.

명성님의 프로필 이미지
명성

작성한 질문수

질문하기