C# DB 코딩 강좌 2008. 11. 14. 21:15

자. 이제는 인터페이스에 대한 낙서를 적어보자.

미리 말해두지만 정말 낙서이다.

예전에 처음 인터페이스를 접하게 되었을때 난 이런생각을 했다. 내가 만드는 모든 클래스들은

 

만드는클래스 xx = new 만드는클래스();

Xx.open();

Xx.close();

 

같이 하면 무조건 그 클래스가 작동하는것을 말이다.

하여간.. Open 으로 시작해서 close로 끝나고자 했던 기억이 난다.

그시절에도 물론 지금도 크게 생성자에다 뭘 집어 넣는걸 좋아하지 않았던 이유로 왜 생성자를 좋아하지 않았는지는 나도 모르겠지만..

그냥 왠지 생성자에 넣는게 좀 그랬더랬다..

하여간 그건 그런거고.. 저런 인터페이스를 가지겠다는 생각을 종종하곤 했다.

문제는 세상이 그리 만만할 수준이 아니란것과 너무 많은 형태의 클래스들이 생겨나니 저런것이 힘들다는것들을 알게되고 두번째 생각한것은

인터페이스군을 만들자는 생각이였다. 네트웍에 따른 인터페이스 / DB에 따른것 / …..

이런식으로 표준 인터페이스를 만들어서 거기에 맞도록 다른것을 끼워 맞추는것이다.

왜냐면 난 내가 만들어 놓은 클래스 마저 사용법이 기억이 나지 않기 때문이다.

그럼 결국 아무런 클래스나 내가 만든것들은 무조건

Open해주면 되고 나중에 close 해주면 된다고 생각해 봐라..

즉 그렇게 한다고 정의했다면 만약 그 클래스가 특별히 인자를 요구하지 않는다면 사실상 클래스의 사용법을 알지 않아도 된다는 이야기가 된다.

두번째 문제는 필요없는 인자를 넘기기 위한 코딩을 괜히하게 되거나 할 수도 있겠지만..

하여간 이런생각들이 자꾸만 들게 됨으로 인해서 닷넷에서 제공하는 것마져 내 방식에 맞도록 하고자 하는 생각들이 들게 되고 그렇게 하는게 Adapter라는 패턴을 이야기 하는줄 나중에 알게 되었다.

하지만 문제는 말이다. 나같은 단순한 사람도 그런생각을 하듯이 닷넷을 만든이도 그런 생각을 했다는 것이다. 그럼에도 불구하고 그러지 못하는것은 너무 나도 필요한게 많기때문일지라.

하여간 그 인터페이스에 대한 이야기를 해보도록 해보자.

처음 닷넷이거나 또는 자바이거나 아님 c++이거나 객체지향이란 언어를 접해서 하나의 난관이라고 이야기 할수 있는게 이넘의 인터페이스다.

문제는 인터페이스가 어려워서가 아니라 이걸 설명하는 책이 더럽게 어렵다는 것이다.

아님 내가 머리가 나쁘거나.

하여간 지금도 이해를 못하니 어쩌겠니.. 그냥 그러려니 하고 살아야 될듯 싶다.

인터페이스란

한마디로 "표준" 이다.

앞에서 내가 이야기 한것 처럼 난 open으로 시작해서 close로 끝내고 싶다고 생각한것 처럼 이런 표준을 정한다는것이다.

그것이 전부라고 생각하면 된다. 이 표준이란것에 대해서 이야기를 해보자.

우리는 예전에 24pin의 핸드폰 충전기 이전에는 항상 그 핸드폰에 맞는 충전기를 가지고 있어야 했다. 그래서 다른회사의 핸드폰충전기로는 충전자체가 불가했다.

하지만 지금은 어떤가? 24pin으로 정통부가 표준을 정하니 모든 핸드폰이 같은라인에 충전이 가능하게 되지 않았는가?

그 24pin이란게 표준이다. 그게 인터페이스고

또 다른이야기를 해보자.

USB는 이제 기본적 인터페이스가 되어 버렸다. 이것을 통해서 우리는 프린터, 랜도 연결하고, 하드도 연결한다.

Usb가 하드는 아닐진데 말이다.

개체와 컴퓨터를 연결하는 인터페이스가 USB인것이다.

이런 인터페이스가 생성되면 어떤가? 왠지 어떤장비를 만나게 된다고 생각을 해보자.

예를 들어서 디카를 샀다고 보자. 그런데 이녀석이 USB연결포트가 있는것이다. 그럼 우리는 어떤가? 왠지 자신감이 생긴다. 이녀석의 자료는 일단은 컴퓨터에 연결하면 뭐가 될것같은것 말이다.

당신이 빔프로젝트를 샀는데 USB잭만 있다.

느낌이 좀 색다르지 않나.. 당신은 무슨장치인가보다 단지 연결할것이 USB라는 이유만으로도 일단 그 장비에 대해서 일말의 자신감(?)인지를 느낄수 있게되는것이다.

그리고 왠지 모르겠지만.. 당연히 연결잭에 꼽기만 하면 다 알아서 될것같은것들..

그런 기분이 바로 인터페이스이고.. 그렇게 하기 위해서 표준이란 걸 만드는것이다.

자… 이제 이분위기를 이어서 계속 이야기를 해보면

"I"라고 시작하는것들은 모두 인터페이스라고 하자고 정의했다. (그냥 묵시적이다. -_-;;)

Iysm 이란 인터페이스가 있다고 치자. (ysm은 나의 이니셜이다.)

이 인터페이스는 open으로 시작해서 close로 끝나는것이다.

처음 만나는 xyz라는 클래스가 있는데 이녀석이 Iysm이란 인터페이스를 가지고 있다고 생각해 보라. 단지 우리는 싱긋 미소를 짓고 이유없는 open과 close를 때리면 그녀석은 알아서 동작을 하게 될것이다. (close하다가 끼이면 정말 괴롭다. -_-;; 이런농담을 알아듣는 인간이 있을까?)

마치 usb를 이용해 컴퓨터에 디카를 연결하면 뭔가가 되는것 처럼..

인터페이스란 이런것들이다.

Ienumerable 같은것은 우리는 쉽게 접하는데 일단 이녀석이 구현되면 foreach가 가능하다는 생각이 들지 않는가?

인터페이스란 여하튼 구현되어 있다는 사실만으로 상당히 좋은것이다.

내가 가지고 있는 노트북은 "블루투스"가 안된다.

구현되어 있다면 난 핸드폰에 있는 "블루투스" 기능을 통해서 서로 연결하지 않아도 통신이 될텐데 말이다.

우리가 만드는 클래스는 위와같은 노트북, 핸드폰 처럼 하나의 객체이고

그 객체끼리의 표준을 구현해 둔다면 우리는 좀 더 유용한 클래스를 만들게 될것이다.

CF)

http://www.simpleisbest.net/archive/2008/06/23/2423.aspx

원본 위치 <http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=18&MAEULNO=8&no=1589&page=1>

'C# DB 코딩 강좌' 카테고리의 다른 글

C#을 이용한 DB코딩 14  (0) 2008.11.14
C#을 이용한 DB코딩 13  (0) 2008.11.14
C#을 이용한 DB코딩 12  (0) 2008.11.14
C#을 이용한 DB코딩 11  (0) 2008.11.14
C#을 이용한 DB코딩 10  (0) 2008.11.14
C#을 이용한 DB코딩 8  (0) 2008.11.14
C#을 이용한 DB코딩 7  (0) 2008.11.14
C#을 이용한 DB코딩 6(TcpChannel)  (1) 2008.11.14
C#을 이용한 DB코딩 5  (0) 2008.11.14
C#을 이용한 DB코딩 4(Virtual PC)  (0) 2008.11.14
posted by 삶의여유로움
: