인터페이스란?
인터페이스는 클래스와 유사한 문법을 지닌(하지만 근본적으로는 다른), "상이한 시스템간의 계약 정보를 표현한 구조체" 로 정의할 수 있다. 추상 멤버로만 구성된 Abstract Base Class와 개념적으로 유사하며, 어떤 클래스가 인터페이스를 가지는 경우 해당 인터페이스의 모든 멤버에 대한 구현을 제공해야 한다. 한 클래스는 여러 개의 인터페이스를 가질 수 있다.
쉽게 풀어서 비유하면 인터페이스는 계약서, 또는 설계도로 생각하면 된다.
인터페이스 문법
1. 정의
- 인터페이스는 구현 없이 메서드 선언만 포함되어 있다.
- class 키워드 대신 interface 키워드를 사용한다.
- I로 시작하도록 네이밍 해야 한다.
- 클래스와 다르게 인터페이스는 정의가 없고 선언만 있다. (Only declaration)
(몸통, 즉 코드가 없다는 것으로, 그 내용을 마음대로 정하고 언제든 바꿀수 있다는 특징을 갖는다)
2. 특징
- 접근 제한자가 존재하지 않는다. c# 의 컴파일러는 인터페이스 메서드를 구현할 때 public으로 선언하도록 요구한다.
- 어떤 클래스가 인터페이스를 가지는 경우 해당 인터페이스의 모든 멤버에 대한 구현을 제공해야 한다.
- 한 클래스는 여러 개의 인터페이스를 가질 수 있다. (다중 상속)
3. 제약
- 인터페이스는 생성자 메서드를 정의할 수 없다.
- 인터페이스는 정적 멤버도 정의할 수 없다.
- 인터페이스 내에서는 형식들을 중첩 사용할 수 없다. (나열형, 구조체, 클래스, 인터페이스)
- 인터페이스는 다른 인터페이스를 상속 받을 수 있지만, 구조체 또는 클래스로부터 상속받을 수 없다.
4. 인터페이스를 사용해야 하는 이유
인터페이스는 느슨한 커플링(Loose Coupling) 어플리케이션을 위해 사용한다. 즉, 느슨한 결합을 위해 사용한다는 의미인데, 느슨한 결합이란 어떤 하나의 컴포넌트의 변경이 다른 컴포넌트의 변경을 요구하는 위험을 줄이는 것을 목적으로 하는 시스템이서 컴포넌트간의 내부 의존성을 줄이는 것을 추구하는 디자인이다.
중국집을 예로 이해해 보자. 중국집 내부에는 쉐프, 조리 보조가 있고 서빙 종업원이 있다. 또한 다양한 주방 도구들과 손님들이 존재한다. 중국집이 제대로 기능하기 위해서는 이런 다양한 컴포넌트(구성요소)들이 필요한 셈이다. 그런데 중국집의 헤드 쉐프가 김철수 쉐프에서 이영자 쉐프로 바뀌게 된다면 어떻게 될까? 만약 쉐프가 바뀌어도 중국집이 제대로 운영된다면 느슨한 연결성(Loose Coupling) 관계라고 보면 된다. 하지만 쉐프가 김철수에서 다른 사람으로 바뀌게 되면 중국집 운영이 어려워 진다고 생각해 보자. 그렇다면 김철수 쉐프와 중국집은 서로 반드시 필요한 의존적인 관계, 즉 긴밀한 결합(Tight Coupling) 관계에 있는 셈이다.
즉, 인터페이스의 구성을 바꾼다 (중국집의 쉐프나 종업원을 바꾼다)고 해도 다른 클래스에는 영향이 없는 것(중국집은 정상적으로 운영되고, 다른 구성원들도 영향을 받지 않는 상황)이 바로 인터페이스이다.
느슨한 결합 관계의 장점으로는, 유연성의 증가, 유지보수의 용이가 있는데 이런 장점들이 결국 전체 프레임워크를 더욱 안정적으로 만들어 준다.
5. 장점
안정성 (유연함, 유지보수 용이)
다중 상속 가능
Plug-and-Play!
'C# 자료구조, 알고리즘, 길찾기 > 개론' 카테고리의 다른 글
[C#] 선형 자료 구조 vs 비선형 자료 구조 (2) | 2024.06.06 |
---|---|
Big-O 표기법과 알고리즘의 스피드 (1) | 2023.01.04 |