본문 바로가기
스프링

스프링 핵심 원리 - (2)

by 공부 안하고 싶은 사람 2021. 9. 10.
반응형

회원 도메인 설계

 

요구사항

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

 

 

회원등급

public enum Grade {
    BASIC,
    VIP
}

 

회원 엔티티

@Getter
@Setter
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 interface MemberRepository {
    void save(Member member);

    Member findById(Long memberId);
}

 

메모리 구현체

public class MemoryMemberRepository implements MemberRepository{

    private static Map<Long, Member> store = new ConcurrentHashMap<>();

    @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();


    public void join(Member member) {
        memberRepository.save(member);
    }
    public Member findMember(Long memberId) {
        return memberRepository.findById(memberId);
    }
}

 

기능 테스트

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
        assertThat(member).isEqualTo(findMember);
    }
}

 

문제점

  • 저장소 변경시 OCP 원칙은 ?
  • DIP 원칙은?
  • 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점
728x90
반응형

'스프링' 카테고리의 다른 글

스프링 핵심 원리 - (4)  (0) 2022.08.03
스프링 핵심 원리 - (3)  (0) 2022.08.03
스프링 핵심 원리 - (1)  (0) 2021.09.10
필터 / 인터셉터 / AOP  (0) 2021.06.28
Spring  (0) 2021.06.28

댓글