이번 포스팅을 통해서 파이썬에서 클래스를 만들어 사용하는 방법을 알아보자.
클래스는 부모 클래스와 자식 클래스로 분류할 수 있고, 자식 클래스는 파생 클래스 라고도 불리운다. 자식 클래스는 부모 클래스에서 상속받은 속성과 메소드를 그대로 사용할 수 있다는 특징을 가지고 있다.
클래스의 생성 (부모 클래스)
아래와 같이 car라는 클래스를 만들어 보자.
이 클래스는 자동차의 모델과 색상을 입력 받아서, 이들 정보를 화면에 출력하는 기능을 한다.
class car: def __init__(self, model, color): self.model = model self.color = color def get_model(self): print(f'자동차의 모델은 {self.model} 입니다.') def get_color(self): print(f'자동차의 색상은 {self.color} 입니다.') mycar = car('그랜저', '검정') mycar.get_model() mycar.get_color()
위 코딩의 실행결과는 아래와 같다.
자동차의 모델은 그랜저 입니다.
자동차의 색상은 검정 입니다.
car 클래스는 model 및 color 라는 2개의 속성을 가지고 있다.
mycar라는 car 클래스의 인스턴스를 생성할 때, 자동차의 모델과 색상을 전달 받아서 각각 self.model와 self.color라는 변수에 저장한다. get_model(self)와 get_color(self)는 각각 자동차의 모델과 색상을 출력하는 car 클래스의 메소드이다.
파생 클래스의 예제 (자식 클래스)
아래는 car라는 부모 클래스를 이용하여 taxi 라는 파생 클래스를 만드는 예제이다.
class car: def __init__(self, model, color): self.model = model self.color = color def get_model(self): print(f'자동차의 모델은 {self.model} 입니다.') def get_color(self): print(f'자동차의 색상은 {self.color} 입니다.') class taxi(car): def __init__(self, model, color, owner): # 개인택시 vs 법인택시 super().__init__(model, color) self.owner = owner def get_owner(self): print(f'자동차는 {self.owner}택시 입니다.') mycar = car('그랜저', '검정') mycar.get_model() mycar.get_color() mycar = taxi('소나타', '노랑', '개인') mycar.get_model() mycar.get_color() mycar.get_owner()
위 코드를 실행시킨 결과는 아래와 같다.
자동차의 모델은 그랜저입니다.
자동차의 색상은 검정 입니다.
자동차의 모델은 소나타입니다.
자동차의 색상은 노랑 입니다.
자동차는 개인택시 입니다.
새롭게 만든 taxi 클래스는 부모 클래스인 car 클래스의 자식 클래스이다.
taxi 클래스는 car 클래스가 가지고 있는 자동차 모델과 색상의 속성을 똑같이 가지고 있지만, 자동차가 “개인택시”인지 “법인택시”인지를 구분하는 owner라는 속성이 하나 더 추가되어 있다. taxi 클래스의 속성은 아래와 같이 정의한다.
def __init__(self, model, color, owner):
또한, 자동차 모델과 색상에 대한 속성인 model과 color는 부모 클래스인 car 클래스로 부터 상속받아 사용한다는 것을 아래와 같이 정의한다. 따라서, 자식 클래스인 taxi 클래스에서 model과 color를 추가로 언급하지 않아도 사용이 가능하다. 다만, taxi 클래스에서 새롭개 추가된 소유자를 구분하는 변수인 owner만을 정의해 준다.
super().__init__(model, color)
self.owner = owner
위 taxi 클래스는 model과 color 속성, 그리고 get_model() 과 get_color() 메소드를 정의하지 않고, 부모 클래스에서 정의된 속성과 메소드를 그대로 사용한다. 다만, taxi 클래스에서 추가적으로 필요한 owner 속성과 get_owner() 메소드만을 새롭게 정의하고 있다.