PROGRAMING/C#

인터페이스 (Interface)

평온평온 2017. 12. 27. 22:40
반응형

인터페이스


인터페이스는 메서드의 목록만을 가지는 특별한 타입입니다. 기본형식은 클래스 선언문과 유사하지만, 키워드 "Interface"로 선언하며, 
클래스와 쉽게 구분하지 위해 이름을 대문자 "I"로 시작하는것이 관계입니다. 이름뒤에 : 과 인터페이스를 밝힘으로써 다른 
인터페이스로 부터 상속도 받을수 있습니다. 

지정자 interface 이름 : 기반 인터페이스
{
메서드 
}

인터페이스의 멤버는 구현 코드를 가지지 않으며 세미클로으로 끝난다. 본체가 없고 동작이 정의 되어 있지 않기 때문에 

직접 호출을할수는 추상 메서드인 셈이다.


  • 인터페이스도 추상 클래스 처럼 객체를 생성할수가 없다. 
  • 정의만 가지고 있고, 구현 코드를 가지고 있지 않다. 
  • 인터페이스로부터 상속 받은 클래스는 인터페이스에 포함된 모든 메서드를 구현해야 한다. 


인터페이스는 추상 클래스와 마찬가지로 객체를 생성을 할수 없지만,  변수는 선언 할수가 있다. 인터페이스는 문서화에 유리하다. 개발자들끼는 잡다한 말이 필요없이 인터페이스만 보더라도 구현에 필요한 함수를 알수가 있다. 

대규모 프로젝트에서 클래서 설계자와 구현자가 다를경우 빛을 보게 된다. 


인터페이스느 본체가 정의되지 않는 추상 메서드를 가진다는 것과 객체를 생성할수가 없다는 것에 매무 흡사하지만, 
추상 클래스는 추상 메서드를 선택적으로 가질수가 있는데 인터페이스는 메서드 전체를 가져야 한다. 


다중 상속 지원


C#은 CLASS 다중 상속을 지원하지 않는다. 하지만, 인터페이스는 다중상속을 지원하여 준다. 정말로 반가운 이야기다 

때때로 다중 상속을 사용해야 할경우 반드시 인터페이스를 통해 하여야 한다. 


인터페이스 멤버는 주로 메서드지만, 함수형 멤버인 프로퍼티와 인데서도 포함되수 있다, 또한 이벤트도 가질수 있다. 
인터페이스 멤버는 이 4가지 뿐이지만, 
생성자, 필드, 상수, 내부타입, 생성자, 연산자는 포함되수가 없다. 

인터페이스에 포함되는 프로퍼티나 인덱서도 본체는 가지지 않는다. 다만 get,set 접근자만 명시를 한다. 
get;set; 둘다 있으면 읽기와 쓰기 
get; 만 있으면 읽기 전용 


인터페이스의 상속


상속에는 구현 상속과 인터페이스 상속이 있다. 구현 상속은 우리가 일반적으로 사용하는 Class 상속을 말한다. 

부모, 자식 관계가 아주 명확하다. 


이는 아주 치명적인 문제점을 가지고 있다 코드의 재사용성에 대해서는 매우 뛰어난 업적을 가직 녀셕이다. 

하지만 버그 또한 자식이 그대로 물러 받는다는것이 문제인것이다. 


인터페이스 상속은 구현코드는 물려 받지 않고 구현해야할 메서드를 물러받는 것이다. 부모는 메서드들만 

물려줄뿐이고 자식은 이를 구현을 진행행을 해야된다. 


우리가 보통 상속이라고 할때는 구현 상속을 대부분 이야기를 한다. 빈도도 구현 상속이 훨씬 높다. 하지만 

논리적이고 튼튼한 실용적인 클래스를 만들기 위해서 두종류에 상속이 모두 필요하다. 



interface IControl
{
   
void Paint();
}
interface ITextBox: IControl
{
   
void SetText(string text);
}
interface IListBox: IControl
{
   
void SetItems(string[] items);
}
interface IComboBox: ITextBox, IListBox {}



깊은 복사 (예외편)


참조 타입은 값 타입과는 달리 대입에 의해 똑같은 객체를 생성할수 없다. 참조끼리의 대입은 힙에 있는 객체의 번지만을 대입하는 것으므로 두 객체는 같은 대상을 가리키고 있으며 그래서 한쪽을 변경하면 다른 쪽도 영향을 받는다. 


때론 개발자가 깊은 복사를 해야되될 경우가 반드시 생기기 마련이다. 이때 사용 할수 있는 ICloneable 인터페이스를 상속받아 Clone이라는 메서드를 구현하면 된다. 



반응형