250x250
Notice
Recent Posts
Recent Comments
«   2024/05   »
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 27 28 29 30 31
Archives
Today
Total
관리 메뉴

minjea.dev의 코딩블로그

[c#] 인터페이스 본문

코딩강좌/c#

[c#] 인터페이스

minjea.dev 2022. 4. 22. 12:00
728x90

인터페이스는 간단하게 구현 없이 메서드 선언만 포함할수 있습니다. 인터페이스는 추상메서드가 없는 추상클래스라고 생각해도 될듯 합니다.

 

그렇다면 인터페이스는 어떻게 선언할까요? 다음과 같이 선언이 가능합니다.

접근제한자 interface 인터페이스명 {
    // code
}

인터페이스 내부에서는 필드를 포함할수는 없고, 메서드를 포함할때도, 메서드 구현부는 포함이 불가능합니다. 그런데 왜 추상클래스를 쓰면되지 굳이 인터페이스를 쓸까요? 그냥 간지가 나서일까요? 당연히 아닙니다.

 

인터페이스를 사용하는 이유는 바로, 상속에 있습니다. 아시다시피 클래스는 다중상속이 불가능합니다. 다만 인터페이스는 클래스와 달리 다중상속이 허용되어, 다음과 같이 다중상속이 가능합니다. ,를 이용하여 인터페이스 여러개를 동시에 상속받을수 있습니다.

interface interface1 {}
interface interface2 {}

class Example:interface1,interface2 {}

그럼 일단 인터페이스를 하나 정의해보도록 하겠습니다.

interface example {
    int returnBig(int a, int b);
    double returnBig(double a, double b);
}

이렇게 정의한 인터페이스를 보시면 궁금증이 생기실텐데요, 클래스의 경우, 접근제한자를 생략하면 자동으로 private로 지정이 되는데, 그렇다면 인터페이스는 어떨까요? 인터페이스의 경우에는, 접근제한자를 생략하면 기본으로 public으로 지정됩니다.

 

그렇다면 인터페이스를 상속받아 클래스에서 example 인터페이스에 있는 returnBig를 재정의해보도록 하겠습니다.

class exampleClass:example {
    public int returnBig(int a, int b) {
         return (a>b)?a:(a<b)?b:-1;
    }
    
    public double returnBig(double a, double b) {
         return (a>b)?a:(a<b)?b:-1;
    }
}

보시다시피, 인터페이스에 속한 메서드를 재정의할때는, 무조건 public 접근지정자를 설정해야합니다.

 

또한, 인터페이스에 신기한 사실이 있는데, 그건 바로, 인터페이스에 속한 메서드는 모두 가상메서드라는 것입니다. c# 컴파일러는 인터페이스의 메서드를 가상메서드로 간주하고, virtual 키워드를 인터페이스 내에서 사용을 하지 못하도록 하고 있습니다. 또한, 자식클래스에서도 인터페이스의 메서드에 대하여 override 키워드를 사용하지 못하게 합니다. 쓰지 않아도, c# 컴파일러가 알아서 처리해주기 때문에 굳이 쓸 필요가 없으니까 그러지 못하도록 하고 있는겁니다.

 

오늘은 이렇게 인터페이스에 대하여 알아보았습니다. 다음 시간에는 이벤트에 대하여 알아보도록 하겠습니다.

728x90

'코딩강좌 > c#' 카테고리의 다른 글

[c#] 구조체란?  (0) 2022.04.24
[c#] 이벤트 (글이 완성되지 않았으니 보셔서 조회수 늘리지 마세요)  (0) 2022.04.23
[c#] 델리게이트  (0) 2022.04.21
[c#] 추상 클래스  (0) 2022.04.20
[c#] get과 set  (0) 2022.04.19