Section 41.6: 인터페이스 사용 목적
인터페이스는 해당 인터페이스를 사용하는 사용자와 인터페이스를 구현 (implement) 하는 클래스간에 정의된 계약 (contract) 과도 같다. 혹은 인터페이스를 객체가 수행할 수 있는 특정 기능들에 대한 선언이라고 생각할 수도 있다.
각기 다른 도형들을 나타내기 위한 IShape
인터페이스를 정의한다고 가정해 보자. 각 도형은 면적을 가질 수 있으므로, 해당 인터페이스 구현물들이 각자의 면적을 공통적으로 반환하도록 하는 메소드를 다음과 같이 정의할 수 있다:
public interface IShape
{
double ComputeArea();
}
그런 다음, 다음과 같이 Rectangle
과 Circle
두 도형을 정의한다고 생각해 보자:
public class Rectangle: IShape {
private double length;
private double width;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
public double ComputeArea() {
return length * width;
}
}
public class Circle: IShape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double ComputeArea() {
return Math.Pow(radius, 2.0) * Math.PI;
}
}
위에서 정의한 둘은 자신의 면적을 계산하는 각자의 방법을 가지고 있지만, 이들은 모두 동일한 인터페이스를 구현한 도형에 해당한다. 따라서, 코드상에서 이 둘을 동일한 IShape
으로 다루는 것은 논리적으로 아무런 문제가 없다 :
private static void Main(string[] args) {
var shapes = new List < IShape > () {
new Rectangle(5, 10), new Circle(5)
};
ComputeArea(shapes);
Console.ReadKey();
}
private static void ComputeArea(IEnumerable < IShape > shapes) {
foreach(shape in shapes) {
Console.WriteLine("Area: {0:N}", shape.ComputeArea());
}
}
// Output:
// Area : 50.00
// Area : 78.54
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
42.1: 정적 (Static) 클래스 (0) | 2022.04.27 |
---|---|
41.7: 명시적 구현 (Explicit Implementation) 을 이용해 멤버를 숨김 처리하기 (0) | 2022.04.26 |
41.5: 다중 인터페이스 구현 (implement) 하기 (0) | 2022.04.23 |
41.4: 인터페이스 구현 예제로써의 IComparable<T> (0) | 2022.04.21 |
41.3: 인터페이스 관련 기본 사항들 (0) | 2022.04.21 |