일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프로퍼티와 생성자
- 분할 클래스
- 배열
- 클래스 연습문제
- 인터페이스 예제
- c#
- 인터페이스의 프로퍼티
- 중첩클래스
- as
- 메소드숨기기
- System.Array
- 형식변환
- 접근 한정자
- 무명형식
- 인덱서
- 클래스
- 배열초기화
- 컬렉션 초기화
- base()
- 자동구현프로퍼티
- 이것이C#이다
- this 키워드
- 추상 프로퍼티
- is
- 일반화 클래스
- 프로퍼티
- 오버라이딩
- 튜플
- 인터페이스 상속
- 가변배열
- Today
- Total
제로의영역
8.1 인터페이스 선언 본문
* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.
* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 저같은 왕초보가 보기 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.
(1) 인터페이스의 정의(8.2 인터페이스는 약속이다에 있는 내용을 가져왔습니다): 클래스가 따라야 하는 약속으로 인터페이스로부터 파생될 클래스가 어떤 메소드를 구현해야 할지를 정의한 것.
>> 인터페이스를 사용하면 사용자가 필요한 구현외에 인터페이스에 구현 된 기능은 인터페이스의 기능을 가져와 사용한다는 약속.
(2) 용도: 다중상속이 필요할 경우 사용.
(3) 인터페이스의 특징
1) 메소드, 이벤트, 인덱서, 프로퍼티만 가질 수 있음.
2) 접근 제한 한정자를 사용할 수 없으며 모두 public으로 선언
3) 구현부가 없음.
4) 인스턴스 만들 수 없음
5) 인터페이스로부터 파생될 클래스가 인터페이스의 메소드를 구현하도록 강제함.
(4) 사용법
1) interface 키워드를 이용해서 선언
interface 인터페이스 이름
{
반환 형식 메소드이름1(매개 변수 목록);
반환 형식 메소드이름2(매개 변수 목록);
반환 형식 메소드이름3(매개 변수 목록);
//...
}
사용 예)
interface ILogger
{
void WriteLog(string log); // 메소드: 접근제한 한정자를 사용할 수 없으며 public으로 선언됨.(특징2)
}
2) 인터페이스를 상속받는 클래스의 인스턴스를 만듬
A. 파생클래스(상속받는 클래스)는 인터페이스에 선언되어 있는 모든 메소드(및 프로퍼티)를 구현
B. 메소드(및 프로퍼티)들은 public 한정자로 수식해야함.
사용 예)
class ConsoleLogger:ILogger
{
public void WriteLog(string message) //public한정자로 수식.ILogger에 선언된 메소드 구현.
{
Console.WriteLine("{0} {1}",DateTime.Now.ToLocalTime(),message); //구현부
}
}
3) 선언한(만든) 클래스 인스턴스화 가능.
ILogger logger = new ConsoleLogger(); //ConsoleLogger()를 가리키는 객체 logger 생성
logger.WriteLog("Hello, World!"):
* 정리
1. 인터페이스는 인스턴스를 못 만들지만, 참조는 만들 수 있음.
2. 참조에 파생 클래스의 객체의 위치를 담음.(파생 클래스는 부모 클래스와 같은 형식으로 간주하는 속성이 인터페이스에서도 적용)
3. 파생클래스의 객체는 인터페이스의 객체로 취급함.
>> 인터페이스에는 메소드등 형식만 집어넣고 파생클래스에서 상속해주는 인터페이스 내에서 필요한 메소드등을 선언하면서 객체, 변수등을 넣어 사용.
* 인터페이스는 기존의 만들어진 엔진등을 활용할 때 많이 사용된다고 합니다.