인터페이스 (객체 지향 프로그래밍)

객체 지향 프로그래밍에서 인터페이스(interface) 또는 프로토콜(protocol) 타입은 클래스의 추상으로 작용하는 자료형이다. 이것은 일련의 메서드 시그니처를 설명하며, 그 구현은 서로 반드시 관련될 필요는 없는 여러 클래스가 제공할 수 있다. 인터페이스에 나열된 메서드를 제공하는 클래스는 인터페이스를 구현한다고 말하거나, 프로토콜을 채택한다고 말한다.

인터페이스는 캡슐화를 달성하고 결합도를 낮추는 데에 유용하다. 객체가 완전히 캡슐화되면 인터페이스는 다른 객체가 객체에 접근할 수 있는 유일한 방법이다. 예를 들어, 자바에서 Comparable 인터페이스는 구현하는 클래스가 구현해야 하는 compareTo() 메서드를 지정한다. 이는 예를 들어 정렬 메서드가 클래스의 내부 특성에 대해 아무것도 알 필요 없이(이러한 두 객체가 compareTo()를 통해 비교될 수 있다는 점을 제외하고) Comparable 인터페이스를 구현하는 모든 타입의 객체 컬렉션을 정렬할 수 있음을 의미한다.

 예시 

일부 프로그래밍 언어는 인터페이스에 대한 명시적인 언어 지원을 제공한다: 에이다, 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__ 메서드를 구현하고 컬렉션으로 사용될 수 있다.

하스켈과 같은 언어의 타입 클래스나 ML 및 OCaml의 모듈 시그니처는 인터페이스가 사용되는 많은 용도로 사용된다.

러스트에서는 인터페이스를 트레이트(traits)라고 부른다. 러스트에서 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);
    }
}

 같이 보기 
 콘셉트 (제네릭 프로그래밍)
 위임 (프로그래밍)
 오브젝티브-C의 프로토콜
 클래스 (컴퓨터 과학)
 캡슐화 (컴퓨터 과학)
 공개 인터페이스
 인터페이스 (자바)
 응용 프로그래밍 인터페이스
 인터페이스 (컴퓨팅)
 컴퓨터 과학 기본 주제 목록

 내용주 

 각주 

분류:객체 지향 프로그래밍
분류:자료형