상위 질문
타임라인
채팅
관점

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

위키백과, 무료 백과사전

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]

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

러스트에서는 인터페이스를 트레이트(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

같이 보기

내용주

  1. 이 용어들의 사용은 프로그래밍 언어마다 다르다. 자바 및 거기서 파생된 언어들은 "인터페이스"를 사용하는 경향이 있는 반면, "프로토콜"은 다른 곳에서 일반적으로 더 인기가 있다.

각주

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads