Spring/Spring Core

회원 도메인 설계와 개발

민철킹 2021. 3. 2. 21:40

회원 도메인 요구사항

  • 회원을 가입하고 조회할 수 있다.
  • 회원은 일반과 VIP 두 가지 등급이 있다.
  • 회원 데이터는 자체 DB를 구축할 수도 있고, 외부 시스템과 연동할 수도 있다.(미확정)

 

  • 회원 저장소 인터페이스를 만들어 놓고 각각의 구현체를 만들어 갈아끼우는 형식으로 진행

 

 

  • 클래스 다이어그램은 실제 서버를 실행하지 않고 클래스만 분석해서 나타낸 그림 ==> 정적
  • 구현체인 MemoryMemberRepository / DbMemberRepository 중 어떤 걸 선택할지는 동적으로 선택해야함.
    • MemberRepository memberRepository = new MemoryMemberRepository(); 로 결정하는 것을 의미
  • 따라서 이것만으로 판단하기는 어려움

 

  • 그래서 객체 다이어그램을 통해 실제 어떤것을 사용할 것인지 나타낸다.
  • 우리는 메모리를 통해 저장소를 구현한 후, 나중에 DB가 결정되면 갈아끼울 것이기 때문에 현재의 객체 다이어그램은 위와 같다.

 


개발📣

 

 

member 패키지를 만들고 enum클래스 Grade를 만들어 회원 등급 두가지 VIP와 일반(BASIC)회원을 넣어준다.

 

+enum은 열거형으로써

1. 클래스처럼 보이게 하는 상수

2. 서로 관련있는 상수들끼리 모아 상수들을 대표할 수 있는 이름으로 타입을 정의하는 것

3. Enum 클래스 형을 기반으로 한 클래스형 선언 

자세한 내용은 아래 글을 참조

minchul-son.tistory.com/260

 

자바 enum❓❓

enum이란 무엇일까❓❓❓ Enum이란 Enumeration의 앞 글자로 열거라는 의미를 갖는다. 관련이 있는 상수들의 집합입니다. 자바에서는 final로 String과 같은 문자열이나 숫자들을 나타내는 기본 자료형

minchul-son.tistory.com

 

Grade 클래스

 

 

 

 

Member 클래스

  • 회원은 ID, 이름, 등급을 가진다.
  • 생성자와 getter / setter를 만들어준다.

 

 

 

 

⭐회원 저장소 interface⭐

 

  • 회원을 저장소에 저장하는 save메소드
  • Id로 저장된 회원을 찾는 findById메소드

 

 

저장소 구현체 구현

  • 현재는 DB연동 전에 메모리에 저장하고 꺼내는 식으로 저장소를 구현할 것이다.
  • Map은 간단히 얘기하면 key-value값을 가지고 있는 리스트라고 생각하면 편할것이다.
    • python에 dictionary와 매우 유사하다.
  • save메소드를 통해 store에 회원 정보를 넣고 findById메소드를 통해 id값으로 정보를 찾는다.
  • 원래는 null값 처리와 같은 예외처리를 해야하지만 현재 본 예제에서는 주된 목적이 아니므로 넘어가려한다.
  • 또한 실무에서 Map를 사용하려한다면 HashMap이 아닌 ConcurrentHashMap을 사용해야한다.(동시성 문제)
    • HashMap에는 key-value에 null값을 넣을 수 있지만 ConcurrentHashMap에서는 불가능
  • 현재 우리는 순수 java코드로만 다형성을 이용하여 간단한 예제를 구현하고 이를 통해 SOLID원칙을 지킬 수 있는지를 확인하려한다.

 

 

 

⭐회원 서비스 interface⭐

  • 회원가입, 회원조회

 

 

회원 서비스 구현체 구현

  • MemberRepository에 앞서 만들어 둔 MemoryMemberRepository를 동적으로 넣어줌
  • 회원가입 - save 호출
  • 회원조회 - findById 호출

 

 

 

 

 

 

반응형

'Spring > Spring Core' 카테고리의 다른 글

주문과 할인 도메인 설계 / 개발  (0) 2021.03.03
회원 도메인 실행과 테스트  (0) 2021.03.03
비지니스 요구사항과 설계  (0) 2021.03.02
들어가며  (0) 2021.03.02
객체 지향 설계와 스프링  (0) 2021.03.01