토비의 스프링 3.1의 내용을 요약한 자료입니다. 개념적인 설명만 요약하였으며 개념의 이해를 돕는 구체적인 코드 및 예제를 살펴보시려면 책을 참조하시기 바랍니다.
포스팅한 내용이 저작권의 문제가 발생할 수 있는 경우 게시물은 삭제/비공개 처리 될 수 있습니다.
DI와 인터페이스 프로그래밍
- DI를 적용할때 가능한한 인터페이스를 사용하게 해야 한다.
- 인터페이스를 사용하는 첫 번재 이유는 다형성을 얻기 위해서다
- 다향성을 편리하게 적용하는것 때문이라면 클래스를 사용할 수도 있다.
- 그럼에도 인터페이스를 사용하는 이유는 인터페이스 분리 원칙을 통해 클라이언트와 의존 오브젝트 사이의 관계를 명확하게 해줄수 있다.
- 인터페이스는 하나의 오브젝트가 여러 개를 구현할 수 있으므로, 하나의 오브젝트를 바라보는 창이 여러 가지일 수 있다. 각기 다른 관심과 목적을 가지고 어떤 오브젝트에 의존하고 있을 수 있다.
- 목적과 관심이 각기 다른 클라이언트가 있다면 인터페이스를 통해 이를 저절하게 분리해줄 필요가 있고 이를 객체지향 설계 원칙에서는 인터페이스 분리 원칙이라고 부른다.
- 유연하고 확장성 높은 설계가 가능함에도 인터페이스를 피할 이유는 없다. DI는 특별한 이유가 없는 한 항상 인터페이스를 사용한다.
7.4.2. 인터페이스 상속
- 하나의 오브젝트가 구현하는 인터페이스를 여러개 만들어서 구분하는 이유는 오브젝트의 기능이 발전하는 과정에서 다른 종류의 클라이언트가 등장하기 때문이다.
- 인터페이스 분리 원칙이 주는 장점은 클라이언트가 자신의 관심에 따른 접근 방식을 불필요한 간섭 없이 유지할 수 있다는 점이다.
- 기존 클라이언트에 영향을 주지 않은 채로 오브젝트의 기능을 확장하거나 수정할 수 있다.
- 인터페이스를 추가하거나 상속을 통해 확장하는 방식을 잘 활용하면 이미 기존의 인터페이스를 사용하는 클라이언트가 있는 경우에도 유연한 확장이 가능하다.
- 잘 적용된 DI는 결구 ㄱ잘 설계된 오브젝트 의존관계에 달려 있다. 인터페이스를 적절하게 분리하고 확장하는 방법을 통해 오브젝트 사이의 의존고나계를 명확하게 해주고, 기존 의존관계에 영향을 주지 않으면서 유연한 확장을 얻는 방법이 무엇인지 고민해야 한다.
- DI와 객체지향 설계는 서로 밀접한 관계를 맺고 있다.