흩어진 데이터를 하나로 묶기
지금까지는 변수와 함수가 따로 놀았다. 클래스는 관련된 데이터(상태)와 그 데이터를 다루는 함수(행동)를 하나의 틀로 묶는다. 이 관점이 잡히니 코드가 훨씬 정돈됐다.
생성자와 인스턴스 변수
class Person:
def __init__(self, name):
# 객체가 만들어질 때 이름을 받아 이 객체 고유의 변수에 저장
self.name = name
def introduce(self):
print(f"저는 {self.name}입니다")
p = Person("민수")
p.introduce()__init__ 은 객체가 태어날 때 한 번 실행되는 생성자, self 는 "이 객체 자신"을 가리킨다. 인스턴스를 두 개 만들어 서로의 상태가 독립적이라는 걸 확인한 게 결정적이었다.
실전 클래스들
- Counter:
value를 0에서 시작해inc()마다 증가 — 인스턴스마다 독립적인 상태 - Rectangle:
area(),perimeter()로 넓이·둘레 반환 - BankAccount:
deposit(),withdraw()— 그리고 잔액이 부족하면 출금을 막는 방어 로직까지 - Student: 점수 리스트를 받아
average()로 평균 계산 - Todo:
done을 False로 시작해finish()로 완료 처리
정리
클래스를 쓰기 전과 후의 차이는 "잔액 부족을 어디서 막을 것인가" 같은 질문에서 드러났다. 데이터와 그 데이터에 대한 규칙을 같은 곳에 두니, 예외 상황을 다루는 코드가 자연스럽게 클래스 안으로 들어왔다. 데이터 수집 모듈을 함수화·모듈화하는 이후 작업의 밑바탕이 됐다.