[Spring Boot] 회원관리 예제-도메인과 레포지토리 만들기

GyeongEun Kim·2021년 6월 11일
0

Spring Boot

목록 보기
6/12
post-thumbnail

본 게시물은 인프런 김영한 강사님의 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 듣고 개인 공부용으로 작성되었음을 알립니다.


도메인

비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨

도메인 패키지를 만들어 관리하고, Member class 생성

package hello.hellospring.domain;

public class Member {
    private Long id;
    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객체를 저장할 레포지토리 생성한다. 우선 인터페이스를 만들자. 인터페이스로 작성하는 이유는 어떤 데이터베이스를 사용하여 저장할지 아직 정하지 않았기 때문이다.

package hello.hellospring.repository;

import hello.hellospring.domain.Member;

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

public interface MemberRepository {
    Member save(Member member);
    Optional<Member> findById(Long id);
    Optional <Member> findByName(String name);
    List<Member> findAll();
}

Optional이란?
먼저 Optional객체는 wrapper 클래스로 모든 타입의 변수를 저장할 수 있다. Optional을 사용하면 null 예외처리를 간단하게 할 수 잇다. 해당 객체에 널값이 들어오더라도 내장 메소드로 NullPointerException 을 간단히 처리할 수 있게 해준다.
Optional 객체를 생성하려면 ofNullable() 메소드를 이용해야한다.
ex) Optional <String> test = Optional.ofNullable("test");

이제 MemberRepository 인터페이스를 상속받아 구현하는 MemoryMemberRepository를 작성하자.

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<>();
    private static long sequence =0L;

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

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

    @Override
    public Optional<Member> findByName(String name) {
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny(); //자바 람다식

    }

    @Override
    public List<Member> findAll() {
        return new ArrayList<>(store.values());
        //map에서 .values()를 사용하면 map의 전체내용을 collections로 반환
    }

    public void clearStore() {
        store.clear();
    }
}

람다식을 써본적이 없어 아직 이해하기 어렵다 ㅠ

profile
내가 보려고 쓰는 글

0개의 댓글