비트를 쪼개는 개발자

allen321@naver.com

C#

C# - 인터페이스(Interface)

MozarTnT 2024. 7. 19. 16:46
728x90
반응형

 

 

 

인터페이스 란(Interface)?

 

 

 

인터페이스는 언뜻 보면 클래스와 상당히 유사해 보이지만 인터페이스 내부에서는 구현이 불가능하다.

 

 

메서드나 속성의 선언 및 정의는 가능하지만 멤버들에 대한 구현은 이를 제공하는 클래스 및 구조체에서 행해야 한다. 인터페이스의 특징들은 다음과 같다.

 

 

 

 

 

인터페이스의 특징

 

 

  • 오직 메서드와 속성의 선언만 가능하다.

 

  • 각 속성들의 실제 구현은 상속받은 클래스가 인터페이스의 정의된 모든 속성을 구현해야 한다.

 

  • 다중 상속이 가능하다. 따라서 한 클래스가 여러 인터페이스를 구현할 수 있다.

 

  • 다양한 클래스에서 동일한 인터페이스를 사용한다면 메서드와 속성을 일관화 할 수 있어 코드의 일관성이 보장된다.

 

  • 추상화에 용이하다, 즉 인터페이스를 통하기 때문에 세부적인 클래스의 구현을 숨길 수 있고 구현 세부사항이 변경되어도 인터페이스에 영향을 미치지 않는다.

 

  • 클래스 간의 결합도를 낮추어 시스템을 모듈화 하기 좋게 만들어 준다.

 

 

 

인터페이스와 추상클래스의 차이점

 

 

객체 지향 프로그래밍에서 클래스 간의 관계를 정리하고 코드를 구조화하는데 있어서 인터페이스와 추상클래스는 비슷해보인다. 하지만 이 둘 간에는 몇가지 기능적인 차이점이 있다.

 

 

 

 

1. 상속 (Inheritance)

 

  • 추상 클래스는 단일 상속만 지원하지만 인터페이스는 다중 상속을 지원한다.

 

2. 구현(Implementation)

 

  • 추상 클래스 내부에서는 메서드 구현이 가능하다. 
  • 추상 클래스 내부에서 구현한 메서드는 하위 클래스에서 재정의할 필요가 없다.
  • 인터페이스 내부에서는 구현이 불가능하며 오직 선언만 가능하다.
  • 인터페이스를 구현하는 클래스는 해당 인터페이스에서 정의한 모든 메서드를 구현해야 한다.

 

3. 주된 사용 용도

 

  • 인터페이스는 다양한 클래스가 공통된 양식을 구현하도록 강제할 때 유용하다.
  • 추상 클래스는 기본적으로 공통된 기능을 공유하면서도, 일부 메서드는 하위 클래스에서 반드시 재정의해야 하는 경우에 유용하다.

 

 

 


 

 

 

인터페이스 사용 예시

 

 

 

static void Main(string[] args)
{
    IMyInterface_1 myClass = new MyClass();
    myClass.Name = "JYJ";
    myClass.MyMethod();
}

interface IMyInterface_1
{
    string Name { get; set; }

    void MyMethod();
}

     
public class MyClass : IMyInterface_1
{
    public string Name { get; set; }

    public void MyMethod()
    {
        Console.WriteLine($"MyMethod Debug. Name is {Name}");
    }
}

 

 

 

  • 인터페이스 내부에서는 속성 및 메서드를 선언한다.
  • MyClass에서 해당 인터페이스를 구현한다.
  • Main문에서 IMyInterface_1 인터페이스 타입의 변수를 선언하고, MyClass의 인스턴스를 생성하여 할당한다.
  • MyClass가 IMyInterface_1 인터페이스를 구현하고 있기 때문에 사용이 가능하다.
  • Name 속성에 값을 할당하고 MyMethod를 호출한다.

 

 

 

 

 

 

사진 출처 : https://www.geeksforgeeks.org/c-sharp-how-to-implement-multiple-interfaces-having-same-method-name/?ref=gcse_ind

728x90
반응형