본문 바로가기
스터디/Spring

[김영한님 - 스프링의 핵심원리] Spring - 스프링이 필요한 이유(2)

by Big Sun 2022. 9. 19.
728x90

포스팅을 시작하지 앞서, 스프링이 필요한 이유(2)의 내용을 정리하겠습니다.

 

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

 

현재, MemberServiceImpl 클라스는 MemberRepository 인터페이스의 구현 객체를 생성하고, 인터페이스와 객체를 연결하는 책임을 가지고 있으며, 마지막으로 실행하는 책임까지 가지고 있다.

 

따라서, 책임을 분리 시켜줘야한다.

 

관심사 분리

 

애플리케이션의 전체동작방식을 구성하기 위해, 구현 객체를 생성하고 연결하는 책임을 가지는 별도의 클래스를 만들겠습니다.(SpringConfig)

 

 

public class SpringConfig {

    @Bean
    public MemberService memberService(){
        return new MemberServiceImpl(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }

}

 

코드를 보면, SpringConfig 클래스는 MemberServiceImpl, MemoryMemberRepository 라는 구현 객체를 생성하고 있다.

그리고, SpringConfig 클래스는 객체 인스턴스의 참조생성자를 통해서 주입 해준다.

 

SpringConfig 클래스를 만들어줌으로써 MemberService 클래스는 아래와같이 MemberRepositoy 인터페이스에만 의존할 수 있다.

 

public class MemberServiceImpl implements MemberService {

    private final MemberRepository memberRepository;


    public MemberServiceImpl(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

...
}

이렇게 SpringConfig를 사용한다면, 전 포스팅에서 말한 객체지향 설계를 만족하지 못한 부분을 채워줄 수 있다.

 

객체지향 설계 원칙 적용

 

  • SRP

한 클래스는 하나의 책임만 가져야한다.

클라이언트 객체는 직접 구현 객체를 생성하고 연결하고 실행하는 책임을 가지고 있었다.

SpringConfig를 생성하면서, 구현객체 생성 연결하는 책임을 담당하였고

클라이언트 객체는 실행하는 책임만 담당하게 되었다.

  • DIP

추상화에 의존해야지 구체화에 의존하면 안된다.

클라이언트 코드가 인터페이스에 의존하도록 변경하고, SpringConfig에서 객체 인스턴스를 생성하여 클라이언트 코드에 의존관계를 주입 → 의존성 주입

  • OCP

소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야한다.

구성영역(SpringConfig), 사용영역(클라이언트코드)

 

 

이상입니다. ~!

 

위 포스팅은 김영한님의 스프링-핵심-원리-기본편 강의를 수강한 후 작성한 포스팅입니다.

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8

 

 

 

 

728x90