오늘이라도

[III. 회원 관리 예제 - 백엔드 개발] 9. 회원 도메인과 리포지토리 만들기 본문

인프런/스프링 입문 (김영한)

[III. 회원 관리 예제 - 백엔드 개발] 9. 회원 도메인과 리포지토리 만들기

upcake_ 2021. 12. 28. 20:27
반응형

https://github.com/upcake/hello-spring

강의 링크


1. 도메인, 리포지토리 클래스 파일 작성

package com.upcake.hellospring.domain;

public class Member {

    private Long id;        //시스템이 정하는 key 값
    private String name;    //고객의 이름

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

- Member.class

 

package com.upcake.hellospring.repository;

import com.upcake.hellospring.domain.Member;

import java.util.Optional;

public interface MemberRepository {
    Member save(Member member);
    Optional<Member> findById(Long id); //Java 8에 추가된 null을 다루기 위한 기능, id가 null이면 null을 반환한다
    Optional<Member> findByName(String name);
    List<Member> findAll();
}

- MemberRepository.class

 

package com.upcake.hellospring.repository;

import com.upcake.hellospring.domain.Member;

import java.util.*;

public class MemoryMemberRepository implements MemberRepository {

    private static Map<Long, Member> store = new HashMap<>();
    private static long sequence = 0L;  //0 1 2 키 값 생성해주는 것

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

    @Override
    public Optional<Member> findById(Long id) {
        //옛날에는 null일 가능성이 있어도 그냥 반환했는데, 요즘에는 Optional.ofNullable()로 감싸준다.
        return Optional.ofNullable(store.get(id));
    }

    @Override
    public Optional<Member> findByName(String name) {
        //store에서 loop를 돌면서 하나라도 찾아지면 바로 반환
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();
    }

    @Override
    public List<Member> findAll() {
        return new ArrayList<>(store.values());
    }
}

- MemoryMemberRepository.class

반응형