Spring/Spring core basic

[Spring core basic] 06 - 회원 도메인 개발

Kloong 2022. 5. 2. 01:05

참고

더보기

Spring core basic 시리즈는 김영한 님의 "스프링 핵심 원리 - 기본편" 강의를 정리한 글입니다. 글에 첨부된 사진은 해당 강의의 강의 자료에서 캡쳐한 것입니다. 제 Github에만 올려뒀다가, 정보 공유와 강의 홍보(?)를 위해 블로그에도 업로드합니다. 마크다운을 잘 쓰지 못해서 가독성이 조금 떨어지는 점 양해 바랍니다.

 

 

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

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

www.inflearn.com

회원 도메인 개발

현재까지의 프로젝트 파일 구조

테스트 코드

MemberServiceTest.java

package com.kloong.corebasic1.member;

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);
    }
}

코드 정리

Spring framework를 전혀 사용하지 않고 순수 Java로 코딩했다. 인터페이스를 활용해서 역할과 구현을 구분했고, 다형성을 적용했지만 OCP와 DIP가 완전히 지켜지지 않았음을 코드에서 확인할 수 있다.

MemberServiceImpl.java

public class MemberServiceImpl implements MemberService{

    private final MemberRepository memberRepository = new MemoryMemberRepository();

    //생략...
}

MemberService interface의 구현체 MemberServiceImpl의 코드를 살펴보면, MemoryMemberRepository를 사용하기 위해 직접 객체를 생성하는 부분을 확인할 수 있다.

즉 인터페이스와 구현체 모두에 의존하고 있으므로 DIP를 지키지 않았다. 이로 인해 구현체가 변경될 때 해당 코드를 변경해야 하므로 OCP를 지키지 못하게 된다.

이 부분은 추후에 Spring을 활용하여 수정할 것이다.