2010-08-01 3 views
7

동적 유형 지정은 런타임시 객체/비 객체 지향 구조체의 유형 정보를 검사하고 일종의 유형 오류를 던지는 것을 의미합니다. 즉, 오리와 같은 거푸집 일 경우. 다른 유형의 동적 타이핑이 있습니까 (자세한 내용을 참조하십시오).오리 타이핑이없는 동적 타이핑?

답변

1

아니요, 동적 유형 지정은 값에 유형이 있지만 변수에없는 경우이므로 대부분의 유형 점검은 런타임에 수행됩니다. 그래서, 기본적으로, 가치가 오리처럼 걷거나 쑤셔지면 오리입니다. 그렇지 않으면 오류가 발생합니다. Duck typing은 변수가 foo '에 올바른 속성이 있거나 해당 메소드를 실행할 수있는 경우에만 메소드가 실행된다는 점을 보장하는 동적 유형 지정 기능을 설명합니다.

+4

올바르지 않습니다. 타입을 검사하지 않고, 타입이 어떤 연산자 X를 수행하거나 Y라는 속성을 가질 수 있다는 것만을 알 수 있습니다. 변수에 대해 toString()을 호출하면, 그것이 객체이고 toString() 메소드를 구현하는 경우 , 그러면 호출됩니다. 그렇지 않으면 오류가 발생합니다. 그러나 많은 유형이이 요구 사항을 충족시킬 수 있습니다. – siride

+0

좋은 지적, 편집하겠습니다 –

5

네, 물론입니다. 오리 타이핑 (duck-typing)은 현 시점에서 가치의 유형이 지금 당장 가지고있는 분야와 방법에 근거한다고 말하는 관용구입니다. 동적 타입 지정은 타입이 런타임 변수 값과 관련이 있으며 정적 변수 및 매개 변수 값과는 관련이 없다고 말합니다. 이 둘 사이에 차이가 있으며, 전자없이 후자를 사용할 수 있습니다.

예를 들어 PHP로 프로그래밍하고 OO를 사용하지 않고 기본 유형으로 제한하는 경우 오리 유형 지정을 사용하지 않고 동적 유형 지정을 사용하게됩니다.

+0

예를 좀 더 자세히 설명해 주시겠습니까? 간단히 말하면 런타임시 유형 검사는 동적 유형 지정이며 객체의 메소드 및 특성 테스트를 기반으로 검사하는 것은 오리 입력이라고합니다. 즉, 둘 사이의 차이점이 * 객체 *와 관련이 있다고 말하겠습니까? 두 경우 모두 (비 오리 동적 및 오리 타이핑), 특정 조작 (메소드 호출, 추가 등)과 입력 값의 호환성이 런타임에서 점검되는 것처럼 보입니다. 그게 맞습니까? 유일한 차이점은 오리 타이핑이 오브젝트와 관련되어 있으며 동적 타이핑이 더 일반적이라는 것입니다. – EOL

+1

@EOL : 타입 검사는 동적 타이핑입니다 (실제로 '동적 검사'라고 불려야하며, 오리가 타이핑하는 것을 확인합니다.) 'objects objects'는 정확하다고 말하는 것은 다소 모호 합니다만, 같은 페이지에 모두 있습니다. –

+0

고마워요! 이제 두 사람의 차이점을 더 잘 볼 수 있습니다. – EOL