인터페이스 (Interface)
인터페이스
인터페이스의 멤버는 구현 코드를 가지지 않으며 세미클로으로 끝난다. 본체가 없고 동작이 정의 되어 있지 않기 때문에
직접 호출을할수는 추상 메서드인 셈이다.
- 인터페이스도 추상 클래스 처럼 객체를 생성할수가 없다.
- 정의만 가지고 있고, 구현 코드를 가지고 있지 않다.
- 인터페이스로부터 상속 받은 클래스는 인터페이스에 포함된 모든 메서드를 구현해야 한다.
인터페이스는 추상 클래스와 마찬가지로 객체를 생성을 할수 없지만, 변수는 선언 할수가 있다. 인터페이스는 문서화에 유리하다. 개발자들끼는 잡다한 말이 필요없이 인터페이스만 보더라도 구현에 필요한 함수를 알수가 있다.
대규모 프로젝트에서 클래서 설계자와 구현자가 다를경우 빛을 보게 된다.
다중 상속 지원
C#은 CLASS 다중 상속을 지원하지 않는다. 하지만, 인터페이스는 다중상속을 지원하여 준다. 정말로 반가운 이야기다
때때로 다중 상속을 사용해야 할경우 반드시 인터페이스를 통해 하여야 한다.
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 {}
참조 타입은 값 타입과는 달리 대입에 의해 똑같은 객체를 생성할수 없다. 참조끼리의 대입은 힙에 있는 객체의 번지만을 대입하는 것으므로 두 객체는 같은 대상을 가리키고 있으며 그래서 한쪽을 변경하면 다른 쪽도 영향을 받는다.