Captain's Log
← Observatory
Observatory·

클래스로 배우는 객체지향 — 상태와 행동을 묶다

Person·BankAccount·Student 같은 예제로 클래스·생성자·메서드·인스턴스 변수를 익히며, 데이터(상태)와 기능(행동)을 하나로 묶는 객체지향의 감각을 잡은 기록.

TrainingPythonOOP

흩어진 데이터를 하나로 묶기

지금까지는 변수와 함수가 따로 놀았다. 클래스는 관련된 데이터(상태)와 그 데이터를 다루는 함수(행동)를 하나의 틀로 묶는다. 이 관점이 잡히니 코드가 훨씬 정돈됐다.

생성자와 인스턴스 변수

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() 로 완료 처리

정리

클래스를 쓰기 전과 후의 차이는 "잔액 부족을 어디서 막을 것인가" 같은 질문에서 드러났다. 데이터와 그 데이터에 대한 규칙을 같은 곳에 두니, 예외 상황을 다루는 코드가 자연스럽게 클래스 안으로 들어왔다. 데이터 수집 모듈을 함수화·모듈화하는 이후 작업의 밑바탕이 됐다.