-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
📌 Map 값 안전하게 반환하는 방법
Map<Long, Member> store에 저장된 값을 외부에 반환하는 findAll() 메서드를 작성할 때, 단순히 store.values()만 리턴하는 건 위험하다.
public Collection<Member> findAll() {
return store.values(); // ❌ 직접 참조 리턴 → 외부 수정 가능성
}- store.values()는 store 내부 데이터를 직접 참조하는 뷰(view) 컬렉션이다.
- 외부에서 findAll()로 받은 컬렉션을 clear(), remove() 등으로 조작하면 store 내부 데이터까지 영향을 받는다.
예시
Collection<Member> members = repository.findAll();
members.clear(); // store 내부 데이터까지 삭제됨 ❌해결방법
public List<Member> findAll() {
return new ArrayList<>(store.values()); // ✅ 복사본 리턴
}- store.values()의 복사본을 새로 만들어 반환.
- 외부에서 조작해도 내부 store에는 영향을 주지 않음.
- 즉, 캡슐화(Encapsulation)를 지키는 안전한 방법.