덕 타이핑

Duck typing

컴퓨터 프로그래밍에서의 오리 입력은 오리 테스트의 응용 프로그램입니다."만약 그것이 오리처럼 걷고 오리처럼 울부짖는다면, 그것은 반드시 오리일 것이다. - 어떤 물체가 특정한 목적을 위해 사용될 수 있는지 판단하기 위해서.주격형에서는 객체라고 선언된 경우(또는 객체 상속과 같은 메커니즘을 통해 유형과의 연관성이 추론된 경우) 객체는 지정된 유형입니다.덕 타이핑에서 개체는 해당 [1][2]유형에 필요한 모든 메서드와 속성을 가지고 있는 경우 해당 유형의 개체입니다.덕 타이핑은 특정 개체와 유형의 요구 사항 사이의 사용 기반 구조적 동등성으로 볼 수 있습니다.구조 유형 동등성에 대한 자세한 설명은 구조 유형을 참조하십시오.

이것은 Python 3의 간단한 예시로, 오브젝트가 지원되지 않는 방식으로 사용될 때까지 모든 컨텍스트에서 어떻게 사용될 수 있는지를 보여줍니다.

학급 오리:     방어하다 수영하다(자신):         인쇄물("오리 수영")      방어하다 날다(자신):         인쇄물('오리 날리기')  학급 고래:     방어하다 수영하다(자신):         인쇄물("고래 수영")  위해서 동물성  [오리(), 고래()]:     동물성.수영하다()     동물성.날다() 

출력:

오리 헤엄 오리 날기 고래 헤엄 속성 오류: '고래' 개체에 '파리' 특성이 없습니다.

오리들이 헤엄칠 수 있기 때문에 헤엄칠 수 있는 모든 것이 오리라고 가정한다면, 우리는 고래를 오리로 간주할 것입니다. 하지만 날 수 있어야 한다고 가정한다면, 고래는 오리로 간주되지 않을 것입니다.

정적으로 입력된 언어

Boo [4][5]D와 같은[3] 일부 정적 유형의 언어에서는 클래스 유형 검사를 컴파일 시간이 아닌 런타임에 수행하도록 지정할 수 있습니다.

다른 시스템과의 비교

구조형 시스템

덕 타이핑은 구조 타이핑과 비슷하지만 구조 타이핑과는 다릅니다.구조 타이핑은 유형의 구조에 따라 유형 호환성과 동등성을 결정하는 정적 타이핑 시스템인 반면 덕 타이핑은 동적이며 런타임에 액세스하는 유형의 구조 중 해당 부분에만 의해 유형 호환성을 결정합니다.

TypeScript [6]Elm [7]언어는 다양한 수준의 구조 입력을 지원합니다.

프로토콜 및 인터페이스

프로토콜과 인터페이스는 일부 메서드, 연산자 또는 동작을 정의할 필요가 있음을 명시적으로 선언하는 방법을 제공합니다(예: quack() 메서드가 있어야 함).서드파티 라이브러리가 변경할 수 없는 클래스를 구현하는 경우 클래스가 실제로 인터페이스 요건을 충족하더라도 클라이언트는 해당 라이브러리가 모르는 인터페이스를 사용하여 해당 클래스의 인스턴스를 사용할 수 없습니다.이 문제의 일반적인 해결 방법은 어댑터 패턴입니다.반면 덕 타이핑에서는 어댑터 없이 오브젝트를 직접 받아들입니다.

템플릿 또는 범용 유형

템플릿 또는 일반 함수 또는 메서드는 정적 타이핑 컨텍스트에서 덕 테스트를 적용합니다.이것에 의해, 일반적으로 정적 타입 체크와 동적 타입 체크의 장점과 단점이 모두 표시됩니다.또한 실행 시 실제로 호출된 메서드만 구현하면 되는 반면 템플릿은 컴파일도달할 수 없음증명할 수 없는 모든 메서드를 구현해야 한다는 점에서 duck 타이핑은 더 유연합니다.

Java, Scala 및 Objective-C와 같은 언어에서는 리플렉션을 사용하여 객체가 메서드를 구현하는지 여부를 검사하거나 런타임에 필요한 메서드를 추가할 수도 있습니다.

예를 들어 Java의 MethodHandle API는 이러한 [8]방식으로 사용할 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Glossary — Python 3.7.1 documentation". docs.python.org. Retrieved 2018-11-08.
  2. ^ "Python Duck Typing - Example". Techie Hours. 2020-06-28. Retrieved 2020-07-26.
  3. ^ Duck 타이핑 2008년 10월 6일 Wayback Machine에서 아카이브 완료
  4. ^ "Dynamic classes and duck typing".
  5. ^ "Metaprogramming - duck typing in D".
  6. ^ "SE Radio Episode 384: Boris Cherny on TypeScript". se-radio.net. Retrieved 2019-10-25.
  7. ^ Czaplicki, Evan. "Core Language · An Introduction to Elm". Retrieved 30 January 2017.
  8. ^ "StackOverflow: Implement duck typing using java MethodHandles". Retrieved 13 June 2020.