*인프런 강의 [스프링부트 입문]을 보고 따라하며 정리하는 글 입니다.
[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 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라는 것을 한 쌍으로 갖는 자료형이다.
keyvaluepeople | 사람 |
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 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