[스프링 입문] 3 - (1) 비즈니스 요구사항, (2) 회원 도메인과 리포지토리
[비지니스 요구사항]
- 데이터: 회원 ID, 이름
- 기능: 회원 등록, 조회
▶ 웹 애플리케이션 계층 구조
컨트롤러 | 웹 MVC의 컨트롤러 |
서비스 | 도메인을 이용해 핵심 비즈니스 로직 동작하도록 구현 |
도메인 | 비즈니스 도메인 |
리포지토리 | 도메인 객체를 DB에 저장하고 관리 |
[회원 도메인과 리포지토리 만들기]
1. 회원 domain 만들기
src - main - java - hello.hellospring 우클릭 → New - Package 클릭 → domain 입력 → domain 우클릭
→ New - Java Class → Member 입력 → 강의자료 코드 붙여넣기
☞ private Long id : 클래스 안에서 찾기
☞ private String name : 클래스 안에서 찾기
☞ Long getId() : id getter
☞ return id : id 호출
☞ setId(Long id) : id setter
☞ this.id = id : id 객체 호출
☞ String getName() : Name getter
☞ return name : name 호출
☞ setName(String name) : Name setter
☞ this.name = name : name 객체 호출
2. 회원 repository 인터페이스 만들기
src - main - java - hello.he llospring 우클릭 → New - Package 클릭 → repository 입력 →
repository 우클릭 → New - Java Class 클릭 → MemberRepository 입력 - Interface 클릭 →
강의자료 코드 붙여넣기
☞ Member save(Member
member)
: 회원 저장
☞ Optional<Member> findById
: id로 회원 찾기
☞ Optional<Member>
findByName
: name으로 회원 찾기
☞List<Member> findAll
: 저장된 모든 회원 list로 반환
잠깐, 의문점
Optional은 왜 사용하는가
: NPE (NullPointerException) 을 피하기 위해서 사용한다
NPE를 피하려면 null 여부를 검사해야 하는데, 코드가 복잡해지고 번거로울 수 있다
그래서 null 대신 Optional을 이용해 감싸서 반환한다
이 때 알아둘 단축키!! ((3)-API 참고)
1. Generate 에서 Getter and Setter
☞ Fn + Alt + insert + N 입력 후 getter 검색
3. 회원 repository 클래스 만들기
src - main - java - hello.he llospring → repository 우클릭 → New - Java Class 클릭 →
MemoryMemberRepository 입력하고 Class 클릭 → 강의자료 코드 붙여넣기
☞ implements MemberRespository : Alt + Enter → Implements method 클릭 → 전부 다 선택, ok 클릭
☞ private static Map<Long, Member> store = new HaskMap<>() : Map 이란 회원 id 저장할 곳
Ctrl + Space → Map<k, v> 택
☞ private static long sepuence = 0L : 키 값 생성
☞ save(Member member) : 멤버 저장
☞ member.setId(++sequence) : set 할 때 마다 sequence 값 하나씩 올려주기
(domain-Member 보면 name은 모두 넘어온 상태
name은 내가 적는 값 id는 시스템이 정해주는 값으로서
id는 이부분에서 설정)
☞ store.put(member.getId(), member) : id Map에 저장
☞ return member : 저장 결과 반환
☞ return Optional.ofNullable(store.get(id)) : store에서 꺼내서 id넣기
결과가 없으면 null되기 때문에 optional 사용
☞ return store.values().stream() : stream 객체 생성
☞ .filter(member → getName().equals(name)) : filter 로 원하는 데이터 뽑는다
member에서 name찾아서 동일한 name 있는지 탐색
(람다식)
☞ .findAny() : Map에서 돌면서 찾으면 바로 반환
☞ return new ArrayList<>(store.values()) : 스토어에 있는 values ( = Member ) List에 반환
잠깐, 의문점
HashMap이란
: map선언은 Map< , > map= new HashMap<>();
Map은 인터 페이스라서 선언만 가능하고 객체 생성이 안된다
자식인 HashMap로 객체를 생성
HashMap 은 Key와 Value를 묶어 하나의 Entry 형식으로 저장
stream? 람다식? 그게 뭐죠
: stream은 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자
코드가 간결해서 사용
: 람다식은 매개변수 화살표(→)를 이용해 사용
람다식을 사용할 경우 코드가 훨씬 간결해지는 장점이 있다
이 때 알아둘 단축키!!
1. 자동완성
☞ Ctrl + Space
2. Import 자동주입
☞ Alt + Enter
[출처] 김영한 강사님 인프런 스프링 입문
[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세
www.inflearn.com