인터페이스
기술노트
뼈대 인터페이스 (Interface)
인터페이스는 객체 지향 프로그래밍에서 객체들이 따라야 할 약속이나 규격을 정의한 것입니다. 어떤 객체가 특정 인터페이스를 구현한다는 것은, 그 인터페이스에 정의된 모든 메서드를 반드시 구현하겠다는 의미입니다.
인터페이스는 실제 구현 코드를 포함하지 않고, 오직 메서드의 이름, 매개변수, 반환 타입 등 메서드 시그니처(signature)만을 가집니다. 마치 건물의 설계도와 같습니다.
🧐 인터페이스의 역할
- 구현 강제 : 특정 인터페이스를 구현하는 클래스는 인터페이스의 모든 추상 메서드를 반드시 구현해야 하므로, 일관된 개발 표준을 유지할 수 있습니다.
- 다중 상속 지원 : 대부분의 객체 지향 언어는 클래스의 다중 상속을 지원하지 않지만, 인터페이스는 여러 개를 동시에 구현할 수 있습니다. 이를 통해 클래스는 다양한 특징(역할)을 가질 수 있습니다.
- 느슨한 결합 (Loose Coupling) : 코드가 실제 구현 클래스가 아닌 인터페이스에 의존하게 만들면, 나중에 구현 클래스가 변경되거나 다른 것으로 교체되더라도 코드 수정의 영향을 최소화할 수 있습니다.
🔌 예시: USB 포트
USB 포트(인터페이스)는 키보드, 마우스, 외장하드 등 다양한 장치(구현 클래스)를 연결하는 표준 규격입니다. 컴퓨터는 장치가 무엇이든 USB 포트라는 표준을 통해 데이터를 주고받을 수 있습니다. 각 장치의 내부 동작 방식은 다르지만, USB 규격만 따르면 모두 컴퓨터에 연결하여 사용할 수 있습니다. 이것이 인터페이스의 역할입니다.
💡 개발자 핵심 Point
- 인터페이스는 무엇을(What) 할 수 있는가를 정의하고, 실제 구현은 클래스가 어떻게(How) 할 것인가를 담당하도록 역할을 분리합니다.
- 다형성을 구현하는 핵심적인 방법으로, 인터페이스 타입의 변수에 여러 다른 구현 객체를 할당하여 유연하게 코드를 작성할 수 있습니다.
- 협업 시, 인터페이스를 먼저 정의해두면 각자 맡은 구현을 독립적으로 개발한 뒤 나중에 통합할 수 있어 생산성이 향상됩니다.