안녕하세요 삽잡이입니다.
이번 시간에는 C#의 인터페이스 사용법 중,
일반적인 구현과 명시적인 구현에 대해서 알아보려고합니다.
인터페이스를 구현하는데에는 두가지의 방법이 있습니다.
'인터페이스를 구현하되 그 인터페이스를 자신의 메서드로 만드는 방법',
'인터페이스 명시적 구현' 이라고 해서 오직 인터페이스 메서드만 구현하능 방법이 있지요...
즉, 인터페이스를 구현하면서, 소유를 내것으로 하는 방법과
오직 인터페이스를 구현하면서 내 인터페이스는 아니게하는 방법이 있다 이겁니다.
왜 이런 이야기를 했을까요...
예를 들어서 동일한 Draw() 메서드가 있다고 해보겠습니다.
인터페이스를 세개 다 구현한다고 할경우
각 인터페이스가 다른데 누구의 Draw()를 호출하는지 할 수 있을까요?
따라서 이 때에는 '명시적인 구현'이 필요합니다.
이와 같이 (1)의 Draw(), (2)의 Draw(), (3)의 Draw() 등
명시적인 인터페이스를 구현할 수 있습니다.
그런데 이 메서드들은 가시성을 사용할 수 없습니다.
무조건 interface의 메서드들이니 public이 아니겠습니까...
아무리 내 메서드처럼 보이지만,
사실 자기 인터페이스를 쓰고자할 때 형식 변환을 하여 수행하는 것이 좋습니다.
즉, 명시적인 인터페이스가 더 좋다 이겁니다...
예를 들어볼까요...
이렇게 IPoint 인터페이스를 Rect에서 구현했다고 해보겠습니다.
그러면 IPoint 인터페이스를 구현하기도,
나의 클래스의 메서드로도 사용이 가능합니다.
그런데,
이처럼 구현하게 되면,
IPoint 인터페이스의 메서드를 구현한 것일 뿐이 됩니다.
뭔 차이가 있을까요?
Rect rt = new Rect();
를 통해 객체 생성을 하고,
전자의 경우에는 'rt.Point'를 할 경우에는 3이 return 될 것입니다.
하지만, 후자의 경우 '(IPoint)rt.Point' 와 같이 형식 변환을 해줘야합니다.
내 것이 아니기 때문입니다.
후자가 더 좋은 것입니다.
왜냐, 우리는 코드를 명시적이지 않고
추상적으로 다루고자 하는 객체지향의 목적을 잃으시면 안됩니다.
이번 시간은 여기까지 하도록 하겠습니다.
이상 삽잡이였습니다!
'삽질의 현장 > - .NET' 카테고리의 다른 글
#046_닷넷(.NET)_.Net Framework 기본 - 얕은 복사와 깊은 복사의 필요성 (0) | 2015.10.30 |
---|---|
#045_닷넷(.NET)_.Net Framework 기본 - IEnumerable & IEnumerator (0) | 2015.10.29 |
#043_닷넷(.NET)_.Net Framework 기본 - 인터페이스 (2) (0) | 2015.10.29 |
#042_닷넷(.NET)_.Net Framework 기본 - 인터페이스 (1) (0) | 2015.10.29 |
#041_닷넷(.NET)_.Net Framework 기본 - 인터페이스 Intro (0) | 2015.10.29 |