이전에는 디자인 패턴은 책만 보면 다 해결되는 줄 알았다.
그 때만 해도 역시 OOP라는 개념은 책을 통해서 조금씩 이해를 했고
상속과 다형성 같은 개념은 간단한 예제를 통해서 오버로드, 오버라이드와 같은 형태로 이해를 했었다.
최근 다시 디자인 패턴에 대해서 손을 댔다. 그냥 책을 보는 것으로 만족하는 것이 아니라 현재 진행중인 프로젝트에 도입을 해 보고 싶다는
욕구가 다시금 디자인 패턴의 책을 뒤져보게 만들었다.
이전에 디자인 패턴을 보면서 하품만 하던 때를 생각하니 이번에도 다시 졸다가 끝나는게
아닌가 하는 두려움도 다가오기 시작했다.
그러던 중 디자인 패턴 책을 새로이 구입을 하게 되었는데 이전의 이론에만 급급하던 내용이 이제는 눈에 팍팍 들어오는 것이다. 이런 XX... 이전에 딴나라 말 같던 것이 이제서야 팍팍 와 닿다니... 나도 정말 머리가 나쁜가 보다... ㅡ,.ㅡ;
다형성의 개념이 단지 오버로드, 오버라이드 에서만 끝난 줄 알았고, 추상클래스와 인터페이스는 단지 상속을 위해서만 존재한다고 생각했던 나의 잘못된 개념이 무참히 무너지면서, 새로운 세상을 만난 듯 했다.
아직 경험이 부족한 내가 이런 말을 한다고 해서 뭐 그다지 도움이 될 만한 인물들이 있을지는 모르겠지만, 디자인 패턴에서 핵심은
상속과 다형성에 있다고 감히 이야기 한다. 상속은 다들 책에서 항상 나오는 예제처럼 동물과 사람, 자동차 등등... 의 예를 보면 "아
그렇구나" 하면서 그냥 넘어간다. 나도 마찬가지 였다. 그리고 그정도만 이해해도 괜찮다.
하지만 당장 코딩을 할려고 하면 막막하다. 어떻게 사용해야 하는가.... 어디서 이넘을 사용하지? 등등...
온통 의문 투성이로 책을
덮어 버린다. (머리 나쁜 나만 이럴꺼야 흑흑~~~) 하지만 Adapter 라는 녀석을 이해하고 나면 상속에 대한 개념을 확실하게 이해한다.
게다가 다형성의 진면목을 알고나서 머리를 벽에 쿵쿵거리면서 피를 토했다. 엉엉~~~
어려운 디자인 패턴부터 덤비다가는 지풀에 지쳐서 쓰러진다. 혹시 나와 같은 경험을 한 사람도 많을 것이라 생각을 한다.
그래서 당부하기를(나도 아직 내공이 깊은 것은 아니지만) Adapter패턴을 이해하고 나면 나머지 부분들은 조금씩 이해가 될 것이라고 생각한다.
아래의 소스는 최근에 이리저리 웹을 디적거리다가 내눈에 걸린 Adapter패턴 소스를 올린다.
당연히 펀거다. 저작권에
걸리면 문제가 커진다. 때문에 펀 곳도 여기에 적어둔다.
그리고 마지막으로 이 사이트 정말 죽인다. ㅎㅎㅎ
영어에 자신이 없으신 분들도 강추다....
단지 UML과 소스만 보면 충분히 이해가 될 것이다. (안됨 말구.... 책임회피성 발언 ㅡ,.ㅡ;;;)
출처 : http://www.dofactory.com/Patterns/PatternAdapter.aspx
class MainApp
{
static void
Main()
{
// Create
adapter and place a request
// 다형성
// 어라 이게 뭐야 형이 다른데도 인스턴스가 생성되잖어..XX
// 이것이 상속과 다형성의 참맛이다.
// VB하시던 분들 이런 부분을 보면
미칩니다. 이해 안되면 외워버리세요. ^^;;
Target target = new
Adapter();
target.Request();
// Wait for user
Console.Read();
}
}
// "Target"
class Target
{
//
반드시 Virtual로 해줘야 한다.
// 이 녀석에 대한 재정의를 통해서 이 부분에서 실행되던
녀석들을
// 숨겨버리고 상속받은 부분에서 정의한 녀석으로 실행하는 것이
가능함.
public virtual void
Request()
{
Console.WriteLine("Called Target Request()");
}
}
// "Adapter"
class Adapter : Target
{
private
Adaptee adaptee = new Adaptee();
// Targer의 Request
함수를 재정의 한다.
// 여기서 상속과 다형성의 맛을 볼 수가
있다.
public override void
Request()
{
// Possibly
do some other work
// and then call
SpecificRequest
adaptee.SpecificRequest();
}
}
// "Adaptee"
class Adaptee
{
public void
SpecificRequest()
{
Console.WriteLine("Called SpecificRequest()");
}
}
'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 |