인터페이스

C#/CLR via 2020. 3. 25. 08:07
반응형

 

 

인터페이스 - C# 프로그래밍 가이드

인터페이스(C# 프로그래밍 가이드)Interfaces (C# Programming Guide) 이 문서의 내용 --> 인터페이스에는 비추상 클래스 또는 구조체에서 구현해야 하는 관련 기능 그룹에 대한 정의가 포함되어 있습니다.An interface contains definitions for a group of related functionalities that a non-abstract class or a struct must implement. 인터페

docs.microsoft.com

 

Public, virtual 로 선언되기를 각각 C#, CLR이 원한다. 만약 해당 키워드를 붙이지 않는다면 컴파일러가 해당 키워드를 포함시키며 sealed(더 상속하지 않는다)라는 키워드를 추가하는 식이다. 이 경우, 다른 인터페이스를 상속 받아 구현하는 식으로도 해결 가능하다.

클래스 메서드 테이블_

l  기본 클래스 Object에 정의되어 있는 모든 가상 인스턴스 메서드 상속

l  인터페이스의 모든 메서드 상속

l  해당 클래스가 새롭게 구현한 메서드 포함

인터페이스의 메서드는 상속받는 클래스가 구현한 것으로 간주한다. Virtual 키워드가 쓰이긴 하지만 public이고, 궁극적으로 구현되는 함수형이 완벽히 일치하기 때문이다.

 

제네릭과 인터페이스

IAInterface<in T> - 만약 같은 구현의 인터페이스가 제네릭, 비제네릭 두 가지 모두 가지고 있다면 항상 제네릭을 택하는 것이 바람직하다. 비제네릭은 그저 이전 버전 호환을 위할 뿐. 제네릭이 값타입과 같이 쓰일 경우 object타입 보다 훨씬 박싱이 적게 일어나기 때문이며, 컴파일 과정이 안정적(타입 안정성(추론 가능))이기 때문이다.

인터페이스와 매개변수

매개변수로 인터페이스를 넘길 수 있다. 함수 채로 넘기는 것보다 박싱이 덜 일어난다. 올바른 매개변수를 전달 하였는지 컴파일러 시점에 미리 알 수 있다.

인터페이스 주의사항

명시적 인터페이스(Explicit Interface Method Implementation, EIMI)으로 어떤 메서드가 있는지는 나와있지만 그 메서드가 어떻게 구현되는지는 모른다.

Int32 x = 5;
Single s = ((IConvertible)x).ToSingle(null);
과 같이 인터페이스로 캐스팅이 필요하다는 것을 인지하기엔 쉽지 않다.
또한 Int32 Iconvertible로 캐스팅 된다는 것은 박싱 비용이 발생한다는 것
마지막으로 호출 시점의 애매함이 존재
A
클래스가 IA 인터페이스 상속
B
클래스가 A클래스, IA 인터페이스 상속
B
클래스는 어떤 IA인터페이스를 채용해야하는지 모른다.

 

반응형

'C# > CLR via' 카테고리의 다른 글

델리게이트(대리자)  (0) 2020.03.25
문자 문자열 텍스트  (0) 2020.03.25
이벤트 & 제네릭  (0) 2020.02.28
매개변수 & 프로퍼티  (0) 2020.02.21
메서드  (0) 2020.02.19
Posted by Lotus' Library
,