뇌를 자극하는 C# 4.0 프로그래밍/ 인터페이스와 추상 클래스

인터페이스의 선언

interface 인터페이스이름
{
    반환형식 메소드이름1 (매개변수목록);
    반환형식 메소드이름2 (매개변수목록);
    반환형식 메소드이름3 (매개변수목록);
}
  • 인터페이스는 interface 키워드를 이용해서 선언한다.
  • 인터페이스는 메소드, 이벤트, 인덱서, 프로퍼티만 가질 수 있으며 모든 멤버는 public으로 선언된다.
  • 인터페이스에 선언되는 메소드는 구현이 없다.
  • 인터페이스는 인스턴스를 만들 수 없다.
  • 인터페이스를 상속 받는 파생 클래스는 인터페이스에 선언되어 있는 모든 메소드를 구현해줘야 하며, 이 메소드들은 public 한정자로 수식해야 한다.

인터페이스는 약속이다

  • 인터페이스는 소프트웨어 내에서 USB와 같은 역할을 한다. 클래스가 따라야 하는 약속이 되는 셈. 이 약속은 인터페이스로부터 파생될 클래스가 어떤 메소드를 구현해야 하는지를 정의한다.

인터페이스를 상속하는 인터페이스

interface 파생인터페이스 : 부모인터페이스
{
    // 멤버
}

여러 개의 인터페이스, 한꺼번에 상속하기

  • 클래스는 여러 클래스를 한꺼번에 상속할 수 없는데 이는 “죽음의 다이아몬드” 문제 때문이다. 이러한 이유로 C#은 클래스의 다중상속을 아예 허용하지 않는다.
  • 인터페이스는 구현이 없기 때문에 죽음의 다이아몬드 문제가 발생하지 않으며, 다중상속에 자유롭다.

포함(Containment) 기법

MyVehicle()
{
    Car car = new Car();
    Plane plane = new Plane();

    public void Run ()
    {
        car.Ride();
    }

    public void Fly ()
    {
        plane.Ride();
    }
}
  • 포함이라는 기법을 이용하면 상속을 쓰지 않고도 다른 클래스의 기능을 새로운 클래스에 넣을 수 있다. 이는 위 코드와 같이 클래스 안에 물려 받고 싶은 기능을 가진 클래스들을 필드를 선언해 넣으면 된다.

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

abstract class 클래스이름
{
    // 클래스와 동일하게 구현

    // 추상 메소드 선언
    public abstract void Method();
}
  • 추상 클래스는 인터페이스와 달리 구현을 가질 수 있다. 그러나 클래스와 달리 인스턴스를 가질 수는 없다.
  • 추상 클래스는 추상 메소드를 가질 수 있다. 추상 메소드는 구현을 갖지는 못하지만 파생 클래스에서 반드시 구현되도록 강제한다. 이 부분은 인터페이스와 비슷하다.
  • C# 컴파일러는 추상 메소드가 public, protected, internal, protected internal 한정자 중 하나로 수식될 것을 강요한다.
It's only fair to share...Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

The author

지성을 추구하는 디자이너/ suyeongpark@abyne.com

댓글 남기기