[ python 친해지기 #14 ] 파이썬 클래스 1탄
안녕하세요. 심심한 코딩쟁이입니다.
오늘은 파이썬의 클래스에 대해서 알아보는 시간을 가지도록 하겠습니다.
파이썬의 클래스는 무엇이고, 왜 사용하는지에 대해서 천천히 알아보시죠.
클래스를 사용하는 이유
사실 클래스는 프로그래밍을 하면서 꼭 필요한 존재는 아닙니다.
실제로 클래스를 사용하지 않고도 잘 만들어진 프로그램들이 존재합니다.
그렇다면 클래스는 사용할 필요 없는가?
하지만 또 그렇지도 않습니다. 코드를 작성하는 프로그래머에게 도움을 줄 수 있기 때문입니다.
예제를 보면서 그 이유에 대해 알아보시죠.
은행 계좌의 잔고를 계산하는 프로그램을 예로 들어보겠습니다.
우리가 계좌에 입금을 하거나 출금을 할 때 항상 최신 잔고에 금액을 더하거나 빼줘야 합니다.
# 계좌 관리 예제
balance = 100
def deposit(money): # 입금
global balance
balance += money
return balance
def withdraw(money): # 출금
global balance
if balance < money:
return -1
balance -= money
return balance
print(deposit(200))
print("잔고가 부족합니다." if withdraw(400) == -1 else balance)
print("현재 잔고 :", balance)
잔고를 최신으로 유지하기 위해 global을 사용해 balance를 전역 변수처럼 사용하였습니다.
이런 방식은 한 계좌만 관리할 때 사용할 수 있습니다.
두 개 이상의 계좌를 관리하고 싶다면 현재 우리가 알고 있는 지식으로 가능한 방법은
각 계좌의 잔고와 함수를 하나하나 정의해서 따로 사용하는 방법이 있을 텐데요.
이런 식으로 프로그램을 짜는 것에는 한계가 존재합니다.
똑같은 코드를 중복적으로 작성해야 해서 가독성 또한 떨어지고 계좌가 추가될 때마다 계속해서
코드를 수정해야 하는 불편함도 존재합니다.
하지만 이러한 문제들은 클래스를 사용함으로써 해결할 수 있습니다.
다음은 클래스를 이용한 계좌 관리 예제입니다.
# 클래스를 이용한 계좌 관리 예제
class Account:
def __init__(self): # 계좌 생성
self.balance = 0
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() # 계좌 객체 생성
account2 = Account() # 계좌 객체 생성
print(account1.deposit(100))
print("잔고가 부족합니다." if account1.withdraw(50) == -1 else account1.balance)
print(account2.deposit(200))
print("잔고가 부족합니다." if account1.withdraw(400) == -1 else account2.balance)
이렇게 클래스를 이용하면 같은 기능의 코드를 재사용하기가 편리해지고
다른 기능을 추가할 때 수정해야 할 분량도 줄일 수 있습니다.
만약 전액 출금이라는 기능을 새롭게 추가하려고 할 때 클래스를 사용하지 않은 상태라면
모든 계좌에 맞는 함수를 각각 정의해줘야 하겠지만 클래스를 사용했다면 클래스 내부에
메서드를 정의해 주면 코드 수정이 완료됩니다.
여기서 잠깐!
제가 함수와 메서드라는 단어를 사용했는데 둘의 차이를 아시나요?
함수에 대해서는 이미 잘 알고 계실 테지만 메서드는 클래스 및 객체와 연관되어 있는 함수를 의미합니다.
즉, 클래스 내부에 정의되어 있는 함수를 메서드라고 지칭합니다.
클래스를 사용할 때의 장점을 살펴보았는데 이 정도 장점이라면 필요할 때는 꼭 사용하는 것이 좋은 방법인 것 같네요.
메서드(Method)의 매개변수와 호출
눈썰미가 좋으신 분이라면 벌써 눈치채셨을지도 모릅니다.
클래스의 메서드를 정의할 때 우리가 일반적으로 함수를 정의하는 방식과는 다른 부분이 있었는데요.
다른 점은 매개변수에 self 라는 것이 추가된다는 것입니다.
# 앞선 예제에서 본 함수와 메서드입니다.
# 입금 함수
def deposit(money): # 입금
global balance
balance += money
return balance
# 계좌 클래스의 입금 메서드
def deposit(self, money): # 입금
self.balance += money
return self.balance
# 매개변수에 self 라는 매개변수가 추가된 것을 볼 수 있습니다.
그렇다면 self 라는 매개변수에는 무엇이 들어가는지 클래스 메서드의 호출 방법과 같이 알아봅시다.
# 클래스 메서드의 호출 방법
class EchoBot:
def say(self, str):
print(str)
bot = EchoBot() # 객체 생성
bot.say('hello') # 메서드 호출
EchoBot 클래스의 객체인 bot이 say 메서드를 호출한 예제인데 이때 say 메서드의 self 에는 무엇이 전달되었을까요?
메서드 구조 및 호출 | 메서드 매개변수에 전달된 것 | |
def say(self, str) | self | str |
bot.say('hello') | bot | 'hello' |
위 표에 보이는 메서드 호출에 의해 self에는 클래스 객체인 bot이 전달되며 str 에는 'hello'가 전달됩니다.
사실 클래스 메서드를 작성할 때 self가 아닌 다른 단어를 입력해도 무관하지만
메서드를 호출한 객체 자신이 전달된다는 의미로 self를 쓰는 것이 일반적인 방식으로 자리 잡았습니다.
여기까지 파이썬 클래스 1탄의 내용이었습니다.
파이썬 클래스를 사용하는 이유와 메서드 호출에 대해 살펴보았는데요.
다음 포스팅에서 파이썬 클래스 2탄으로 클래스에 대해 더욱 자세히 알아보는 시간을 가지겠습니다.
오늘 하루도 모두들 행복하시길 바랍니다.
감사합니다.
'programming > python' 카테고리의 다른 글
[ python 친해지기 #16 ] 파이썬 모듈 (0) | 2023.02.11 |
---|---|
[ python 친해지기 #15 ] 파이썬 클래스 2탄 (0) | 2023.02.03 |
[ python 친해지기 #13 ] 파이썬 코드 실행 시 인수 전달 방법 (0) | 2023.02.01 |
[ python 친해지기 #12 ] 파이썬 파일 입출력 (0) | 2023.01.29 |
[ python 친해지기 #11 ] 파이썬 함수 사용법 (0) | 2023.01.27 |