카테고리 없음

스프링 부트 - 회원 관리 예제

딤섬뮨 2022. 3. 7. 10:13
728x90

*인프런 강의 [스프링부트 입문]을 보고 따라하며 정리하는 글 입니다.

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 대시보드 - 인프런 | 강의 (inflearn.com)

본격적으로 서비스를 하나 구현 해본다.

 

웹 어플리케이션 계층 구조는 다음과 같다.

 

<Domain>

도메인은 데이터베이스에서 속성의 종류?를 정의 해놓은 파일이라고 생각하면 된다.

Getter와 Setter도 추가해준다.

 

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

 

<Repository>

데이터베이스에 접근하고, 도메인 객체를 DB에 저장하고 관리해준다.

이 부분은 node.js의 User랑 비슷한 역할인듯 하다.

DB와 서비스 사이의 인터페이스니깐 interface로 정의를 하여 준다.

Member save(Member member) 문법이 뭘 의미하는지 알고 싶은데 잘 안나온다.대충 무슨 의미인지는 아는데..

optional은 null값이 있어도 반환해주는 그런 아이

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

 

아직은 DB선정이 안되었다는 가정하에 , MemoryMemberRepository를 이용하여 저장소 구현

Map이란?

"사람"을 예로 들면 누구든지 "이름" = "홍길동", "생일" = "몇 월 며칠" 등으로 구분할 수 있다. 자바의 맵(Map)은 이러한 대응관계를 쉽게 표현할 수 있게 해 주는 자료형이다. 이것은 요즘 나오는 대부분의 언어들도 갖고 있는 자료형으로 Associative array, Hash라고도 불린다.

맵(Map)은 사전(dictionary)과 비슷하다. 즉, people 이란 단어에 "사람", baseball 이라는 단어에 "야구"라는 뜻이 부합되듯이 Map은 Key와 Value라는 것을 한 쌍으로 갖는 자료형이다.

keyvalue
people 사람
baseball 야구

Map은 리스트나 배열처럼 순차적으로(sequential) 해당 요소 값을 구하지 않고 key를 통해 value를 얻는다. 맵(Map)의 가장 큰 특징이라면 key로 value를 얻어낸다는 점이다. baseball이란 단어의 뜻을 찾기 위해서 사전의 내용을 순차적으로 모두 검색하는 것이 아니라 baseball이라는 단어가 있는 곳만을 펼쳐보는 것이다.

03-08 맵 (Map) - 점프 투 자바 (wikidocs.net)

 

03-08 맵 (Map)

 

wikidocs.net

 

이 Map으로 저장소를 정의해 준다. HashMap사용법은 다음과 같다.

 

Create a HashMap object called capitalCities that will store String keys and String values:

import java.util.HashMap; // import the HashMap class

HashMap<String, String> capitalCities = new HashMap<String, String>();

Java HashMap (w3schools.com)

 

Java HashMap

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

<Memory Member Repository>

방금 member reposiory는 interface였으면 여기서 세부적으로 구현을 하여준다

자세한 부분은 주석을 참조하자!

package hello.hellospring.repository;

import hello.hellospring.domain.Member;

import java.util.*;

public class MemoryMemberRepository implements MemberRepository{
    //Map정의 store는임의로 우리가 붙여준 이름
    private static Map<Long,Member> store = new HashMap<>();
    //번호를 붙이기 위한 상수 sequence 정의
    private static long sequence = 0L;

    @Override
    public Member save(Member member) {
        //name은 넘어오고 id만 정의
        member.setId(++sequence);
        //맵 형태의 간이 인터페이스에 정보 넣기
        store.put(member.getId(),member);
        return member;
    }

    @Override
    public Optional<Member> findById(Long id) {
        //store에 있는 id를 가지고옴.->map함수 get
        return Optional.ofNullable(store.get(id));

    }

    @Override
    public Optional<Member> findByName(String name) {
        //자바의 한 기능 stream 어떤 조건에 맞는 값을 얻을 수 있다.
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();
    }

    @Override
    public List<Member> findAll() {
        //리스트 형식이니 map을 리스트로 형 변환 후 반환해줌.
        return new ArrayList<>(store.values());
        )
    }
}

sienna011022/springboot-practice (github.com)

 

 

GitHub - sienna011022/springboot-practice

Contribute to sienna011022/springboot-practice development by creating an account on GitHub.

github.com

 

728x90