C#에서 클래스는 다중상속을 금지하였기 때문에 하나의 부모 클래스만 상속을 받을 수 있다.
그러다보니 발생하는 대표적인 문제점이 있는데 예를들면, '문'이라는 오브젝트가 '잠금'이라는 기능을 가진 클래스와 '출입구'라는 기능을 가진 클래스를 동시에 상속받지 못하다 보니 둘중에 하나의 기능만 하게 되는 문제가 발생한다.
이러한 문제점을 보완하기 위해 필요한것이 인터페이스다.
1. 인터페이스
1) 특징
- 인터페이스는 직접 구현하지 않고 인터페이스를 가지는 클래스에서 반드시 구현해야 한다는 특징이 있음.
- 인터페이스의 첫글자 이름은 "I"로 해야한다는 암묵적인 룰이 있음 (ex. IEnterable, IOpenable 등)
2) 사용법
(1) 인터페이스를 생성하고 상속받는 클래스에서 반드시 구현해야하는 함수를 정의함
(2) 상속받고자 하는 클래스에 인터페이스를 상속받도록 설정하고, 정의했던 함수를 반드시 구현하도록 함.
(다중 인터페이스 상속을 할 경우 ','로 구분하여 작성)
(3) 끝
- 사용법이 아주 간단하다
3) 장단점
(1) 장점
- 다중 상속이 구현 가능해진다. => 유연한 설계가 가능해진다
- 특정 메서드나 속성의 구현을 강제함으로써 팀프로젝트의 경우 코드 일관성을 유지시켜줄 수 있다.
- 클래스 간의 의존성이 줄어들어 코드 유지보수성이 증가한다
(2) 단점
- 다중 상속 시 충돌 가능성
ex. IFlyable 의 Move메서드와 ISwimmable의 Move 메서드가 있을 경우 IFlyable.Move(), ISwimmable.Move() 처럼 명시적으로 분리하여 구현해야 한다.
- 인터페이스를 지나치게 사용하면 코드가 복잡해지고 가독성이 떨어 질 수 있다. 특히 팀프로젝트에서 분리된 인터페이스의 기능을 파악하느라 시간이 불필요하게 소요될 가능성이 있다.
(3) 요약
: 몇가지 단점이 있긴 하지만 대체로 인터페이스만 검색해도 단점보다는 장점만 나올만큼 장점이 뚜렷해서 단점이 느껴지지 않는다고 보는 프로그래밍 기능이다. 추가적으로 상태패턴에서도 용이하게 사용했던걸로 기억한다. 추후, 디자인 패턴을 다룰때 한번 더 언급하도록 해야겠다.
** 틀린 정보나 부족한 저에게 줄 수 있는 정보를 알고 계시다면 댓글로 남겨주세요 **
'C# 공부' 카테고리의 다른 글
[C#] 가비지 컬렉터 (Garbage Collector) (1) | 2025.04.11 |
---|---|
[C#] 소숫점 반올림, 올림, 내림 (Mathf.Round /Mathf.Ceil / Mathf.Floor) (0) | 2025.03.30 |
[C#] 스트링빌더 (StringBuilder) (1) | 2025.03.15 |
string 메서드 (0) | 2024.11.09 |