본문 바로가기
프로그래밍/C#.net

Interface

by 건우아빠유리남편 2009. 8. 24.
반응형

인터페이스(interface)라는 의미를 직역하면 경계면이 됩니다. 다시말해, 물건과 물건의 사이를 중개하는 부분을 애기합니다.

예를 들어, PC와 주변기기를 연결할때, 어떤 물리매체를 이용해서, 어떤 신로를 보낼까라는 규약을 정할 필요가 있습니다. 이런 규약을 기본으로 해서 만들어진 케이블이나 커넥터를 인턴페이스라고 부르는 것입니다.

 

오프젝트지향 프로그램의 세계에 있어서는, 인터페이스란 클래스가 실제구현해야되는 규약을 정하는것입니다.다시말해서, class설계자와 class이용자 사이를 연결하는 역활을 하는것이 인터페이스입니다.

 

■메소드의 규약과 실제구현

메소드를 설계하는 경우, 규약의 결정과 실제구현이라는 2개의 단계를 거치는 것이 됩니다.

규약혹은 계약(constract)는 클래스외부에서 보는 클래스/메소드의 사양으로, 메소드를 설계할때에, 우선은 규약을 정할필요가 있습니다. 다시말해, 규약이란 "이 메소드가 무엇이 되는가","이 메소드를 부르면 어떤일이 일어나는가" 를 정하는 것입니다.

 

그리고 그후에 정해진 규약을 만족시키기위해한 메소드내부의 실제구현(implementation)을 합니다.

일반적으로, 규약과 실제는 따로 떼어서 생각해야 합니다. class이용자가 보면, 실제로 메소드의 내부실제구현이 어떻게 되어있는가는 어찌되어도 좋고, 외부사양만 알고 있으면 클래스를 이용할수 있기 때문입니다.

 

여기서 주의해야 될것은, 복수의 클래스가 같은 규약을 만족시키는 경우도 있다는 것입니다. 또, 같은 규약이라고 해도, 클래스가 틀려지면 그 실제구현방법도 달라집니다. 추상클래스의 실제구현은 파생클래스에서 행해지지만, 파생클래스의 실제구현방법은 다릅니다.

 

■C#의 인터페이스

인터페이스는, 규약만을 정의하는 것입니다.

위에서 설명한 것처럼, C#에서는 추상클래스를 이용하는 것으로 메소드규약만을 정하는 것이 됩니다.

즉, C#의 인터페이스(interface)는 추상메소드만을 가지는 추상클래스라고 생각할수 있습니다.

 

C#의 인터페이스의 정의는 아래와 같습니다.

interface 인터페이스이름

{

   메소드/프로퍼티의 선언

}

 

인터페이스의 실제구현은 클래스의 계승과 같은 문법으로 되어집니다.

class 클래스이름 : 인터페이스이름

{

  클래스의 정의

}

 

클래스와 매우 닮았지만, 인터페이스에는 아래와 같은 특징이 있습니다.

...멤버변수를 가질수 없습니다.

...static메소드를 가질수 없습니다.

...선언한 메소드/프로퍼티는 전부 public abstract 가 됩니다.

...한개의 클래스가 복수의 인터페이스를 실제구현가능합니다.

 

참조

http://ufcpp.net/study/csharp/oo_interface.html


반응형

'프로그래밍 > C#.net' 카테고리의 다른 글

[effective C#] item #4 : #if 대신 Confitional Attribute를 사용하라.  (0) 2009.08.24
[effective C#] item #3 : cast보다는 is나 as가 좋다.  (0) 2009.08.24
추상화  (0) 2009.08.24
virtual method  (0) 2009.08.24
계승  (0) 2009.08.24

댓글