See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
덕 타이핑 - 위키백과

덕 타이핑

위키백과 ― 우리 모두의 백과사전.

컴퓨터 프로그래밍 분야에 있어서, 덕 타이핑(duck typing)이란, 객체가 현재 가지고 있는 메소드 및 변수의 집합이 객체의 유효한 시맨틱스(semantics)를 결정하는 타이핑(typing) 방식이다. 동적 타이핑의 한 종류이다. 어떤 클래스로 하여금 특정한 클래스를 상속받게 함으로써 객체의 시맨틱스(semantics)를 결정하는 방식과 대조된다. "덕 타이핑"이라는 용어는 덕 테스트에서 유래했다. 덕 테스트는 다음과 같은 구절로 표현된다:

그것이 만약 마치 오리(덕, duck)처럼 꽥꽥거린다면, 나는 그것을 오리라 부르겠어요.

덕 타이핑에서는 객체의 타입에 신경쓰기보다는 객체가 사용되는 양상에 집중한다. 예를 들면, 덕 타이핑을 지원하지 않는 언어에서는, 프로그래머는 객체 Duck을 인자로 받아 객체의 walk 메소드와 quack 메소드를 호출하는 함수를 만들 수 있다. 덕 타이핑을 지원하는 언어에서는, 위와 같이 만들어 둔 함수는 어느 형의 객체든 받아다가 객체의 walk 메소드와 quack 메소드를 호출한다. walk 메소드나 quack 메소드를 호출 할 시점에서, 그 객체에 walk 메소드나 quack 메소드가 없다면, 함수는 런 타임 에러를 발생시킨다. 개체가 올바른 walk 메소드나 quack 메소드를 갖고 있기만 한다면 이 함수는 그 객체를 받아들일 수 있는 것이다. 위에서 언급한 인용문의 뜻을 풀이하면 그와 같으며, 그 인용문이 이러한 방식의 타이핑(typing)에 "덕 타이핑"("duck typing")이란 이름이 붙은 이유가 된다.

목차

[편집] 예제

다음 덕 타입트(duck typed) 언어의 수도-코드이다:

function calculate(a, b, c) => return (a+b)*c

a = calculate (1, 2, 3)
b = calculate ([1, 2, 3], [4, 5, 6], 2)
c = calculate ('apples ', 'and oranges, ', 3)

print to_string a
print to_string b
print to_string c


결과는 다음과 같다:

9
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]
apples and oranges, apples and oranges, apples and oranges, 


[편집] 파이썬 예제

class Duck:
        def quack(self): print u"꽥꽥 !"
        def feathers(self): print u"오리가 백색 및 회색 깃털을 가지고 있네요."
 
class Person:
        def quack(self): print u"사람이 오리를 흉내내네요."
        def feathers(self): print u"사람이 바닥에 떨어진 깃털을 주어서 다른 사람에게 보여주네요."
 
def in_the_forest(duck):
        duck.quack()
        duck.feathers()
 
def game():
        donald = Duck()
        john = Person()
        in_the_forest(donald)
        in_the_forest(john)

[편집] 개념적 예제

[편집] 다른 형 체계와의 비교

[편집] 비판

[편집] 역사

[편집] 구현

[편집] 스몰토크

객체 지향 언어인 스몰토크는 변수나 메소드 인자에 대한 형 선언이 없으므로, 당연히 덕 타이핑을 지원하고 있다. 스몰토크에서는 동일한 프로토콜(protocol)을 구현하는 클래스들은 보통 동일한 상속 계층에 속하나, 꼭 그럴 필요는 없다.

[편집] 파이썬

파이썬에서 덕 타이핑은 매우 많이 쓰이고 있다. 파이썬 튜터리얼의 용어 항목은 덕 타이핑을 다음과 같이 설명하고 있다:

Pythonic programming style that determines an object's type by inspection of its method or attribute signature rather than by explicit relationship to some type object ("If it looks like a duck and quacks like a duck, it must be a duck.") By emphasizing interfaces rather than specific types, well-designed code improves its flexibility by allowing polymorphic substitution. Duck-typing avoids tests using type() or isinstance(). Instead, it typically employs hasattr() tests or EAFP (Easier to Ask Forgiveness than Permission) programming.

[편집] 루비

[편집] 콜드퓨전

이 문서는 토막글입니다. 서로의 지식을 모아 알차게 문서를 완성해 갑시다.


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -