yeonuel-tech

파이썬에서는 오버로딩과 오버 라이딩이 적용될까? 본문

programing-languages/Python

파이썬에서는 오버로딩과 오버 라이딩이 적용될까?

여늘(yeonuel) 2024. 7. 17. 12:12

파이썬은 동적 언어이다. 즉, 컴파일이 없고 인터프리터가 존재하는 언어이다.

해당 언어의 가장 큰 장점은 유연함이다. 런타임 시점에 타입을 변경하거나 메서드를 추가하는 작업을 할 수 있다.

 

오버로딩이란? "같은 이름의 메서드를 여러개 정의하는 것"

오버로딩의 조건으로는 크게 3가지가 있다.

- (1) 메서드 이름이 같아야함

- (2) 매개변수의 개수 및 타입이 달라야함

- (3) 반환 타입이 같아야함 

 

오버라이딩이란? "조상에서의 메서드를 자손에서 재정의하는 것"

오버라이딩의 조건으로는 크게 3가지가 있다.

- (1) 메서드의 선언부가 일치해야함

- (2) 자손에서 조상 보다 접근 제한자가 좁으면 안됨

- (3) 자손에서 조상보다 더 큰 범위의 예외를 선언할 수 없음

 

본론으로 들어가서 오버로딩은 가능할까? 불가능하다.

생각을 해보면, 파이썬의 객체는 맵과 같은 구조이다. 즉, 멤버들이 모두 맵에 등록된다.

따라서, 오버로딩을 할 경우에 같은 이름으로 여러개의 함수 로직을 등록할 수 없기 때문에 오버로딩이 불가능하다.

 

오버라이딩은 가능할까? 가능하다.

파이썬에서는 메서드를 찾을 때 상속 계층도를 이용하여 찾아간다.

즉, 부모 객체의 영역과 자식 객체의 영역이 분류되어 서로 연결되어 있다. 따라서 같은 이름의 함수를 서로 다른 영역에 

등록하는 것이기 때문에 가능하다.

 

이를 그림으로 그려보면 다음과 같다