본문 바로가기
Spring/스프링 입문

[스프링 입문] 3 - (1) 비즈니스 요구사항, (2) 회원 도메인과 리포지토리

by Poorm 푸름 2023. 8. 1.

[비지니스 요구사항]

 

- 데이터: 회원 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

 

 

[출처] 김영한 강사님 인프런 스프링 입문 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

www.inflearn.com