회원 도메인 요구사항
- 회원을 가입하고 조회할 수 있다.
- 회원은 일반과 VIP 두 가지 등급이 있다.
- 회원 데이터는 자체 DB를 구축할 수도 있고, 외부 시스템과 연동할 수도 있다.(미확정)
- 회원 저장소 인터페이스를 만들어 놓고 각각의 구현체를 만들어 갈아끼우는 형식으로 진행
- 클래스 다이어그램은 실제 서버를 실행하지 않고 클래스만 분석해서 나타낸 그림 ==> 정적
- 구현체인 MemoryMemberRepository / DbMemberRepository 중 어떤 걸 선택할지는 동적으로 선택해야함.
- MemberRepository memberRepository = new MemoryMemberRepository(); 로 결정하는 것을 의미
- 따라서 이것만으로 판단하기는 어려움
- 그래서 객체 다이어그램을 통해 실제 어떤것을 사용할 것인지 나타낸다.
- 우리는 메모리를 통해 저장소를 구현한 후, 나중에 DB가 결정되면 갈아끼울 것이기 때문에 현재의 객체 다이어그램은 위와 같다.
개발📣
member 패키지를 만들고 enum클래스 Grade를 만들어 회원 등급 두가지 VIP와 일반(BASIC)회원을 넣어준다.
+enum은 열거형으로써
1. 클래스처럼 보이게 하는 상수
2. 서로 관련있는 상수들끼리 모아 상수들을 대표할 수 있는 이름으로 타입을 정의하는 것
3. Enum 클래스 형을 기반으로 한 클래스형 선언
자세한 내용은 아래 글을 참조
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 |