1. Duck typing

파이썬에는 덕타이핑이라는 특이한 특징이 있다. 이것은 타입을 미리 정하는게 아니라 실행이 되었을 때 해당 method들을 확인하여 타입을 정한다.

def interact_with(self, comer): #python version
        if comer._name == "Goblin":
            print(comer._active)
            print('\033[1;31;46mPlayer meets a Goblin! Player\'s HP - %d.\033[0m' %(comer._damage))
            
            self._hp -= comer.get_damage()
            comer.set_active(False)
            return False
            
 
 public boolean interactWith(Object comer) { #java version
		if (comer instanceof Goblin) {
			System.out.printf("\033[1;31;46mPlayer meets a Goblin! Player\'s HP - %d.\033[0m%n", ((Goblin)comer).getDamage());
			this.hp -= ((Goblin)comer).getDamage();
			((Goblin)comer).setActive(false);
			return false;
		}
		return false;
	}

첫번째 interact_with function은 파이썬에서 쓰이는 함수인데 보는 것과 같이 comer의 type을 일일히 적을 필요 없어 complie할때 타입을 정해준다. 반면에 자바같은 경우 코드를 적을때 comer의 type을 instanceof 를 이용하요 Goblin으로 명시하여야 해당 method 들을 사용 할 수 있다.

 

2. 장점

타입을 일일히 명시 할 필요가 없어서 편리하고 유용하다.

 

 

3. 단점

컴파일시 런타임 자료형 오류가 발생할 수 있다.

이런 오류가 발생시 정확히 어디서 잘못되었는지 오류를 찾기 어려워 할 수 있다.

 

 

4. My Review

나는 Moving in planet 프로젝트를 통해 이 duck typing의 효율성을 확실히 느낄 수 있었다. 이 프로젝트에서는 Map 이라는 object에 3가지 종류의 cell들이 있었는데 각각 다른 method 들을 가지고 있었다. 그래서 자바에서는 이것을 일일히 구분하여 적고 신경쓰면서 적었어야 했지만 파이썬에서는 그냥 해당 Map의 method 들을 다른 명시 없이 바로 사용해도 문제가 없어서 굉장히 편리했다. 하지만 나중에 컴파일 에러가 생기면 정확히 어디서 에러가 나는지 찾기 힘들 수 도 있다는 것은 확실히 어떤 느낌인지 알 것 같을 수 있었다.

'Language' 카테고리의 다른 글

[Python] What is static scoping in python?  (2) 2023.02.28
[Perl] What is dynamic scoping in Perl ?  (3) 2023.02.14
[Python] What is Dynamic typing?  (2) 2023.01.30
[C 언어] How to read file in C  (2) 2023.01.18
[COBOL] What is COBOL ?  (0) 2023.01.10

+ Recent posts