본문 바로가기

Back-End/토비의 스프링3

7.4. 인터페이스 상속을 통한 안전한 기능확장

서버가 운영중인 상태에서 사용 중인 SQL을 변경해야 한다면?

 

이렇게 기존의 기능에 발전돼야 할 경우 스프링에서는 어떻게 접근하는지에 대해 알아보자.

 

DI와 기능의 확장

 

스프링의 DI 프레임워크를 쓴다고 해서 DI를 바르게 활용한다고 볼 수 없다. 스프링에서 DI를 쓰는건 어렵지 않은 일이다.

 

하지만 DI의 가치를 제대로 얻기위해 DI에 적합한 오브젝트 설계는 쉽지 않다.

그렇다면 DI의 가치를 얻기위해서는 어떻게 하는게 좋을까?

객체지향 설계를 하면서 DI를 의식하면서 설계를 하는 것도 좋은 방식이다.

 

DI와 interface 프로그래밍

인터페이스를 통해 다형성을 얻을 수 있고, 유연하고 확장성 높은 설계가 가능해진다.

 

 

앞장에서 우리는 아래처럼 설계를 해왔다.

이제 여기에서 이미 등록된 SQL을 변경할 수 있는 기능을 넣어서 확장해보자.

 

지금 나라면 그냥 SqlRegistry에 update문을 추가 할 것이다.

 

하지만 이러한 수정은 좋은 방법이 아니다. 기존에 BaseSqlService라는 클라이언트가 있기 때문이다. 굳이 해당 클라이언트가 update 기능까지 가질 필요는 없기 때문이다.

 

아마 방법은

1) 새로운 인터페이스 생성

2) 기존 인터페이스 확장

이 2가지가 있을 것이다.

 

sql update 기능을 필요로 한다면 기본적으로 검색도 포함될 것이기 떄문에 우린 2번 방법을 선택해보자.

 

이런식으로 설계를 하면, BaseSqlService와 SqlAdminService는 동일한 오브젝트에 의존하고 있지만 각자의 관심과 필요에 따라서 다른 인터페이스를 통해 접근한다. 인터페이스를 사용하는 DI이기 때문이다.