본문 바로가기

엑셀/With Python

파이썬 클래스(Class) 및 상속(inheritance)에 대해 알아보기

반응형

객체 지향 언어를 이야기할 때 항상 따라오는 것이 클래스(Class)입니다. 파이썬 역시 객체 지향 언어(Object-Oriented Programming, OOP)이며 프로그래밍을 하다 보면 클래스가 많이 사용됩니다. 이전 글에서 함수에 대해 알아보았는데 이런 함수 등을 하나로 묶어 놓은 것이 클래스라고 생각하시면 될 것 같습니다.

 

객체는 속성을 지니고 있으며 클래스를 생성함으로 그 안에 묶인 함수 등은 객체가 됩니다. 이렇게 만들어진 객체를 클래스의 인스턴스(Instance)라고 말합니다. 

 

 

 

 

1. 클래스(Class)

 클래스를 선언할 때 다음과 같은 형식을 사용합니다.

 

   class 클래스명( ) :

      def _init_(self, 매개변수1, 매개변수2, ..., 매개변수n) :

         코드1

      def FuctionA(self, 매개변수A1, 매개변수A2, ..., 매개변수An) :

         코드A

      def FuctionB(self, 매개변수B1, 매개변수B2, ..., 매개변수Bn) :

         코드B

            :

            :

      def FuctionZ(self, 매개변수Z1, 매개변수Z2, ..., 매개변수Zn) :

         코드Z

 

class 클래스명( ) : 는 클래스를 지정한 클래스명으로 선언합니다. 이후에 클래스에 포함되는 코드들은 들여쓰기하여 작성하며 클래스 이름은 보통 대문자로 시작합니다.

 

def _init_(self, 매개변수1, 매개변수2, ..., 매개변수n) : 는 초기화하는 함수를 정의합니다. 매개변수에서 가장 처음에는 self가 사용되며 이는 자기 자신을 참조할 때 사용됩니다. 반드시 이름을 self로 사용하지 않아도 되며 이럴 경우 가장 맨 앞에 있는 매개변수가 self의 역할을 합니다. 함수 선언 시 def를 입력하고 다음 함수명을 사용함으로 함수를 선언합니다. 매개변수는 필요한 만큼 입력하여 사용할 수 있으며 필요 없을 때는 생략 가능합니다. 또한, 초기화 함수 역시 생략 가능합니다.

 

클래스의 인스턴스를 객체로 선언하는 방법은 다음과 같습니다.

 

  객체명 = 클래스명(인수1, 인수2, ..., 인수n)

 

2. 클래스 상속

 클래스를 새로 작성할 때 모든 코드를 새롭게 작성하여도 되지만 기존에 이미 생성되어 있는 클래스에 필요한 함수들이 있다면 생성되어 있는 클래스를 이용하여 작성하는 것이 편리합니다. 이를 상속이라 합니다. 부모님께 재산을 물려받는 것을 상속이라 말하는데 이 경우 생성되어 있던 클래스가 부모 클래스가 되고 새로 작성하는 클래스는 자식 클래스가 됩니다.

 

이렇게 부모 클래스를 상속하게 되면 부모 클래스의 객체를 자식 클래스도 사용할 수 있게 됩니다. 그런데, 이때 부모 클래스의 객체명과 동일하게 자식 클래스에 객체를 선언하게 되면 메서드 호출 시 자식 클래스에서 정의한 객체가 호출됩니다. 이와 같은 경우를 메서드 오버라이딩(Method Overriding)이라 말합니다.

 

자식 클래스에서 부모 클래스의 객체를 호출할 때는 부모 클래스명.객체명( ) 또는 super( ).객체명( )을 사용하여 호출합니다.

 

클래스를 상속할 때 다음과 같이 작성합니다.

 

   class 자식 클래스명(부모 클래스명) :

      코드

 

 

 

 

3. 예제를 통해 확인하기

주피터 노트북을 실행하시고 New-Python3를 클릭하여 코드 창을 여신 후 다음 코드를 입력합니다.

 

   class Cal :
       def add (self, a, b):
           self.result = a + b
           return self.result
       def min (self, a, b):
          self.result = a - b
           return self.result
       def multi (mul, a, b):
          mul.result = a * b
           return mul.result
       def divid (div, a, b):
          div.result = a / b
           return div.result
    
   class Pow(Cal) :
      def power (self, a):
           self.result = a * a
           return self.result
    
   cal = Pow()

   cal.multi(2,5)

 

먼저, 클래스 Cal을 선언합니다. (class Cal :)

클래스 Cal에는 add, min, multi, divid 함수가 인스턴스로 있습니다.

그리고, 클래스 Pow를 선언하면서 클래스 Cal을 상속(class Pow(Cal))하였습니다. 그리고, 함수 power를 인스턴스로 입력하였습니다.

 

cal이라는 이름으로 Pow 클래스의 인스턴스를 객체로 선언하였습니다.(cal = Pow())

 

cal.multi(2,5)는 클래스 Pow의 부모 클래스인 Calmulti함수에 인수 2와 5를 전달합니다. 그리고, 2 곱하기 5의 결괏값인 10을 출력합니다.

 

추가로 다음과 같이 입력하고 결과를 확인해보시면 함수의 결괏값들이 화면에 출력됩니다.

 

   cal.power(2)  → 결과 : 4

   cal.add(1,4)   → 결과 : 5

 

반응형