2006/04/08 07:17 Developer
Interface Oriented Programming
자바를 처음 배웠을때 가장 이해하기 어려웠던 부분이 인터페이스였다. 랭귀지에 기본서를 보면서, C++를 기존에 알고 있던터라 차이점을 위주로 책을 보게 되었는데, 다중상속과 인터페이스는 C++과 여러가지면에서 다르다고 생각을 했다.
특히 추상클래스와 인터페이스는 왜 중복해서 존재를 해야만 했을까라는 생각을 많이 했다. 물론 여러가지 이야기들을 책이나 article에서 볼수 있었지만, 별로 와닿지 않는 이야기들이 많았다. 인터페이스 개념조차 너무도 추상적이었기 때문이다.
하지만, 자바로 밥을 먹고 살아온지 좀 시간이 지난 지금!! 인터페이스 통한 개념의 장점이 코딩시 몸으로 느껴졌다.
왜 구현클래스가 있는데 인터페이스를 만드는 수고를 하면서 많은 자바코드를 만들어야 하나?
장점
1. 팀개발시 메소드 시그내쳐를 먼저 작성후 개발을 하면, 상대편에 개발속도에 무관하게 개발이 가능하다. 보통 팀작업시 기능 단위로 구현을 할 경우나 레이어별로 구현할 경우 사전에 구현이 되어 있는 않으면 하드코딩을 통해서 구현을 하거나, 구현이 완료가 된 다음 진행을 해야 했지만, 인터페이스는 그런것에 상관이 없이 개발을 가능하게 해준다.
2. Mock객체를 이용해서 테스트하기가 편하다. 인터페이스에 해당하는 Mock만 만들면 된다.
3. 먼저 구현할 내용을 명시적으로 선언을 하고, 개발을 하기 때문에 구현부를 구현할때 메소드 네이밍이나 파라미터를 상대적으로 신경을 덜쓰고, 개발을 할수가 있다. 물론 사전에 인터페이스를 정의할때 팀원간에 소통은 필수이다.
4. 구현할 내용을 명확히 알고 시작하기때문에 구현의 시간이 단축이 된다.
5. 시그내쳐 선언부를 통해서 사람도 기계도 어떤 메소드가 존재할지 쉽게 알수 있다. C언어를 예를 들어보면, 항상 main위에다가 사용할 메소드를 선언을 하고 구현을 해야만 문법에 맞는 표현이 된다. C를 처음 배울때는 그것도 이해가 좀 덜됐는데, 랭귀지는 명확해야 하는 특성을 타고 났기때문에 C언어에서 선언부처럼 자바에서 interface를 활용하는 것이다. 예전에 수업을 들었던 언어론을 보면 여러가지 설계에 대한 이야기들이 많이 나오는데, 이런 관점을 좀 과대하게 생각보면 interface를 거의 필수적으로 사용을 해야 한다고 생각을 한다.
6. Layer간에 결합도를 느슨하게 할수 있다. 구현부를 레퍼런스하는 객체가 내부에 많이 존재하면 할수록 결합도는 높아지기 때문에 나중에 유지보수나 비즈니스 객체가 변할 경우 수정할 클래스의 양이 많아 지고, 그만큼 버그의 가능성도 높아진다.
단점
1. 디버깅이 어렵다??!!
--> 툴을 통해서 어느정도 해결이 가능하다. ex) eclipse & plugin
2. 코드량이 많아진다.
--> 사전에 인터페이스를 설계를 잘하면 쓸데없는 메소드는 구현을 않하기때문에 오히려 코드량이 줄어들수도 있다.
개인적인 생각으로는 개발을 진행할 초기에 인터페이스를 정의를 하고 개발을 했으면 좋겠다는 생각을 많이한다.
지금까지는 머릿속에서 생각나는 것들만 적었는데, 추후에 아티클이나 책을 참조해서 몇 가지들을 더 적어보겠다.