본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : DIP 코드를 리팩터링하여 OCP도 만족하게 하기

by 오주현 2022. 1. 4.
반응형
DIP 코드를 리팩터링하여 OCP도 만족하게 하기

코드 리팩터링


public class AppConfig {

    public MemberService memberService() {
        return new MemberServiceImpl(new MemoryMemberRepository());
    }
}
  • 이 코드는 객체 안에서 new를 통해 특정 객체를 직접 생성하고 있다.
  • 이러면 문제가 중복이 생긴다.
  • 예를 들면 MemberServiceImpl과 OrderServiceImpl에서 MemoryMemberRepository를 사용하기 위해 각각 위 코드처럼 (new MemoryMemberRepository()); 이렇게 따로 생성해 줘야 하기 때문에 이 자체를 중복이라고 본다.
public class AppConfig {

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

    private MemoryMemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

}
  • 리팩터링 후에는 memberRepository()에 new MemoryMemberRepository()를 생성하고 MemberServiceImpl과 코드엔 없지만 OrderServiceImpl에서 따로 new를 통해 생성하지 않고 memberRepository()를 통해 객체를 생성한 것을 불러와 사용하게 되어 전체적으로 객체 생성 행위는 줄어든 것이므로 중복을 피했다보고 이러면 DIP에 이어 OCP도 만족하게 된다.
  • DIP / OCP 참고
    • DIP
      • 의존 관계 역전 원칙
        • 구체적인 것이 추상화에 의존해야 한다.
        • 고차원 모듈은 저차원 모듈에 의존하면 안 되고 추상화된 것에 의존해야 한다.
    • OCP
      • 개방 - 폐쇄 원칙
        • 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다.
        • 확장에 대해 열려 있어야 하고 수정에 대해 닫혀 있어야 한다.

출처 : 스프링 핵심 원리 - 기본편 - 인프런
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/dashboard
(강의 내용을 참고로 개인 공부하여 올린 내용입니다.)

반응형

댓글