회원 객체

domain 패키지를 만들고 Member 클래스를 만듭니다.

Untitled

package hello.hellospring.domain;

public class Member {

    private Long id; //...1
    private String name; //...2

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  1. 데이터를 구분하기 위해서 시스템이 정하는 id 입니다.
  2. name은 그냥 회원 이름 입니다.

회원 리포지토리 인터페이스

회원 리포지토리 인터페이스를 만듭니다. repository 패키지를 만들고 인터페이스로 MemberRepository를 만듭니다.

Untitled

package hello.hellospring.repository;

import hello.hellospring.domain.Member;

import java.util.List;
import java.util.Optional;

public interface MemberRepository {
    Member save(Member member); //...1
    Optional<Member> findById(Long id); //...2
    Optional<Member> findByName(String name); //...3
    List<Member> findAll(); //...4
}
  1. 회원을 저장소에 저장합니다.

  2. id로 회원을 찾습니다.

    <aside> ❗ Long을 사용한 이유?


    new Member() 처럼 Member 객체를 생성하는 시점에는 id 값이 없어야 합니다. 그래서 없다는 표현을 null로 하는 것이 좋습니다.

    그런데 long을 사용하면 null을 입력할 수 없고, 0이라는 값을 넣어두어야 합니다.

    </aside>

  3. 이름으로 회원을 찾습니다.

  4. 지금까지 저장된 모든 회원 리스트를 반환해줍니다.

<aside> 💡 Optional이란?


findById나 findByName으로 가져오는데 null 일 수 있습니다. 없으면 null이 반환됩니다.

요즘에는 null을 그냥 반환하는 방식 보다는 Optional로 null을 감싸서 반환하는 방식을 선호합니다.

Optional<> 자세히

</aside>

회원 리포지토리 메모리 구현체

MemoryMemberRepository 클래스를 만들어줍니다.

Untitled

package hello.hellospring.repository;

import hello.hellospring.domain.Member;

import java.util.*;

public class MemoryMemberRepository implements MemberRepository{

    private static Map<Long, Member> store = new HashMap<>(); //...1
    private static long sequence = 0L; //...2

		//...3
    @Override
    public Member save(Member member) {
        member.setId(++sequence);
        store.put(member.getId(), member);
        return member;
    }

		//...4
    @Override
    public Optional<Member> findById(Long id) {
        return Optional.ofNullable(store.get(id));
    }

		//...5
    @Override
    public Optional<Member> findByName(String name) {
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();
    }

		//...6
    @Override
    public List<Member> findAll() {
        return new ArrayList<>(store.values());
    }
}
  1. save를 할 때 어딘가에 저장을 해야합니다. 여기서 Map을 사용하겠습니다.

  2. sequence는 0, 1, 2 이런 식으로 키 값을 생성해주는 것이라고 보면 됩니다.

  3. save

  4. findById

    ofNullable 자세히

  5. findByName

  6. findAll

<aside> 🌟 [TIP]

implements 후에 Option + Enter 하면 바로 메서드를 오버라이드 할 수 있습니다.

Untitled

</aside>

Reference