최근에 일본 모 업체에서 물류시스템 개발을 하면서 가장 고민을 많이 했던 부분이 메인 프레임에 대한 개발이었다. 이 업체의 경우는 회사 내부의 모든 시스템이 2-tier로 구성이 되어져 있고 .net환경에서 개발을 하고 있지만 vb와 마찬가지로 모든 개발이 화면 중심으로 개발을 진행하고 있다. 즉, OOP에 대한 개념은 거의 없다. 다만 .net 프레임웍에서 충실하게(?) 지원되는 녀석들을 활용해서 열심히 개발하고 있다.
중국을 활용한 오프쇼아(Off-Shore) 덕분에 품질은 거의 바닥이었다. 물론 품질 관리를 철저하게 하는 경우도 있지만...
때문에 어떻게 하면 OOP적인 생각을 가지고 개발자와 같이 호흡을 하면서 진행시킬 수 있을까에 무척이나 고민을 많이 하였다. 물론 나 또한 아직 Interface를 어디에 어떻게 활용할 수 있을까에 대해서 명확한 답을 찾지도 못한 상태였고 단지 다형성에 대해서만 조금은 맛을 본 상태라고나 할까?
GoF를 디자인 패턴을 보아도 도대체 어디에 활용하지 라는 의문만 가득 남긴체 시간이 흘러만 갔다.
시간이 지나고 다시 닷넷이 아닌 java를 공부해 가면서 객체지향 프로그램에 눈을 돌리게 되었고 상속과 구현의 의미를 다시금 되새김질을 하고 있었다.
이 때 불현듯... 사용자 인터페이스라는 부분... 윈도우의 인터페이스... 인터페이스.. 인터페이스..
이 단어들이 머리속을 떠나지 않는 것이었다. 어떻게 하면 인터페이스를 활용할 수 있을까?
뭔가 조금은 서로가 관계가 있는 듯...해 보였다. 약속... 규약... 구현...
아니.. 사실은 엄청나게 관련이 있다.
인터페이스라고 하면 일반적으로 겉으로 들어난 형태라고 생각하면 되지만 이러한 의미를 소프트웨어 개발에 적용시키고자 한다면 직접 맨땅에 헤딩을 안해보고서는 제대로 이해하기가 어렵다. 즉, 그게 뭐야... 어짜라구... 그래서~~ 등등...
그리고 추상화라는 말을 들으면... 음... 초기 개발자들(혹시 머리가 엄청 좋아서 단번에 이해를 하는 사람도 있을 수 있지만...). 정말 미친다. 추상화(Abstraction). 이렇게 그냥 흘려버린다. 닷넷에 어떤 기능이 있는지 더욱더 알기 원하지만 닷넷이란 녀석이 추상화를 어떤 식으로 활용하고 있는지에 대해서는 대부분이 찾아보려고 하지 않을 것이다. 즉, 말은 있지만 실제가 없어서 구체적으로 머리에 확 하고 와 닿지 않기 때문일 것이다.
간단하게 예를 들겠지만 이 예도 도대체 뭔데... 라고 할 수도 있다. 하지만... 추상화는 우리가 하고 있는 아주 반복되는 부분을 정리한 것이라고 해도 과언이 아니다.(이건 정말 개인적인 생각이다.)
우리가 사람이라면 매일마다 하는 것 가운데 가장 필수적으로 하고 있는 것이 있다. 정답은 먹는 것.
먹는 것이라는 행위는 모든 사람에게 공통화된 형태이다. 즉 추상화하기 딱 좋은 것이라고 할 수 있다.
하지만 사람마다 조금은 먹는 행위가 다르다. 편식을 하는 사람. 조금만 먹는 사람. 등등...
이와 같은 행위가 각 사람마다 조금씩 다르게 나타나기 때문에 먹는 것이라는 추상화된 부분을 상속받아서 처리하면 되는 것이다.
public interface 살아가기
{
void 먹기();
}
public class 철수 : 살아가기
{
public void 먹기()
}
public class 영희 : 살아가기
{
public void 먹기()
}
이런 식으로 정의를 한다. 물론 여기까지 많이 알고 있는 사실일 수도 있다.
이 부분을 활용하는 부분은 다름 아닌 다른 곳에 있다.
public void 먹기(살아가기)
{
살아가기.먹기();
}
라는 형태의 메소드가 존재하고 이러한 형태를 관리하는 신이 있다고 가정을 하자.
신은 살아가기라는 인터페이스 안에 먹기라는 추상 메소드 하나를 공개해 줬고 이것으로 각자 클래스를 하나씩 만들었다. 그리고 신에게 각 사람마다 무엇을 먹는지 내부적으로 정의된 내용을 보고한다고 하자. 그러면 이와 같은 형태가 될 것이다.
public void 먹기(new 영희());
이렇게 하면 영희가 먹는 것이 무엇이고 어떻게 먹는지 등등에 대한 즉 영희 클래스 내부에 존재하는 먹기라는 메소드가 실행된다. 그럼 철수가 궁금하다 라고 하면
public void 먹기(new 철수());
라고 작성하면 된다. 즉, 객체지향에서 말하는 다형성의 원리를 이용해서 이러한 것이 가능해 지는 것이다. OS도 대부분의 외부로 공개된 형태가 interface로 공개되고 자체적으로 각 회사가 이러한 interface를 상속받아서 내부적으로 열심히 구현을 한다. 물론 함수명은 같다. 단지 내부적으로 처리되는 내용만이 조금씩 다를 뿐이다. 이렇게 열심히 구현을 하고 나서 OS에 접목을 시키면 OS는 각 업체가 뭘 어떻게 구현을 했는지는 모르지만 실행을 한다.
조금은 위험한 형태의 코드가 발생할 수도 있지만 이러한 형태로 인터페이스를 공개하고 이를 통해서 구현을 하게 되는 것 같다...
지금까지 인터페이스에 대해서 구구절절 풀어보았지만 아직도 많이 부족하다. 그리고 조금은 불안한 부분도 많다. 하지만 조금씩 기미가 보인다. OOP를 활용해서 멋진 녀석을 만들 수 있을 것 같다는 기대감...
'OOP거듭나기' 카테고리의 다른 글
구조패턴 - Decorator패턴 (0) | 2007.07.26 |
---|---|
구조패턴 - Facade 패턴 (0) | 2006.09.26 |
구조패턴 - 컴포지트 패턴 (0) | 2006.09.26 |
구조패턴 - Bridge 패턴 (0) | 2006.09.25 |
구조패턴 - Adapter 패턴 (0) | 2006.09.23 |