구현
id, username, age 필드를 설정하고, 생성자도 2개 생성한다!
이 때 필드 변수들은 private으로 설정하고, 생성자들만 public으로 한다!
package hello.servlet.domain.member;
import lombok.Getter;
import lombok.Setter;
@Getter @Setter
public class Member {
private Long id;
private String username;
private int age;
public Member() {
}
public Member(String username, int age) {
this.username = username;
this.age = age;
}
}
기능 요구사항
회원 저장 : save()
회원 목록 조회 : findById(), findAll()
회원 전체 삭제 : clearStore()
구현
회원 도메인 모델 생성 한것처럼 필드 변수들 private으로 설정
MemberRepository의 객체 인스턴스 하나 생성하지만 , 생성자는 private으로 설정함으로써 외부로부터 생성을 막아서 인스턴스를 하나로 유지한다. 인스턴스를 조회/저장/삭제 하는 메서드들만 Public으로 열어둔다.
회원 id, member 객체 인스턴스 저장할 자료구조는 HashMap으로 저장한다!
HashMap<Long,Member> //<id,Member>
package hello.servlet.domain.member;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MemberRepository {
//key:id, value:Member
//static으로 했기 때문에 아무리 MemberRepository가 많아도 딱 하나만 생성된다!?
private static Map<Long,Member> store = new HashMap<>();
private static long sequence = 0L;
private static final MemberRepository instance = new MemberRepository();
//private 생성자로 외부로부터 생성을 막고 getInstance만을 통해서 객체를 얻을 수 있도록.
public static MemberRepository getInstance(){
return instance;
}
private MemberRepository(){
}
public Member save(Member member){
member.setId(++sequence);
store.put(member.getId(),member);
return member;
}
public Member findById(Long id){
return store.get(id);
}
public List<Member> findAll(){
//store에 있는 값들이 조작되지 않기 위해 배열리스트로 만들어서 넘겨주도록한다!
//물론 참조값을 통해 수정이 가능하기도 하지만 store 자체를 보호하기 위함이라고 함.
return new ArrayList<>(store.values());
}
public void clearStore(){
store.clear();
}
}