상위 질문
타임라인
채팅
관점
인터페이스 (객체 지향 프로그래밍)
위키백과, 무료 백과사전
Remove ads
객체 지향 프로그래밍에서 인터페이스(interface) 또는 프로토콜(protocol) 타입[a]은 클래스의 추상으로 작용하는 자료형이다. 이것은 일련의 메서드 시그니처를 설명하며, 그 구현은 서로 반드시 관련될 필요는 없는 여러 클래스가 제공할 수 있다.[1] 인터페이스에 나열된 메서드를 제공하는 클래스는 인터페이스를 구현한다고 말하거나,[1] 프로토콜을 채택한다고 말한다.[2]
객체가 완전히 캡슐화되면 인터페이스는 다른 객체가 객체에 접근할 수 있는 유일한 방법이다. 예를 들어, 자바에서 Comparable
인터페이스는 구현하는 클래스가 구현해야 하는 compareTo()
메서드를 지정한다. 이는 예를 들어 정렬 메서드가 클래스의 내부 특성에 대해 아무것도 알 필요 없이(이러한 두 객체가 compareTo()
를 통해 비교될 수 있다는 점을 제외하고) Comparable 인터페이스를 구현하는 모든 타입의 객체 컬렉션을 정렬할 수 있음을 의미한다.
Remove ads
예시
일부 프로그래밍 언어는 인터페이스에 대한 명시적인 언어 지원을 제공한다: 에이다, C#, D, 다트, 델파이, Go, 자바, 로그토크, 오브젝트 파스칼, 오브젝티브-C, OCaml, PHP, 래킷, Seed7, 스위프트, 파이썬 3.8. C++와 같이 다중 상속을 지원하는 언어에서는 인터페이스가 추상 클래스로 구현된다.
인터페이스 구문 예시는 다음과 같다:
class Animal { ... }
class Theropod extends Animal { ... }
interface Flyable {
void fly();
}
interface Vocal {
void vocalize();
}
public class Bird extends Theropod implements Flyable, Vocal {
// ...
public void fly() { ... }
public void vocalize() { ... }
}
명시적인 지원이 없는 언어에서는 인터페이스가 종종 관례로 존재하며, 이는 덕 타이핑으로 알려져 있다. 예를 들어, 파이썬에서 어떤 클래스든 __iter__
메서드를 구현하고 컬렉션으로 사용될 수 있다.[3]
하스켈과 같은 언어의 타입 클래스나 ML 및 OCaml의 모듈 시그니처는 인터페이스가 사용되는 많은 용도로 사용된다.
러스트에서는 인터페이스를 트레이트(traits)라고 부른다.[4] 러스트에서 struct
는 메서드를 가지지 않고, 대신 struct
가 구현하는 메서드를 선언하는 trait
를 구현한다.
trait Pet {
fn speak(&self);
}
struct Dog<'a> {
name: &'a str
}
impl<'a> Dog<'a> {
fn new(name: &'a str) -> Self {
Dog { name }
}
}
impl Pet<'a> for Dog<'a> {
fn speak(&self) {
println!("{} says 'Woof!'", self.name);
}
}
Remove ads
같이 보기
- 콘셉트 (제네릭 프로그래밍)
- 위임 (프로그래밍)
- 오브젝티브-C의 프로토콜
- 클래스 (컴퓨터 과학)
- 캡슐화 (컴퓨터 과학)
- 공개 인터페이스
- 인터페이스 (자바)
- 응용 프로그래밍 인터페이스
- 인터페이스 (컴퓨팅)
- 컴퓨터 과학 기본 주제 목록
내용주
- 이 용어들의 사용은 프로그래밍 언어마다 다르다. 자바 및 거기서 파생된 언어들은 "인터페이스"를 사용하는 경향이 있는 반면, "프로토콜"은 다른 곳에서 일반적으로 더 인기가 있다.
각주
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads