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

비가싫어요님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

엔티티 설계시 주의점

14분대 정도에서의 설명과 관련하여 질문이 있습니다!

22.10.03 11:08 작성

·

265

1

영한님께서 컬렉션을 처음에 만들어두고 바꾸지 말라고 하신 뜻이 컬렉션의 종류를 바꾸지 말라고 하신건가요..?

아니면 컬렉션의 값을 처음에 생성할 때 한 번 만들어두고 그 다음에 건드리지 말라고 하신건가요?

답변 1

3

codesweaver님의 프로필 이미지

2022. 10. 03. 12:22

안녕하세요, JUNN 님! 공식 서포터즈 codesweaver 입니다.

컬렉션을 참조하고 있는 멤버변수를, 다른 변수로 변경하지 못하도록 막으라는 의미입니다. 컬렉션 안에 값을 넣거나 삭제하는 것은 상관없습니다.

 

가량 다음과 같이 members 가 List<Member>를 참조하도록 생성하였습니다.

List<Member> members = new ArrayList();

 

이 상황에서 아래와같은 members 자체를 변경할 수 있는 setter를 제공하지 말라는 이야기 입니다.

public void setMember(List<Member> members) {

this.members = members;

}

List<Member> members는 하이버네이트에 의해 애플리케이션 시작 시 다른 프록시 객체로 감싸서 관리하는데, 이 때 누군가가 setter 메서드로 일반 콜렉션 재할당 하면, 하이버네이트가 정상 작동을 보증할 수 없기 때문입니다.

 

아래처럼 콜렉션을 사용하는 것은 괜찮습니다.

public void addMember(Member member) {

this.members.add(member);

}



감사합니다.

비가싫어요님의 프로필 이미지

2022. 10. 03. 15:14

감사합니다!