# 회원관리 웹 애플리케이션 요구사항

간단한 웹 애플리케이션을 만들어보자.

회원 정보&#x20;

1. 이름 : username
2. 나이 : age
3. 회원 아이디 : id

구현\
id, username, age 필드를 설정하고, 생성자도 2개 생성한다!\
이 때 필드 변수들은 **private**으로 설정하고, 생성자들만 **public**으로 한다!

```java
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;
    }
}

```

기능 요구사항

1. 회원 저장 : **save()**
2. 회원 목록 조회 : **findById(), findAll()**
3. 회원 전체 삭제 : **clearStore()**

**구현**

1. 회원 도메인 모델 생성 한것처럼 필드 변수들 private으로 설정
2. MemberRepository의 객체 인스턴스 하나 생성하지만 , 생성자는 private으로 설정함으로써 외부로부터 생성을 막아서 인스턴스를 하나로 유지한다. 인스턴스를 조회/저장/삭제 하는 메서드들만 Public으로 열어둔다.
3. 회원 id, member 객체 인스턴스 저장할 자료구조는 HashMap으로 저장한다!\
   HashMap\<Long,Member> //\<id,Member>

```java
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();
    }
}

```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://heunnajo.gitbook.io/mvc/3.-jsp-mvc/undefined.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
