Section 41.6: 인터페이스 사용 목적

인터페이스는 해당 인터페이스를 사용하는 사용자와 인터페이스를 구현 (implement) 하는 클래스간에 정의된 계약 (contract) 과도 같다. 혹은 인터페이스를 객체가 수행할 수 있는 특정 기능들에 대한 선언이라고 생각할 수도 있다.

각기 다른 도형들을 나타내기 위한 IShape 인터페이스를 정의한다고 가정해 보자. 각 도형은 면적을 가질 수 있으므로, 해당 인터페이스 구현물들이 각자의 면적을 공통적으로 반환하도록 하는 메소드를 다음과 같이 정의할 수 있다:

public interface IShape { double ComputeArea(); }

그런 다음, 다음과 같이 RectangleCircle 두 도형을 정의한다고 생각해 보자:

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/

반응형

+ Recent posts