[python] class 상속

신두다·2022년 6월 14일
0

공부노트

목록 보기
9/12

NOTE

  • 오늘 내가 클래스 상속에 대해서 잘 모르고 있다는 사실을 발견했다.
  • 클래스 상속에 대해서 공부한 내용을 간단히 기록해본다. 이미 알고 있는 건 최대한 간단히 남길 거다.
  • 점프투파이썬의 클래스 파트를 참고했음을 밝힌다.

클래스(class)란?

  • 파이썬에서 클래스는 필수적으로 사용해야하는 것은 아니지만, 잘 활용하면 우리가 얻을 수 있는 이익은 상당하다고 한다.
  • 점프투파이썬에서 설명하고 있는 클래스에서 내 이해를 가장 도왔던 건 계산기 만들기였다.
  • 더하기 기능이 들어간 계산기를 만드는 아래와 같은 코드를 만들었다고 해보자. (출처 - 점투파)
result = 0

def add(num):
    global result
    result += num
    return result
  • 만약 위 계산기가 하나가 아니라 2개, 3개, .. 100개가 필요하다면? 클래스 없이는 위 코드와 똑같은 걸 100개 만들어야 한다.
    • 예. result1 = 0 / def add1(num), result2 = 0 / def add2(num) ... 이런 식으로 100개!!
  • 파이썬의 클래스는 이런 반복을 피해줄 수 있도록 도와준다. 아래와 같이 Calculator 클래스를 만들어두면 그 이후에는 cal1, cal2와 같이 객체가 그 역할을 대신 수행해준다. (코드가 정말 많이 줄거야!!)
class Calculator:
    def __init__(self):
        self.result = 0

    def add(self, num):
        self.result += num
        return self.result

cal1 = Calculator()
cal2 = Calculator()
  • 참고로 __init__은 해당 객체가 생성되자마자 실행되는 것으로 생각하면 된다. 아까 클래스로 만들기 전에 result = 0 이렇게 기본으로 깔고 가는 것이 필요했던 것처럼!
  • 만약 객체로 할당한 클래스 내의 함수를 쓰고 싶다면? cal1.add()와 같이 쓸 수 있다.또한 클래스 내부에 있는 변수들 같은 경우에도 동일하게 접근이 가능하다. cal1.result를 하면 0이 나오는 것처럼!

즉, 클래스란 과자 틀로 생각하면 된다. 한 번 과자틀을 만들어두면, 그 틀에 맞는 과자는 쉽게 만들어낼 수 있는 것이다.


클래스 상속 (Class Inheritance)

  • 클래스 상속이란 어떤 클래스를 만들 때 다른 클래스의 기능을 물려받을 수 있게 만든 것이다.
  • 왜 필요할까? 원래 클래스를 변경하지 않고, 내부 변수나 함수(=기능) 중 일부를 변경하고자 할 때 이 클래스 상속을 이용한다.
    • 기존 클래스를 직접 변경하지 않는 건, 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황이 있을 수도 있기 때문으로 생각해도 될 것 같다.
  • 상속은 매우 간단하다.
class MoreCal(Calculator):
    pass
  • 위와 같이 기본으로 한 상태에서 pass 대신 변경(추가/수정 등)하고자 하는 내용을 적으면, class MoreCal은 원래 클래스에 더해 해당 기능도 수행할 수 있게 된다.

내가 생각하는 상속 시 하게 되는 유형은 다음과 같다.

1. 부모 클래스에 있는 함수를 수정한다.

class MorCal(Calculator):
    def __init__(self):
        super().__init__()

    def add(self, num):
        self.result += (num*2)
        return self.result
  • 위와 같이 add 함수의 내용을 수정했다면, 자식 클래스에서 add함수는 부모 클래스의 것처럼 작동하는 게 아니라, 자식 클래스의 것처럼 작동한다. 이걸 메서드 오버라이딩(Method Overriding이라고 한다. (자식 이기는 부모 없다!)
  • 참고로 super()는 자식 클래스에서 부모 클래스의 내용을 사용하고 싶을 때 사용한다.

2. 부모 클래스에 함수를 추가한다.

  • 이건 간단하다. 그냥 함수만 추가하면 된다.
class MorCal2(Calculator):
    def add2(self, num):
        self.result += (num/2)
        return self.result
  • 이렇게 하면 자식 클래스에 add2라는 함수를 추가한 것이고, 자식 클래스에서 역시 부모 클래스에 있는 함수(가령 add)를 그대로 사용할 수도 있다.

3. 부모 클래스에 있는 기본 값을 수정한다.

  • 이게 오늘 내가 헷갈렸던 거다!!
class MorCal(Calculator):
    def __init__(self):
        super().__init__()

    def add(self, num):
        self.result += (num*2)
        return self.result
  • 여기서 만약 부모클래스의 기본 값이었던 result를 0이 아닌 10으로 하고 싶다면? 아래와 같이 바꿀 수 있다.
class MorCal3(Calculator):
    def __init__(self):
        self.result = 10

    def add(self, num):
        self.result += (num*2)
        return self.result
  • 지금이야 기본 값이 result 밖에 없었지만, 만약 변수가 훨씬 더 많았는데 그 중 일부만 수정하고 싶다면 어떻게 해야할까?
    • 바로 변경하려는 건 위와 같이 직접 입력하면 되고,
    • 부모 클래스에 있는 변수를 그대로 사용하려고 하는 건 super().__init__(name)과 같이 변수명을 super()를 통해 그대로 적어주면 된다! (변수들은 __init__에 있을 거니 당연히 거기에 적으면 되겠지!)
  • 예를 들면 이런 식으로! (계산기 원래 기능과 무관한 단순 예시임)
class MorCal(Calculator):
    def __init__(self):
        super().__init__(name)
        self.result = 10

    def add(self, num):
        self.result += (num*2)
        return self.result

클래스는 잘 알아두면 매우 유용할 것 같으니 잘 기억해두자.


References


  1. 점프투파이썬 - 클래스
profile
B2B SaaS 회사에서 Data Analyst로 일하고 있습니다.

0개의 댓글