[Spring] DI, 의존 주입

gnoesnooj·2021년 11월 30일
0

김영한님, 스프링 핵심 원리

의존성 주입을 한 것과 안한 것 비교

주석처리 되어 있는 부분이 의존성 주입을 사용하지 않았을 때의 그림이다.

좋은 객체지향 개발을 위한 원칙 5가지 SOLID 중 D, DIP 의존 관계 역전 원칙에 어긋나는 코드이다.

MemberServiceImpl 은 인터페이스 MemberRepository에 의존하고 있지만, 동시에 구현체MemoryMemberRepository 에도 의존하고 있다. 구체화와 추상화 둘 다 의존하고 있기 때문에 DIP에 위배된다.

다음과 같이 수정해야 한다.

생성자를 통한 의존성 주입이다. 이렇게 짜면 의존하게 되는 건 MemberRepository 인터페이스 하나기 때문에 DIP원칙을 잘 지키게 되고 다른 Repository를 사용해야 할때도 해당 memberRepository 객체를 넘겨주는 쪽에서만 코드를 변경하면 될 뿐, MemberServiceImpl의 코드는 어떤 것도 건들 필요가 없다.

AppConfig 가 객체를 생성하고 주입시켜주는 역할 까지 하기 때문에, 다른 RepositoryService 는 기능 구현에만 집중할 수 있다.


한 가지의 예시로 한 줄의 코드만 봐서 쉽게 와닿지 않았는데, memberRepository를 사용하는 객체가 수 백개가 넘을 때, 리포지토리 교체를 해야하는 경우 수 백개를 고치지 않고 단 한줄만 고치면 된다고 생각하니 매우 중요하고 유용하다고 느꼈다.

profile
누구나 믿을 수 있는 개발자가 되자 !

0개의 댓글