간만에 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. ISP 가 다른 뜻이 있는건가 찾아보니 Internet Service Provider 밖에 안나오네요. 자바나 스프링에서 ISP 뜻이 다른게 있는건가요?? ㅠ.ㅠ 꾸벅.

  2. 자바찌빠/ http://en.wikipedia.org/wiki/Interface_segregation_principle 입니다.
    대충 생각을 정리하느라 쓴 글이라 설명이 부실하군요.
    http://blog.daum.net/_blog/BlogTypeView.do?blogid=0LaM5&articleno=6447149 이것도 도움이 되실거에요.

  3. pdDgw8 pwsgdqjneflj, [url=http://eomutsssxoti.com/]eomutsssxoti[/url], [link=http://ilbyshegdere.com/]ilbyshegdere[/link], http://vmaytrhadlmp.com/

  4. thanks for share!

  5. CLICK HERE To Investigate
    [url=http://infinitemixedmartialarts.com/news/fashion.php?p=8778]louis tj delbaere,louis vuitton,official online retailers[/url]
    louis tj delbaere,louis vuitton,official online retailers

  6. Investigate This Site
    [url=http://01hp.net/member/shopsiproductsm.php?/orange-hermes-birkin-bag-hermes-store-locations.html]orange hermes birkin bag-hermes-store locations[/url]
    orange hermes birkin bag-hermes-store locations

  7. Click Here To Find Out More
    [url=http://yys.zhichi.tv/member/pmisend.php?/moncler-berlin-stand-out-from-the-crowd-this-season.html]moncler berlin-Stand out from the crowd this season[/url]
    moncler berlin-Stand out from the crowd this season

  8. Try this out
    [url=http://www.huixiangkeji.com/member/receivel.php?/moncler-black-signature-sweatpants-is-happily-fairly-reasonably-priced-2013.html]moncler black signature sweatpants-Is happily fairly reasonably priced 2013[/url]
    moncler black signature sweatpants-Is happily fairly reasonably priced 2013

  9. Sneak A Peek At THIS WebSite
    [url=http://cheapbaileybuttonoutlet.com]grey uggs[/url]
    grey uggs

  10. You Could Try THESE Out
    [url=http://outlettonlineshop.com]ugg store[/url]
    ugg store

  11. mary jane shoes DI와 인터페이스 » Toby’s Epril

  12. mbt cheap shoes DI와 인터페이스 » Toby’s Epril

  13. Hello there, simply turned into alert to your blog through Google, and found that it is truly informative. I am gonna watch out for brussels. I will be grateful when you continue this in future. Numerous other folks might be benefited from your writing. Cheers!

  14. In the WordPress support forum, there are from time to time questions abut trackbacks. I haven’t used it myself, but I found a good tutorial on the OptiNiche cheap nfl jerseys china blog.

  15. Thanks for the auspicious writeup. It if truth be told was a amusement account it. Glance complex to more added agreeable from you! By the way, how could we communicate?

  16. kamagra österreich
    Shop around for lawn revenue which may have home schooling resources. It becomes an inexpensive way to find stuff. You may also satisfy other home schooling mother and father. Check your neighborhood papers. Also, make your eyes open about the weekend for indicators. One never knows what fascinating things you might find out as a result.
    kamagra 100
    Do not technique any wilderness pets while you are camping. A thing that might appear harmless and lovable might be incredibly territorial. Be also positive to not give any creatures, as the process can result in traumas. Prevent retaining any meals inside of your tent to prevent animals from destroying your campsite. Make it stored out safely or perhaps in a nearby plant.
    priligy kaufen
    When capturing an unforgettable celebration, like a wedding event or birthday or showing off event, keep in mind that some of the finest accounts are advised around the sidelines. The primary motion is obviously vital that you record, but it’s usually the intimate, unrehearsed occasions that show the genuine passion in the occasion.
    cialis pris

Leave a Reply to sale ugg boots Cancel 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