" /> 글로벌 객체지향 프로그래밍 12주차 - C# 인터페이스 | BlackWerf's Blog
포스트

글로벌 객체지향 프로그래밍 12주차 - C# 인터페이스

Interface

정의

  • 메소드, 속성, 이벤트, 인덱서 등을 갖지만, 이를 직접 정의하지 않고 정의만을 보유함
  • 인터페이스에서는 메소드의 형태만 정의하고, 메소드의 구현은 상속받은 클래스에서 진행됨

선언 방법

1
2
3
4
5
interface 인터페이스명{
  메소드();
  속성;
  이벤트;
}
  • 인터페이스의 메소드와 프로퍼티는 public 접근제한자가 없어도 기본적으로 public임
  • 인터페이스의 이름을 지정 할 때는 암묵적으로 인터페이스 이름 앞에 Interface를 의미하는 ‘I’를 붙인다

인터페이스를 상속한 클래스

  • 인터페이스를 상속받은 클래스에서는 인터페이스 내부의 메소드를 완전히 구현해야 함
  • 인터페이스에 선언된 메소드를 반드시 public으로 구현해야 함

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
interface IAnimal{
    void Sound(); //세부 내용은 파생클래스에서 구현
}

class Pig : IAnimal{ //IAnimal 인터페이스를 상속
    public void Sound(){
        Console.WriteLine("Pig Sound : Wee Wee");
    }
}

class Cat : IAnimal{
    public void Sound(){
        Console.WriteLine("The Cat says : wee wee");
    }
}


class Program{
    static void Main(string[] args){
        IAnimal animal1 = new Pig(); //IAnimal 인터페이스를 상속받은 Pig 클래스를 선언함
        IAnimal animal2 = new Cat(); //IAnimal 인터페이스를 상속받은 Cat 클래스를 선언함
        
        animal1.Sound();
        animal2.Sound();
    }
}
1
2
3
4
Output : 

Pig Sound : Wee Wee
The Cat says : wee wee
  • 클래스 animal1과 animal2는 같은 IAnimal 인터페이스를 상속 받았지만, 서로 다른 내용을 출력한다.
  • 메소드의 호출 형태는 같지만 생성된 객체 타입에 따라서 전혀 다른 내용이 실행됨.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.