[Spring Core Basic] 2.스프링 핵심 원리 이해1 - 예제 만들기
16911 단어 김영환의 스프링완전정복junit스프링부트gradlegradle
💻프로젝트 생성
프로젝트 준비
스프링 부트 스타터 사이트로 이동하여 스프링 프로젝트 생성
- Language : Java (JDK11)
- Project : Gradle
- Spring Boot : 2.x
- Dependencies : 선택하지 않음
- Packaging : Jar
참고 : 프로젝트 환경설정을 편리하게 하려고 스프링 부트를 사용한 것이다. 지금은 스프링 없는 순수한 자바로만 개발하고 후에 스프링을 이용한다.
📃비지니스 요구사항과 설계
- 회원
- 회원을 가입하고 조회할 수 있다.
- 회원은 일반과 VIP 두 가지 등급이 있다.
- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)
- 주문과 할인 정책
- 회원은 상품을 주문할 수 있다.
- 회원 등급에 따라 할인 정책을 적용할 수 있다.
- 할인 정책은 모든 VIP는 1000원을 할인해주는 정액할인을 적용 (변경가능)
- 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할이을 적용하지 않을 수도 있다.(미확정)
👨👩👧👦회원 도메인
회원도메인 설계
회원 도메인 협력관계
회원 클래스 다이어그램
회원 객체 다이어그램
회원 도메인 개발
회원 엔티티
회원 등급
public enum Grade {
BASIC,
VIP
}
회원 엔티티
public class Member {
private Long id;
private String name;
private Grade grade;
public Member(Long id, String name, Grade grade) {
this.id = id;
this.name = name;
this.grade = grade;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
회원 리포지토리
회원 저장소 인터페이스
public interface MemberRepository {
void save(Member member);
Member findById(Long memberId);
}
메모리 회원 저장소 구현체
public class MemoryMemberRepository implements MemberRepository{
private static Map<Long, Member> store = new HashMap<>();
@Override
public void save(Member member) {
store.put(member.getId(), member);
}
@Override
public Member findById(Long memberId) {
return store.get(memberId);
}
}
회원 서비스
회원 서비스 인터페이스
public interface MemberService {
void join(Member member);
Member findMember(Long memberID);
}
회원 서비스 구현체
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository = new MemoryMemberRepository();
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override
public Member findMember(Long memberID) {
return memberRepository.findById(memberID);
}
}
회원 도메인 테스트 (JUnit)
회원 도메인 - 회원가입 테스트
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
public class MemberServiceTest {
MemberService memberService = new MemberServiceImpl();
@Test
void join(){
//given
Member member = new Member(1L, "memberA", Grade.VIP);
//when
memberService.join(member);
Member findMember = memberService.findMember(1L);
//then
Assertions.assertThat(member).isEqualTo(findMember);
}
}
회원 도메인 설계의 문제점
- 의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점이 있음
- DIP, DIP를 지키지 못함
💲주문과 할인 도메인
주문과 할인 도메인 설계
주문 협력,역할,책임 관계
주문 클래스 다이어그램
주문 객체 다이어그램1
주문 객체 다이어 그램2
주문 서비스를 변경하지 않아도 리포지토리나 할인 정책의 구현체를 유연하게 변경할 수 있다
Author And Source
이 문제에 관하여([Spring Core Basic] 2.스프링 핵심 원리 이해1 - 예제 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zion/Spring-Core-Basic-2.스프링-핵심-원리-이해1-예제-만들기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)