덕 타이핑
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]방식으로 사용할 수 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Glossary — Python 3.7.1 documentation". docs.python.org. Retrieved 2018-11-08.
- ^ "Python Duck Typing - Example". Techie Hours. 2020-06-28. Retrieved 2020-07-26.
- ^ Duck 타이핑 2008년 10월 6일 Wayback Machine에서 아카이브 완료
- ^ "Dynamic classes and duck typing".
- ^ "Metaprogramming - duck typing in D".
- ^ "SE Radio Episode 384: Boris Cherny on TypeScript". se-radio.net. Retrieved 2019-10-25.
- ^ Czaplicki, Evan. "Core Language · An Introduction to Elm". Retrieved 30 January 2017.
- ^ "StackOverflow: Implement duck typing using java MethodHandles". Retrieved 13 June 2020.