[ python 친해지기 #15 ] 파이썬 클래스 2탄
안녕하세요. 심심한 코딩쟁이입니다.
오늘 살펴볼 내용은 파이썬 클래스의 대한 내용입니다.
저번 시간에 클래스의 사용이유와 클래스 메서드의 구조 및 호출에 대해 공부했습니다.
못 보신 분들은 아래 글을 참고해 주시고 오늘도 새로운 내용을 알아보도록 합시다.
[ python 친해지기 #14 ] 파이썬 클래스 1탄
생성자
생성자란 클래스의 객체를 만들어주는 기능을 역할을 합니다.
만약 객체 내 변수의 값이 초기화가 필요하다면 생성자로 객체를 생성하는 동시에 초기화하는 것이 좋습니다.
예제를 보면서 이해해 봅시다.
# 생성자 예제
class Account:
def __init__(self, money): # 생성자에 매개변수를 추가해서 잔고값 초기화 가능
self.balance = money
def deposit(self, money): # 입금
self.balance += money
return self.balance
def withdraw(self, money): # 출금
if self.balance < money:
return -1
self.balance -= money
return self.balance
account1 = Account(500) # 생성자 사용. 생성자의 매개변수에 계좌의 초기 잔고값을 전달
print(account1.balance)
위 예제에서 __init__ 메서드는 클래스의 생성자로 인식됩니다.
계좌를 생성할 때 클래스 생성자의 매개변수로 계좌 초기 잔고값을 전달해 계좌의 잔고를 초기화해줍니다.
코드를 실행해 보면 계좌의 잔고가 제대로 출력되는 것을 확인할 수 있습니다.
클래스 상속
클래스를 사용하는 언어를 접해보신 적이 있다면 상속이란 단어도 들어보셨을 겁니다.
물려받다 또는 이어받다 와 같은 느낌을 클래스에 적용시킨다고 생각하시면 됩니다.
즉, 기존의 클래스는 수정하지 않고 기존 기능을 변경하거나 새로운 기능을 추가하고 싶을 때 상속을 사용합니다.
코딩을 하다 보면 클래스 상속이 필요한 상황이 생길 수 있으니 상속 방법은 꼭 알아두시기 바랍니다.
예제를 보면서 상속하는 방법에 대해 살펴보시죠.
# 클래스 상속
# 이전에 만든 계좌 클래스를 상속하는 게임 계좌 클래스를 만들어봅시다.
class Account:
def __init__(self, money): # 계좌 생성
self.balance = money
def deposit(self, money): # 입금
self.balance += money
return self.balance
def withdraw(self, money): # 출금
if self.balance < money:
return -1
self.balance -= money
return self.balance
class GameAccount(Account): # 상속할 클래스를 소괄호 안에 입력합니다.
def __init__(self, money): # 계좌 생성 (메서드 오버라이딩)
super().__init__(money)
self.gameBalance = 0
def change(self, money): # 게임 머니로 환전
if self.balance < money:
return -1
self.balance -= money
self.gameBalance += money * 100
return self.gameBalance
gameAccount = GameAccount(1000)
print("잔고 :", gameAccount.deposit(2000))
print("게임머니 :", gameAccount.change(500))
클래스 상속은 클래스를 정의하면서 이루어집니다. 다음과 같은 방식으로 정의하면 상속이 이루어집니다.
def 클래스(상속할 클래스):
....
....
만약 def B(A) 이렇게 상속을 받게 된다면 B 클래스의 객체는 A 클래스의 모든 메서드를 사용할 수 있습니다.
위 예제의 게임 계좌 클래스의 생성자 쪽 주석을 보시면 메서드 오버라이딩이란 문구를 보셨을 겁니다.
메서드 오버라이딩이란 상속한 클래스에 존재하는 메서드를 다시 정의해서 기능을 다르게 만드는 것을 의미합니다.
덮어씌운다는 느낌을 생각하시면 됩니다. 예제를 보면서 살펴보시죠.
메서드 오버라이딩 예제
앞에서 정의했던 계좌 클래스를 상속하는 마이너스 계좌 클래스를 만들면서 오버라이딩을 이해해 봅시다.
# 메서드 오버라이딩
class Account:
def __init__(self, money): # 계좌 생성
self.balance = money
def deposit(self, money): # 입금
self.balance += money
return self.balance
def withdraw(self, money): # 출금
if self.balance < money:
return -1
self.balance -= money
return self.balance
class MinusAccount(Account): # 마이너스 통장
def withdraw(self, money): # 출금 (잔고 마이너스 허용)
self.balance -= money
return self.balance
account1 = Account(100)
account2 = MinusAccount(100)
print("잔고가 부족합니다."if account1.withdraw(200) == -1 else "잔고 :", account1.balance)
print("잔고 :", account2.withdraw(200))
Account 클래스의 withdraw 메서드와 MinusAccount 클래스의 withdraw 메서드는 이름이 같지만
다른 기능을 하고 있습니다.
MinusAccount 클래스가 Account 클래스를 상속하지만 출금 기능이 다르게 동작하도록 메서드 오버라이딩을 했습니다.
참고로 생성자를 오버라이딩할 때는 super().__init__(매개변수) 를 새로운 클래스 생성자의 첫 줄에 위치시키고
수행할 코드를 작성하시면 되겠습니다.
앞에서 살펴본 클래스 상속 예제에 생성자 오버라이딩이 있으니 살펴보시기 바랍니다.
클래스 변수
클래스를 정의할 때 변수를 정의할 수도 있는데 이를 클래스 변수 라고합니다.
클래스 생성자에서 self.변수명 을 사용해 객체 변수를 만들어서 객체별로 다른 값을 유지할 수 있도록 해주었는데요.
클래스 변수는 모든 객체들이 공유하는 변수입니다.
예제를 보면서 살펴보시죠.
# 클래스 변수 예제 (심심한은행의 계좌 클래스라고 가정)
class Account:
bank = "심심한은행"
def __init__(self, money): # 계좌 생성
self.balance = money
def deposit(self, money): # 입금
self.balance += money
return self.balance
def withdraw(self, money): # 출금
if self.balance < money:
return -1
self.balance -= money
return self.balance
account1 = Account(200)
account2 = Account(300)
print(account1.bank)
print(account2.bank)
Account.bank = "삼삼한은행"
print(account1.bank)
print(account2.bank)
여기까지 파이썬 클래스 생성자, 클래스 상속, 메서드 오버라이딩, 클래스 변수에 대해서 알아보았습니다.
필요한 정보에 대한 내용이 잘 전달되었으면 좋겠네요.
궁금하신 점이나 도움이 필요하신 부분이 있다면 언제든지 댓글로 남겨주시면
성심성의껏 답변해 드리도록 하겠습니다.
감사합니다.
'programming > python' 카테고리의 다른 글
[ python 친해지기 #17 ] 파이썬 예외 처리 (0) | 2023.02.12 |
---|---|
[ python 친해지기 #16 ] 파이썬 모듈 (0) | 2023.02.11 |
[ python 친해지기 #14 ] 파이썬 클래스 1탄 (0) | 2023.02.02 |
[ python 친해지기 #13 ] 파이썬 코드 실행 시 인수 전달 방법 (0) | 2023.02.01 |
[ python 친해지기 #12 ] 파이썬 파일 입출력 (0) | 2023.01.29 |