LANGUAGES/Python

[Python] 파이썬 오버라이딩과 오버로딩

조별하 2023. 5. 16. 00:08

🍃 파이썬에서의 다형성

Java 언어의 다형성을 다루면서 오버라이딩과 오버로딩에 대해 알아보았다. 그렇다면 Python에서도 언어의 다형성이 있는지 살펴보려고 한다.

Java 오버라이딩과 오버로딩

 

[Java] Java 다형성과 오버로딩, 오버라이딩

🍃 Java 다형성 ✔️ 다형성 이란 하나의 함수, 클래스가 다양한 방법으로 동작하는 것을 말한다. Java에서는 주로 오버로딩(Overloading)과 오버라이딩(Overriding) 을 통해서 다형성을 지원한다. 🌱 오

geminihoroscope.tistory.com

 

🌱 오버로딩(Overloading)

✔️ 파이썬에서는 오버로딩을 정식으로 지원하지 않는다고 한다. 하지만 구현은 가능하지만 오버로딩을 남발하면 코드가 복잡해진다.

 

✔️ 파이썬에서는 연산자 오버로딩을 사용할 경우가 많이 있는데 이는 연산자(더하기, 빼기, 나누기, 곱하기)를 객체끼리 사용할 수 있게 하는 기법으로 연산자 오버로딩을 사용하면 아래와 같이 동작할 수 있다.

class HouseCho:
    lastname = "조"
    def __inint__(self, name):
        self.fullname = self.lastname + name
    def __add__(self, other):
        print(f"{self.fullname}, {other.fullname} 결혼했네")

class HouseLee(HouseCho):
    lastname = "이"
    def travel(self, where, day):
        print(f"{self.fullname}, {where}여행 {day}일 가네.")

pey = HouseCho("응용")
juliet = HouseLee("줄리엣")
print(pey + juliet)   <---- 연산자 오버로딩 호출

조응용, 이줄리엣 결혼했네.

 

🌱 오버라이딩(Overriding)

✔️ 오버라이딩은 부모 클래스에서 정의한 함수를 자식 클래스에서 변경하거나 상속받아 사용하는 것을 의미한다. 부모 클래스의 함수 이름, 기본적인 기능은 그대로 사용하지만 원하는 함수를 커스텀 하여 사용할 때 사용한다.

class HouseCho:
    lastname = "조"
    def __init__(self, name):
        self.fullname = self.lastname + name
    def travel(self,where):
        print("{0}, {1} 여행을 가다." .format(self.fullname, where))
    def love(self, other):
        print("{0}, {1} 사랑에 빠졌네." .format(self.fullname, other.fullname))
    def __add__(self, other):
        print("{0}, {1} 결혼했네." .format(self.fullname, other.fullname))


class HouseLee(HouseCho):
    lastname = "이"
    def travel(self, where, day):
        print("{0}, {1}{2} 여행 가네." .format(self.fullname, where, day))

cho = HouseCho("이야")
cho.travel("1개월")

lee = HouseLee("정아")
lee.travel("2개월", "15일")