Skip to content

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

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions