MemberRepository의 객체 인스턴스 하나 생성하지만 , 생성자는 private으로 설정함으로써 외부로부터 생성을 막아서 인스턴스를 하나로 유지한다. 인스턴스를 조회/저장/삭제 하는 메서드들만 Public으로 열어둔다.
회원 id, member 객체 인스턴스 저장할 자료구조는 HashMap으로 저장한다!
HashMap<Long,Member> //<id,Member>
packagehello.servlet.domain.member;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;publicclassMemberRepository {//key:id, value:Member//static으로 했기 때문에 아무리 MemberRepository가 많아도 딱 하나만 생성된다!?privatestaticMap<Long,Member> store =newHashMap<>();privatestaticlong sequence =0L;privatestaticfinalMemberRepository instance =newMemberRepository();//private 생성자로 외부로부터 생성을 막고 getInstance만을 통해서 객체를 얻을 수 있도록.publicstaticMemberRepositorygetInstance(){return instance; }privateMemberRepository(){ }publicMembersave(Member member){member.setId(++sequence);store.put(member.getId(),member);return member; }publicMemberfindById(Long id){returnstore.get(id); }publicList<Member> findAll(){//store에 있는 값들이 조작되지 않기 위해 배열리스트로 만들어서 넘겨주도록한다!//물론 참조값을 통해 수정이 가능하기도 하지만 store 자체를 보호하기 위함이라고 함.returnnewArrayList<>(store.values()); }publicvoidclearStore(){store.clear(); }}