퇴근5분전

 어느날 C#을 하면서 인터페이스라는 놈이 날 괴롭혔다.
전자 전공인지라 자꾸 물리적인 인터페이스만 떠올라서 계속 생각하고 대체 이놈을 어디다
쓴단 말인가???
 훈스게시판에 문의를 했던적이 있다 인터페이스가 무엇인가??

처음 질문은 답이 없었고...
http://www.hoons.kr/Board.aspx?Name=QACSHAP&Mode=2&BoardIdx=3330&Key=Name&Value=%ec%9c%a4%ec%a7%80%ec%86%a1 

두번재 질문.
http://www.hoons.kr/Board.aspx?Name=QACSHAP&Mode=2&BoardIdx=3373&Key=Name&Value=%ec%9c%a4%ec%a7%80%ec%86%a1 

이글에는 김창우님께서 답글을 달아주셨다.

그 당시에 이걸 이해는 불가했었던거 같고... 한참이 지난 후 class 업캐스팅! 관련해서 보다가
인터페이스를 떠올리고서야 .. 아하!! 했던기억이 새록 새록...


인터페이스란.
객체A에서   객체B를 이용한다고 할때  객체 B가 가진 인터페이스를 통해서 접근하여 B에 멤버 변수와 기능에 대한 접근을 하도록 도와주며. 객체 B에 대한 접근범위를 제한하게 된다.

interface I누구
{
       string  이름();
}

class ObjectA
{
       public void 넌누구냐( I누구   지목된대상  )
       {
               MessageBox.Show(   지목된대상.이름() );
        }
}

class ObjectB : I누구
{
       public string 이름()
      {
           return "객체B라네";
      }
}

위 처럼 구현시

  ObjectA와 ObjectB를 생성하고 ObjectA에서 넌누구냐(  생성된objectB참조 ) 를 호출하면
ObjectB에 이름을 알수있게 된다.


ObjectA에 넌누구냐()에 파라미터로   I누구라는 인터페이스를 이용하는데
ObjectB라 정의 하지 않고 어찌 I누구를 썼는가? 라고 한다면

ObjectC가. ObjectD가 그이외에 객체를 대상으로 묻고자 한다면 오버로드로 처리 할것인가??????
라고 되물을 수가 있을것이다.

인터페이스를 이용하면 굳이 귀찮게 오버로드를 만들 필요가 없지 아니한가?

I누구만 상속받아서 객체 생성을 한다면 ObjectA 에 넌 누구냐에 대상이 될수 있다!

또한 넌누구냐() 의 구현부안에서는
I누구의 멤버인 [이름]만이 접근이 가능하기에 접근에 대한 제한이 가능하므로 쓸데없는 참조나
데이타 조작이 불가능해지므로 좀더 에러에 대한 대처 범위가 줄어들게 된다.











'# 1) 프로그래밍' 카테고리의 다른 글

훈스에서 어느분이 객체지향을 공부하신다기에....  (0) 2009.07.15
디자인 패턴관련...  (0) 2009.07.13
객체지향을 꿈꾸며...  (0) 2009.07.10
객체지향 정리!  (0) 2009.07.10
노가다~~ 고고싱~?  (0) 2009.06.29