728x90
반응형
1. 핵심 정리
using System;
class Stack {
public void Clear() { }
}
class Queue {
public void Clear() { }
// public void clear() { }
}
class Program {
static void Main() {
}
}
위와 같은 코드가 있다고 해보자.
Stack 과 Queue 클래스가 있고 그 안에는 Clear라는 동일한 이름의 함수가 있다.
이렇게 된다면 가져다 쓰는 입장에서는 Stack이나 Queue나 Clear를 부르면 되기에 편하게 쓸 수 있다.
하지만 실수로 Queue클래스 내부에 clear로 대소문자를 틀린 함수를 선언했다고 생각해보자.
이렇게 되면 일관성도 없고 가져다 쓰는 입장에서도 혼란이 생길 수 있다.
① 일관된 형태의 라이브러리를 만들기 위해 클래스들이 사용하는 메소드의 이름을 약속 할 수없을까?
=> 인터페이스(interface) 문법 사용
② interface
=> 클래스를 만드는 사람과 사용하는 사람 사이의 규칙(메소드 이름)을 정의 하는 것
using System;
interface IList {
void Clear();
}
// 모든 컬렉션은 반드시 IList 를 구현해야 한다.
class Stack : IList {
public void Clear() { }
}
class Queue : IList {
public void Clear() { } // ok
// public void clear() { } - error
}
class Program {
static void Main() {
}
}
③ C# 언어의 핵심
=> 다양한 인터페이스를 먼저 설계하고(제공하고)
=> 대부분의 클래스를 특정 인터페이스를 구현하는 방식으로 메소드를 제공한다.
=> Ex) 대부분의 Collection 클래스를 ICollection인터페이스를 구현한다. => List에는 Clear() 메소드가 있다는 의미
2. interface 문법
using System;
interface ICamera {
void Take();
}
class MP3 {
public virtual void Play() { }
}
class SmartPhone : MP3, ICamera {
public override void Play() { }
public void Take() { }
// public virtual void Take() { } - 가능
}
class Program {
static void Main() {
}
}
① Interface 선언
=> 메소드 앞에 public 등의 접근 지정자를 표기 하지 않는다.
=> C# 8.0 부터는 표기 가능
② Interface 구현
=> 메소드 구현시 override를 표기 하지 않는다.
=> 가상 메소드 또는 비 가상 메소드로 구현할 수 있다.
728x90
반응형
'프로그래밍 > C#' 카테고리의 다른 글
[C#] System.Object (0) | 2020.01.21 |
---|---|
[C#] 타입과 변수의 특징 (0) | 2020.01.20 |
[C#] 클래스 기본 문법 (1) | 2020.01.13 |
[C#] 표준 입력 (0) | 2020.01.13 |
[C#] 표준 출력 (0) | 2019.12.14 |