김영한님의 스프링 강의 학습/스프링 핵심 원리

#2 스프링 핵심 원리 이해 - 예제 만들기1

2022. 9. 28. 19:45
목차
  1. 설정
  2. 비즈니스 요구사항과 설계
  3. 회원 도메인 설계
  4. 회원 도메인 개발

해당 강의는 김영한 강사님의 유료 강의로, 아주 간략하게 배운 부분들을 짚고 넘어가는 식으로 작성하였습니다.

생략된 부분이 많습니다. 전체 소스코드 공개도 금지이므로 블로그에 부분적으로만 올릴 생각입니다.

강의를 보며 포스트잇을 붙이는 느낌으로 제가 보기 위해 작성하는 글이니

학습을 위해서라면 아래 링크의 강의를 직접 들으시는 것을 추천합니다!

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8#

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

 

설정

최근 InteliJ 버전이 Gradle을 통해 실행하는 것보다 자바로 바로 실행하는 것이 속도가 더 빠르기 때문에

다음과 같은 설정을 먼저 해준다.

 

 

비즈니스 요구사항과 설계

회원, 주문, 할인 이렇게 3가지 요구 사항이 있다.

 

회원

...

주문과 할인 정책

...

 

 

요구사항을 보면 회원 데이터, 할인 정책 같은 부분은 지금 결정하기가 어려운 부분인데,

이런 정책이 결정될 때 가지 개발을 무기한 연기할 수도 없는 노릇이다.

따라서 객체 지향 설계 방법을 사용해야한다.

인터페이스를 만들고 구현체를 언제든지 갈아끼울 수 있도록 설계해보자

 

 

회원 도메인 설계

회원 도메인 요구사항

...

> 회원 도메인 협력 관계

여기서 메모리 회원 저장소, DB 회원 저장소가 있는데,

메모리 회원 저장소는 간단하게 그냥 자바 코드로(메모리로) 회원 객체를 넣었다 뺐다(저장하고 불러오기) 할 수 있는

메모리 회원 저장소를 일단 만들어서 진행하기로 한 것이다.

이 메모리 회원 저장소는 테스트할 때도 쓰이고, 로컬에서 개발할 때도 쓰이고 할 것이다.

하지만 메모리이기 때문에 컴퓨터가 껐다 켜지면(서버가 재부팅되면) 데이터가 다 날아간다.

그래서 딱 개발용으로만 쓰는 것이다.

쓰다가 DB 회원저장소나 외부 회원 저장소가 구현이되면 그것으로 갈아끼우면 된다.

(역할[인터페이스]과 구현[Impl], 구현을 딱 갈아끼우는 것이다.)

 

> 회원 클래스 다이어그램

MemberRepository(인터페이스)에 대한 구현 클래스로 MemoryMemberRepository, DbMemberRepository

 

> 회원 객체 다이어그램

여기서 회원서비스 옆에 Impl 생략되어 있는데 Impl이다. ( 회원 서비스 : MemberServiceImpl )

이게 뭐냐면, 실제 서버에 올라오면 

객체간에 어떤, 메모리간에 참조들이 어떻게되는지 보여주는 것이다.

클라이언트는 회원 서비스(Impl)를 바라보고, 회원 서비스(Impl)는 메모리 회원 저장소를 바라보게 된다.

즉, 실제 객체 간의 메모리 참조를 보여주는 것이다.

서버가 떠서 클라이언트 객체가 실제 사용하는(참조하는) 주소값에 있는 인스턴스는 회원서비스(Impl)이다.

 

 

참고로, 

회원 도메인 협력 관계 는 기획자들도 볼 수 있는 그림이다.

이걸 바탕으로 개발자들이 구체화해서 클래스 다이어그램을 만들어낸다.

 

객체 다이어그램 에서는 클래스 다이어그램에서 동적으로 결정(서버가 뜰때 new해서 뭘 넣을거야) 되는

MemoryMemberRepository를 넣을지 DbMemberRepository를 넣을지와 같은 경우

클래스 다이어그램만으로 판단하기 어렵다.

그래서 이 객체다이어그램이라는 것이 따로 있다.

서버가 떠서 클라이언트가 실제로 사용하는 즉, 실제 new한 인스턴스 끼리의 참조라고 보면 된다.

 

 

회원 도메인 개발

(소스코드 작성 파트)

 

회원 엔티티 

>우선 회원 등급을 설정한다. enum으로 BASIC과 VIP를 만든다.

 

> 이제 회원 엔티티를 클래스로 만든다.

id, name, grade의 세 가지 속성을 가지고 있다.

생성자도 만든다. 그리고 getter, setter도 만든다.

 

회원 저장소

> MemberRepository 인터페이스를 만든다.

여기다 회원을 저장(save)하고 찾는 기능(findById)을 만든다.

 

> MemberRepository 에 대한 구현체를 만든다. (MemoryMemberRepository)

우선 memberId와 Member를 담을 Map (저장소)를 만든다.

(실무에서는 동시성 이슈가 있을 수 있기 때문에 여기서 Map을 쓰지 않는다.)

static으로 생성하는 이유는 싱글톤을 사용하는 것처럼 메모리 DB하나를 계속 공유해야해서 하나만 생성되게 만든 것이다.

그리고 우클릭 - Generate - Implement Methods

 

회원 서비스

> 이제 MemberService 인터페이스를 만든다.

회원가입(join)과 회원조회(findMember) 기능을 만든다.

 

> MemberService 구현체를 만든다. (MemberServiceImpl)

가입하고 회원을 찾으려면 MemberRepository 인터페이스가 필요하니 작성해준다.

Final 키워드 사용은 불변 객체로 선언하기 위해서다.

생성자 주입 이후에 변경이 불가능하도록 하여 추후 변경 여지를 막는 것이다.

회원가입(join)과 회원조회(findMember) @Override하고 코드를 작성한다.

 

여기서 이제 join해서 save를 호출하면, 다형성에 의해서

MemberRepository 인터페이스가 아니라 MemoryMemberRepository에 있는 save(Override한 save)가 호출된다.

(다형성 : 

하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다.

상위 클래스가 동일한 메시지로 하위 클래스들을 서로 다르게 동작시키는 객체 지향 원리이다.

다형성을 활용하면 부모 클래스가 자식 클래스의 동작 방식을 알 수 없어도

오버라이딩을 통해 자식 클래스를 접근할 수 있다. )

 

다음 글에선 회원 도메인 - 회원 가입 main을 이어서 작성하겠다!

'김영한님의 스프링 강의 학습 > 스프링 핵심 원리' 카테고리의 다른 글

#3 스프링 핵심 원리 이해2 - 객체지향 원리 적용2  (0) 2022.10.01
#3 스프링 핵심 원리 이해2 - 객체지향 원리 적용1  (1) 2022.09.30
#2 스프링 핵심 원리 이해 - 예제 만들기2  (0) 2022.09.29
#1 객체 지향 설계와 스프링  (0) 2022.07.07
#0 스프링 핵심 원리 - 기본편 목차  (0) 2022.07.06
  1. 설정
  2. 비즈니스 요구사항과 설계
  3. 회원 도메인 설계
  4. 회원 도메인 개발
'김영한님의 스프링 강의 학습/스프링 핵심 원리' 카테고리의 다른 글
  • #3 스프링 핵심 원리 이해2 - 객체지향 원리 적용1
  • #2 스프링 핵심 원리 이해 - 예제 만들기2
  • #1 객체 지향 설계와 스프링
  • #0 스프링 핵심 원리 - 기본편 목차
daramG
daramG
dotori Java
daramG
다람쥐의 개발 블로그
daramG
전체
오늘
어제
  • 분류 전체보기 (193)
    • Java 코딩테스트 공부 (67)
      • Java 알고리즘 공부 (37)
      • Java 백준 문제풀이 (27)
      • Java 코테 나만의 팁 (3)
    • SQL Study (0)
      • Programmers SQL 문제풀이 (0)
      • SQLP 준비 (0)
    • 웹 개발 지식 정리 (0)
      • Servlet (0)
      • Java 정리 (0)
    • 자바 스프링 (45)
      • 스프링 공부 (4)
      • 스프링 게시판 프로젝트 (6)
      • 부트 블로그 JPA 프로젝트 (30)
      • react & springboot (5)
      • 스프링 오류창고 (0)
      • 리액트 + 스프링 프로젝트 (0)
      • pf (0)
      • pfError (0)
    • React (6)
      • React 정리 (3)
      • React 오류 창고 (3)
    • C++ 코딩테스트 공부 (중단) (20)
      • c++ 백준 문제풀이 (15)
      • c++ 알고리즘 공부 (5)
    • Unity (3)
      • Unity 공부 (3)
    • WebRTC (2)
      • WebRTC 강의학습 정리 (0)
      • WebRTC 프로젝트 (1)
    • 김영한님의 스프링 강의 학습 (10)
      • 스프링 강의 목차 (1)
      • 인텔리제이 & 스프링 기초 (1)
      • 스프링 핵심 원리 (8)
    • 전공 지식 정리 (40)
      • interview (0)
      • Java (0)
      • 운영체제 (4)
      • 데이터베이스 설계 (10)
      • 소프트웨어 공학 (3)
      • 유닉스 (14)
      • 디지털 논리회로 (0)
      • 인공지능 (7)
      • js (0)
      • etc (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Java 백준 문제풀이
  • 백준 c++
  • 스프링 공부
  • 디지털 논리회로
  • 스프링부트 프로젝트
  • Java 코테 나만의 팁
  • java
  • 운영체제
  • 김영한 스프링 강의
  • 스프링부트 블로그 프로젝트
  • React&Spring 강의수강
  • Unity 공부
  • 부트 jpa 게시판 프로젝트
  • 김영한 스프링 입문
  • java 알고리즘
  • 스프링 프로젝트
  • 김영한의 스프링 핵심 원리
  • 인공지능
  • 노마드코더의 zoom클론코딩
  • 유닉스
  • C++ 알고리즘
  • 코테 알고리즘
  • 데이터베이스 설계
  • 무서운 이야기

최근 댓글

최근 글

hELLO · Designed By 정상우.
daramG
#2 스프링 핵심 원리 이해 - 예제 만들기1
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.