반응형

인터페이스(Interfaces)는 무엇인가?

인터페이스는 C#에서 추상화를 구현하는 또 다른 방법이다. 어떤 클래스가 어떤 메서드들을 가져야 하는지를 정의하는 일종의 규칙이라고 할 수 있다.

 

추상 클래스, 추상 메서드에 대해서는 아래 포스트에 자세히 정리해 두었으니 참고하자.

 

2024.04.23 - [C# 기초] - [C#기초] 추상(abstract) 클래스와 메서드

 

[C#기초] 추상(abstract) 클래스와 메서드

추상화(Abstract)란 무엇인가? 추상화는 특정 정보는 숨기고, 필수 정보만 사용자에게 표시하는 프로세스이다. 추상화는 클래스나 인터페이스를 사용하여 구현할 수 있다. 클래스 또는 메서드를

bigchoiiistudio.tistory.com

인터페이스의 특징은 선언부에 메서드 구현을 포함하지 않는다는 것이다. 단지 메서드의 이름, 매개변수, 반환값의 형식 등을 정의한다.

예시1:

// interface
interface IAnimal
{
  void animalSound(); // interface method (does not have a body)
  void run(); // interface method (does not have a body)
}

// 코드 출처 : w3schools
  • 인터페이스의 이름은 시작 부분에 문자 ‘I’로 시작하는 것이 일반적이다. 클래스와 인터페이스를 구분하기 위함이다.

인터페이스 사용 방법

인터페이스를 구현하는 방법은 클래스가 클래스를 상속할 때와 같이 ‘:’ 기호를 사용한다.

예시2:

// 인터페이스
interface IAnimal
{
  void animalSound(); // 인터페이스 메서드
}

// Pig "implements" the IAnimal interface
class Pig : IAnimal
{
  public void animalSound()
  {
    // The body of animalSound() is provided here
    Console.WriteLine("The pig says: wee wee");
  }
}

class Program
{
  static void Main(string[] args)
  {
    Pig myPig = new Pig();  // Create a Pig object
    myPig.animalSound();
  }
}

// 코드 출처 : w3schools

인터페이스의 특징

인터페이스에 정의해 놓은 메서드는 구현부에서 반드시 재정의 해야 한다. 예시2에서는 IAnimal 인터페이스에 animalSound 메서드가 정의되었다.

 

이를 Pig 클래스에서 구현할 때 animalSound 메서드를 재정의해주었다. 추상화는 추상 클래스 내에 정의된 메서드 외에도 이를 상속받은 클래스에서 새로운 메서드나 변수 등을 선언할 수 있었지만, 인터페이스는 불가능하다.

 

인터페이스는 기존에 정의된 속성과 메서드 외에는 추가할 수 없다.

예시3:

// 추상화(Abstraction) 예제

// 추상 클래스인 Animal
abstract class Animal
{
    // 추상 메서드 MakeSound 정의
    public abstract void MakeSound();
}

// Animal을 상속받은 Dog 클래스 (살)
class Dog : Animal
{
    // MakeSound 메서드 구현
    public override void MakeSound()
    {
        Console.WriteLine("멍멍!");
    }

    // Dog 클래스의 특정한 기능과 속성
    public void WagTail()
    {
        Console.WriteLine("꼬리를 흔들며 행복해요!");
    }
}

// Animal을 상속받은 Cat 클래스 (장기)
class Cat : Animal
{
    // MakeSound 메서드 구현
    public override void MakeSound()
    {
        Console.WriteLine("야옹!");
    }

    // Cat 클래스의 특정한 기능과 속성
    public void Purr()
    {
        Console.WriteLine("산소온거니까 편안해요.");
    }
}

// 인터페이스(Interface) 예제
interface IShape
{
    void Draw();
}

class Rectangle : IShape
{
    public void Draw()
    {
        Console.WriteLine("사각형을 그립니다.");
    }
}

class Circle : IShape
{
    public void Draw()
    {
        Console.WriteLine("원을 그립니다.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 추상화 예제
        Animal dog = new Dog();
        dog.MakeSound(); // "멍멍!" 출력
        dog.WagTail();

        Animal cat = new Cat();
        cat.MakeSound(); // "야옹~" 출력
        cat.Purr();

        // 인터페이스 예제
        IShape rectangle = new Rectangle();
        rectangle.Draw(); // "사각형을 그립니다." 출력

        IShape circle = new Circle();
        circle.Draw(); // "원을 그립니다." 출력
    }
}

또한 인터페이스는 여러 개를 한 번에 구현할 수 있다. 예시4를 살펴보자. IFirstInterface와 ISecondInterface를 선언했고, DemoClass는 이 두 인터페이스를 모두 구현했다. 이를 다중 인터페이스라고 한다. 구현은 ,기호로 구분하여한다.

 

예시4:

interface IFirstInterface 
{
  void myMethod(); // interface method
}

interface ISecondInterface 
{
  void myOtherMethod(); // interface method
}

// Implement multiple interfaces
class DemoClass : IFirstInterface, ISecondInterface 
{
  public void myMethod() 
  {
    Console.WriteLine("Some text..");
  }
  public void myOtherMethod() 
  {
    Console.WriteLine("Some other text...");
  }
}

class Program 
{
  static void Main(string[] args)
  {
    DemoClass myObj = new DemoClass();
    myObj.myMethod();
    myObj.myOtherMethod();
  }
}

다중 인터페이스를 사용하는 이유는 C#이라는 언어가 클래스의 다중 상속을 지원하지 않기 때문이다.

요약정리

  1. 인터페이스는 추상화를 구현하는 또 다른 방법이며, 어떤 클래스가 어떤 메서드를 가져야 하는지 정의하는 일종의 규칙이다.
  2. 추상 클래스와 마찬가지로 직접적으로 객체 생성을 할 수 없다.
  3. 인터페이스의 선언부의 메서드에는 구현을 포함하지 않는다.
  4. 인터페이스 구현 시 해당 메서드를 반드시 재정의해야 한다.
  5. 인터페이스에는 속성과 메서드가 포함될 수 있으나 필드/변수는 포함 될 수 없다.
  6. 인터페이스 멤버는 기본적으로 abstractpublic이다.
  7. 인터페이스는 생성자를 포함할 수 없다.
반응형

+ Recent posts