반응형
인터페이스는 클래스와 비슷하지만, 메서드, 이벤트, 인덱서, 속성을 클래스에서 가질 수 있는 기능들을 정의하지만, 구현은 하지않습니다.
 
구현을 인터페이스를 갖는 클래스에서 반드시 해야합니다.
이렇게 쓰는 이유는 인터페이스 하나만으로 내가 구현부를 알지못해도 사용이 가능하도록 하고, 
이런 기능들이 클래스에서 꼭 사용되야한다고 명시한다고 볼 수도 있습니다.
 
추상 base 클래스와 매우 유사하지만, 클래스는 다중상속을 지원하지 않지만 인터페이스는 다중상속을 지원합니다
또한 구조체는 다른 구조체나 클래스를 상속할 수 없지만 인터페이스는 지원합니다.
 
형식
public interfase 인터페이스명
{
int 메서드이름();
}
 
구현
인터페이스를 갖는 클래스의 경우 인터페이스에서 정의한 메서드등을 반드시 구현해야합니다.
public interface IAAAA
{
void print();
}
 
public class BBBB : IAAAA
{
public void print()
{
Console.WriteLine("print()");
}
}
 

 

인터페이스는 클래스와 비슷하지만, 메서드, 이벤트, 인덱서, 속성을 클래스에서 가질 수 있는 기능들을 정의하지만, 구현은 하지 않습니다.

구현을 인터페이스를 갖는 클래스에서 반드시 해야합니다.
이렇게 쓰는 이유는 인터페이스 하나만으로 내가 구현부를 알지 못해도 사용이 가능하도록 하고, 
이런 기능들이 클래스에서 꼭 사용되야한다고 명시한다고 볼 수도 있습니다.

추상 base 클래스와 매우 유사하지만, 클래스는 다중상속을 지원하지 않지만 인터페이스는 다중 상속을 지원합니다
또한 구조체는 다른 구조체나 클래스를 상속할 수 없지만 인터페이스는 지원합니다.

형식
public interfase 인터페이스명
{
int 메서드이름();
}

구현
인터페이스를 갖는 클래스의 경우 인터페이스에서 정의한 메서드 등을 반드시 구현해야 합니다.
public interface IAAAA
{
void print();
}

public class BBBB : IAAAA
{
public void print()
{
Console.WriteLine("print()");
}
}


인터페이스로 정의를 하면 인터페이스 맴버만 접근이 가능합니다.

public interface IAAAA
{
void print();
}

public class BBBB : IAAAA
{
public void print()
{
Console.WriteLine("print()");
}

public void print2()
{
Console.WriteLine("print()2");
}
}

static void Main(string[] args)
{
IAAAA B1 = new BBBB();
B1.print();
//B1.print2();
}

B1.print2();가 접근이 불가능합니다.

접근이 가능하려면 
IAAAA B1 = new BBBB(); 이 부분을 BBBB B1 = new BBBB(); 이렇게 수정하면 됩니다.

반응형

'개발공부 > C#' 카테고리의 다른 글

[C#] 스레드(Thread)  (0) 2019.11.04
[C#]컬렉션(Collections)  (0) 2019.10.31
[C#] 배열(Array)  (0) 2019.10.29
[C#] String.Format  (0) 2019.10.28
[C#] #region  (0) 2019.10.27

+ Recent posts