본문 바로가기

지식

duck typing(덕 타이핑)(.feat 정적,동적)

멀리서 어떤 새를 볼때

오리걸음에 오리소리를 내면

오리라는거다! 

 

듣고 바로 이해를했다

자바에서는 int num 하면 num은 int형으로 확정이지만

 

파이썬에서 

a = 1 

a = [1, 2, 3] 

a = ( 'apple' )

 

이러면 a는 int형이 되기도 다른 형이 되기도한다.

파이썬은 해당 변수의 테이터 타입을 명시하지않고 컴퓨터가 결정하게 만든다!

 

BUT!! 이것을 ducktyping이라고 하지는 않고

이런것을 동적타이핑(Dynamic typing)이라고 한다.

덕타이핑은 동적타이핑의 종류이다

 

그러면 덕타이핑은?

 

class Parrot:
    def fly(self):
        print("Parrot flying")

class Airplane:
    def fly(self):
        print("Airplane flying")


def lift_off(entity):
    entity.fly()

parrot = Parrot()
airplane = Airplane()

lift_off(parrot) # prints `Parrot flying`
lift_off(airplane) # prints `Airplane flying`

앵무새 클래스, 비행기 클래스 서로 관계는 없는데 

fly() 메소드가 있는거만으로 호출함수에서 둘다 정상적으로 실행 

 

 

 

이거만 봐서는 무슨차이인지 모르겠다면

binding time(바인딩 타임)을 생각해보자

compile time에서는 타입 검사를하고

run time 에서는 컴파일 과정을 마치고 실행을 한다.

* compile error -문법, 타입(형)

 

위에서 int로 타입형을 제시하는것은 compile time과 관련있고

아래서 메소드에대한 내용은 runtime과 관련있는것이다.

덕타이핑은 compile 이 아닌 runtime에 관련있는 동적타이핑인것이다.

 

 

 

정리

ducktyping은 동적타이핑의 종류이다.

ducktyping은 runtime에 결정된다. 

 

 

 

 

 

 

 

 

이와 비슷한 내용이

다형성의

 overrinding(오버라이딩)과 overloading(오버로딩)이다

오버라이딩은 상속받은 메소드를 하위에서 재정의하여 다시쓰는것
오버로딩은 같은 이름의 메소드를 파라미터개수나 타입을 바꿔서 재정의해서 쓰는 것

 

오버라이딩은 runtime에 오버로딩은 compile에 결정

** 오버라이딩 = 동적다형성, 오버로딩 = 정적 다형성

 

 

 

 

 

 

 

 

정적타이핑은 c, c++, java 같은거

 

 

'지식' 카테고리의 다른 글

한글 바이트 byte  (0) 2022.08.12
시스템변수, 사용자변수  (0) 2022.07.11
특정 파일에 권한 부여  (0) 2022.06.06
아래 첨자 subscript  (0) 2022.06.01
JSP와 Servlet  (0) 2022.05.26