본문 바로가기
프로그래밍/C#

C# 인터페이스 이해하기

by bantomak 2023. 8. 3.
반응형

인터페이스(Interface)

인터페이스는 추상화를 달성하고 객체가 서로 상호 작용할 수 있도록 하는 강력한 도구이다. 클래스가 구현해야 하는 메서드, 속성 및 이벤트의 집합을 정의하지만 이에 대한 구현은 제공하지 않는다. 이를 통해 코드의 유연성과 재사용성을 높인다.

 

소프트웨어 개발의 추상화는 시스템의 다른 부분에서 구현의 세부 사항을 숨기는 프로세스이며 이는 복잡성을 줄이고 개발자가 모든 세부 사항을 이해할 필요 없이 동일한 코드베이스에서 작업할 수 있도록 하기 위함이다. 또한 추상화를 통해 개발자는 구현 세부 정보 대신 기능에 집중할 수 있게 된다.

 

인터페이스란 무엇인가?

인터페이스는 클래스처럼 보이지만 구현이 없다. 여기에는 이벤트, 인덱서, 메서드 또는 속성의 선언만 포함된다. 인터페이스가 선언만 제공하는 이유는 선언된 각 인터페이스 멤버에 대한 구현을 제공해야 하는 구조체 및 클래스에 의해 상속되기 때문이다. 그렇다면 기능을 구현하지 않는 인터페이스는 무엇에 적합한가? 구성 요소를 마음대로 교체할 수 있는 플러그 앤 플레이와 같은 아키텍처를 구성하는데 적합하다. 모든 교체 가능한 구성 요소는 동일한 인터페이스를 구현하므로 추가 프로그래밍 없이 사용할 수 있다.

 

인터페이스는 파생된 구조체와 클래스에 의해 구현되어야 하기 때문에 계약을 정의한다.

 

interface IMyInterface {
    void MethodToImplement(); //Abstract Method signature.
}

class InterfaceImplementer: IMyInterface {

    static void Main() {
        InterfaceImplementer obj = new InterfaceImplementer();
        obj.MethodToImplement();
    }

    public void MethodToImplement() {
        //Abstract Method Implementation
    }

}

여기서는 인터페이스가 인터페이스임을 알리기 위해 인터페이스의 접두사로 "I"를 사용하는 것이 좋다.

 

C#에서 인터페이스를 사용하는 이유는 무엇인가?

인터페이스는 여러 가지 이유로 유용하다. 더 큰 추상화를 허용하여 유연하고 재사용 가능한 코드를 더 쉽게 작성할 수 있다. 또한 서로 다른 형식의 객체가 동일한 인터페이스를 구현하는 한 서로 상호 작용할 수 있다. 이것이 바로 다형성이다.

 

소프트웨어 개발에서 인터페이스를 사용하는 일반적인 이유는 다음과 같다.

  1. 코드 복잡성 감소, 유지 보수성 향상: 인터페이스는 시스템의 여러 구성 요소 간의 계약 역할을 하므로 개발자가 코드를 모듈식 구성 요소로 분해하고 쉽게 유지 관리 및 업데이트할 수 있게 한다.
  2. 느슨한 결합을 허용: 개발자는 인터페이스를 통해 보다 유연하고 확장 가능한 느슨하게 결합된 시스템을 만들 수 있다.
  3. 확장성 향상: 인터페이스는 개발자가 새로운 기능으로 애플리케이션을 쉽게 확장할 수 있는 방법을 제공한다.
  4. 다형성: 인터페이스를 통해 개발자는 다양한 유형의 객체와 함꼐 사용할 수 있는 코드를 작성할 수 있으므로 다형성 및 코드 재사용이 가능하다.
  5. 코드 재사용성 향상: 인터페이스는 개발자가 여러 프로젝트에서 재사용할 수 있는 코드를 작성할 수 있는 방법을 제공한다.

 

추상 클래스와의 관계

인터페이스의 멤버들은 암시적으로 public이고 abstract이다. 인터페이스는 추상 클래스(abstract class)와 비슷하다.

 

공통점

  1. 두 타입 모두 상속되어야 한다.
  2. 두 타입 모두 인스턴스화 할 수 없다.

차이점

  1. 추상 클래스는 구현을 포함할 수 있지만 인터페이스는 포함할 수 없다.
  2. 인터페이스는 오직 다른 인터페이스를 상속할 수 있따. 그러나 추상 클래스는 다른 클래스와 인터페이스 다 상속받을 수 있다.
  3. 추상 클래스는 생성자 소멸자를 포함한다. 하지만 인터페이스는 포함하지 않는다.
  4. 추상 클래스는 필드를 가진다. 하지만 인터페이스는 가지지 않는다.

 

인터페이스 작성 방법

interface 키워드 뒤에 인터페이스 이름과 메서드 및 속성 시그니처 집합을 사용하기만 하면 된다.

 

interface IMyInterface
{
    void MyMethod();
    int MyProperty { get; set; }
}

 

인터페이스 구현

클래스는 : 연산자 뒤에 인터페이스 이름을 사용하여 인터페이스를 구현할 수 있다. 그런 다음 클래스는 인터페이스에 정의된 모든 메서드와 속성에 대한 구현을 제공해야 한다.

 

class MyClass : IMyInterface
{
    public void MyMethod()
    {
        // Implementation details here
    }

    public int MyProperty { get; set; }
}
class MyClass : IMyInterface1, IMyInterface2
{
    // Implementation details here
}

 

인터페이스 상속

인터페이스는 : 연산자를 사용하여 다른 인터페이스를 상속 할수도 있다.

 

interface IMyBaseInterface
{
    void MyBaseMethod();
}

interface IMyDerivedInterface : IMyBaseInterface
{
    void MyDerivedMethod();
}

 

함께 읽으면 좋은 글

 

C# virtual 키워드

virtual 키워드란? virtual 키워드는 메서드, 속성, 인덱서 또는 이벤트 선언을 수정하고 파생 클래스에서 재정의하도록 허용하는데 사용된다. 예를 들어 이 메서드는 이를 상속하는 모든 클래스에

jettstream.tistory.com

 

Effective C# Item 34 : 함수를 매개변수로 사용하여 결합도를 낮추라

함수를 매개변수로 사용하여 결합도를 낮추라 클래스 내의 메서드를 정의하기 위해서 베이스 클래스(Base class)나 인터페이스(Interface)를 정의하고 이렇게 정의된 내용을 기반으로 코딩을 한다.

jettstream.tistory.com

 

출처

 

Understanding Interfaces in C#

A C# Interface is the definition of a class methods, properties, and its members. In this article, you'll learn what C# interfaces are and how to use C# interfaces with real world code example.

www.c-sharpcorner.com

'프로그래밍 > C#' 카테고리의 다른 글

C# Math.Sqrt(Double) vs Math.Pow(Double, Double)  (8) 2023.08.28
Environment.TickCount  (2) 2023.08.24
C# Closure 이해하기  (22) 2023.08.02
C# 무명 메서드(Anonymous Method)  (4) 2023.08.02
C# 7.0 튜플(Tuple)  (6) 2023.07.27

댓글