python class - 다형성 동적 바인딩

|

패스트캠퍼스 웹 프로그래밍 수업을 듣고 중요한 내용을 정리했습니다.
개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
이 포스팅에서는 python 클래스 실습문제를 다시 정리해봅니다.


다형성 동적 바인딩

다형성은 관용적으로는 일반적으로 하나의 코드가 여러 역할을 한다는 의미이다. 예로 들어 str()이라는 내장 함수는 인수로 전달되는 객체의 타입과 관계없이 해당 객체를 문자열 형으로 형변환을 시켜준다. 이는 str()함수가 다형성을 띄고 있다는 말이며, 하나의 함수가 여러 타입의 객체를 처리할 수 있도록 설계되어 있음을 나타낸다.

동적 바인딩은 타입을 신경쓰지 않고 인스턴스를 사용할 수 있게 해주는 방식이다. 위의 다형성과 맞물려 다형성을 띄는 함수에 관계없이 다양한 객체들을 인수로 전달할 수 있다.

동적 바인딩은 속성 검색과정을 통해서 이루어 진다. obj.attr을 통해 속성에 접근하면, 인스턴스에서 attr을, 다음엔 클래스에서, 그 다음에는 상속받은 클래스에서 해당 속성을 검색하며 가장 먼저 검색한 속성을 반환한다.

동적으로 속성을 바인딩하는 과정은 obj객체의 타입에 영향받지 않으며, 오로지 해당 객체가 attr에 해당하는 속성을 가졌는지만 검사한다. 위의 str()함수를 예로 들면, str()함수는 전달된 인수의 __str__()속성을 리턴한다.

이러한 작동방식은 ‘오리처럼 울고 걸으면 그것은 오리이다.’라는 말에서 유래한 덕 타이핑(duck typing)이라고 한다. 덕 타이핑은 동적 타이핑의 한 종류이며, 객체가 가진 변수와 메서드가 해당 객체의 타입을 결정함을 의미한다.