Skip to content

TIL -2025-06-14 [Map 값 안전하게 반환하는 방법] #82

@soheeGit

Description

@soheeGit

📌 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)를 지키는 안전한 방법.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions