간만에 7 장에서

"DI는 특별한 이유가 없는한 항상 인터페이스를 사용한다고 기억해두자. 굳이 인터페이스를 써야 하냐고 주장하는 사람을 만났는데 논리적으로 설득할 자신이 없거든 DI는 원래 인터페이스를 쓰게 돼 있다고 우겨도 좋다. 분명한 이유가 있어서 인터페이스를 사용하지 않는 경우가 없지는 않겠지만, 단지 인터페이스를 추가하는 것이 귀찮아서 약간의 게으름을 부리고자 인터페이스를 생략한다면 이후의 개발, 디버깅, 테스트, 기능의 추가, 변화 등에서 훨씬 큰 부담을 안게 될 것이다."

꽤 오래 전에 http://toby.epril.com/?p=285 이 글을 썼을 때 나는 로드 존슨의 J2EE 책에서 설명한 인터페이스를 사용해야 하는 이유 3가지를 기준으로 DI에서 인터페이스 사용의 필요성에 대해서 생각해봤다. 그때 결론은 쓰면 좋고, 안써도 문제되지 않는 경우도 충분히 있지않겠나 였다.

하지만 지금은 생각이 완전히 바꼈다. 교조적이라고 해도 좋으니 DI에는 특별한 이유가 없는 한 인터페이스를 써야 한다고 주장하고 싶다. 적어도 로드 존슨은 인터페이스 사용의 중요한 한가지를 빼먹었다. 바로 ISP이다. 인터페이스를 사용해서 얻을 수 있는 혜택은 단지 다형성의 활용 예인 구현 바꿔치기, 테스트 대역 만들기, 다이나믹 프록시 만이 아니다. 이 세가지는 사실 다 같은 얘기다.

나는 그보다 더 중요한 것이 클라이언트가 의존 오브젝트를 바라보는 관심의 창으로서 인터페이스의 가치를 지키기 위해서 오브젝트의 의존 관계는 아주 밀접한 관계가 아니라면 인터페이스를 거쳐야 한다고 본다. 그래야 ISP도 적용할 수 있는 것이고. 자바는 다중 상속을 허용하지 않고 동적 타이핑도 지원하지 않으니 인터페이스만이 하나의 오브젝트를 여러가지 모습으로 클라이언트에게 노출시켜줄 수 있는 유일한 길이다. 설령 클라이언트가 하나더라도 클라이언트가 봐야할 오브젝트의 모습을 만들어줄 수 있다.

DAO의 public 메소드인 setDataSource()는 서비스 오브젝트에게 노출될 이유도 없고, 그래서도 안된다. 그것때문 만이라도 DAO인터페이스를 DI에 사용할 충분한 이유가 된다. DAO가 또 다른 이름으로 다른 서비스에게 (예를 들면 UserDaoImpl이 보안 모듈이 필요로 하는 UserDetailProvider가 되는 것) 자신의 모습을 보이려면 인터페이스는 필수이며, 당연히 인터페이스를 타고 DI가 일어나야 한다. (이쯤에서 필드레벨 @Autowired가 어쩌고 하고 나오면 백오십마디는 더 해야 할 것 같아서 무조건 무시)

생각이 또 바뀔지 모르겠지만, 아무튼 지금은 그렇다는 것. 그리고 ISP는 참 무시못할 원칙이라는 것.

사실 이런 생각은 스프링 코드를 읽으면서 바뀐 것이다. 왜 private 스태틱 클래스로 만든, 그래서 밖에서는 보이지조차 않는, 재활용 가능성 조차 없는 자기 전용 멤버 클래스를 인터페이스를 통해서 접근했는지… 그 의문에 대한 내 나름대로의 답이다.

Related posts:

  1. 유쾌한 이슈처리 재촉 메일

Facebook comments:

to “DI와 인터페이스”

  1. Some genuinely prize content on this internet site , saved to my bookmarks.

  2. все серии подряд. HD. http://bitly.com/2ZhIZI2 – ИП Пирогова сезон Все серии подряд смотреть онлайн

  3. (сериал 2020) все серии подряд http://bitly.com/2ZhIZI2 – ИП Пирогова все серии Смотреть сериал Все серии подряд.

  4. You actually explained it superbly. buy prozac

  5. side effects for viagra: best price 100mg generic viagra buy viagra soft

  6. Thanks, I value this. canadian drug

  7. Many thanks for sharing this first-class piece. Very inspiring! (as always, btw)

  8. You definitely made your point. propranolol

  9. IaаАа’б‚Т€ТšаЂаŒаАа’б‚Т€ТžаБТžve read some good stuff here. Certainly worth bookmarking for revisiting. I wonder how much effort you put to make such a fantastic informative web site.

  10. Thanks a lot. I appreciate it. permethrin cream 5

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha