시험공부빅데이터분석
← 보드클래스와 상속 · 3/12

메서드와 상태 변화 따라가기 ★★

메서드는 보통 객체의 attribute 값을 바꾸거나 읽는 일을 해요. 시험 코드는 "메서드를 순서대로 호출한 뒤 값이 얼마인가?"를 자주 물어요. 이럴 때는 attribute 값을 적은 상태표를 만들어 한 줄씩 고쳐 가요.

class Car: def __init__(self, brand, speed=0): self.brand = brand self.speed = speed def accelerate(self, amount): self.speed += amount def brake(self, amount): self.speed = max(0, self.speed - amount) def show_state(self): print(f"{self.brand}: {self.speed} km/h") my_car = Car("Hyundai") my_car.show_state() my_car.accelerate(30) my_car.show_state() my_car.brake(20) my_car.show_state() my_car.brake(20) my_car.show_state()
Hyundai: 0 km/h Hyundai: 30 km/h Hyundai: 10 km/h Hyundai: 0 km/h
실행하는 줄speed설명
my_car = Car("Hyundai")0speed를 안 넘겨서 기본값 0이 들어가요
show_state()0"Hyundai: 0 km/h" 출력 (값은 안 바뀜)
accelerate(30)30+=는 "더해서 다시 저장". 0+30. 출력은 없어요
show_state()30"Hyundai: 30 km/h" 출력
brake(20)10max(0, 30−20) = max(0, 10) = 10
show_state()10"Hyundai: 10 km/h" 출력
brake(20)0max(0, 10−20) = max(0, −10) = 0. 음수로 안 내려가요
show_state()0"Hyundai: 0 km/h" 출력

주의할 점은 accelerate나 brake는 값만 바꾸고 화면에 아무것도 찍지 않는다는 거예요. 출력은 show_state()를 호출했을 때만 나와요. 교수님이 "함수는 한 가지 일만 하고, 보여주는 건 show_state()가 맡는 게 이 클래스의 설계"라고 했어요. 그래서 출력은 print가 있는 메서드를 호출한 횟수와 같아요(여기서는 4줄).

조건문이 들어간 예도 하나 볼게요. 은행 계좌예요.

class BankAccount: def __init__(self, owner, balance=0): self.owner = owner self.balance = balance def deposit(self, amount): if amount > 0: self.balance += amount def withdraw(self, amount): if amount <= self.balance: self.balance -= amount print(f"{amount}원 출금 완료") else: print(f"잔액이 부족합니다. (현재잔액: {self.balance})") def show_balance(self): print(f"{self.owner}의 잔액: {self.balance}원") account = BankAccount("Lee", 10000) account.deposit(5000) account.withdraw(3000) account.withdraw(20000) account.show_balance()
3000원 출금 완료 잔액이 부족합니다. (현재잔액: 12000) Lee의 잔액: 12000원
실행하는 줄balance설명
BankAccount("Lee", 10000)10000owner = "Lee", balance = 10000
deposit(5000)150005000 > 0이 True라서 더해요. 출력 없음
withdraw(3000)120003000 <= 15000이 True → 빼고 "3000원 출금 완료" 출력
withdraw(20000)1200020000 <= 12000은 False → else 쪽. 값은 그대로, "잔액이 부족합니다…" 출력
show_balance()12000"Lee의 잔액: 12000원" 출력

기본값(balance=0)이 있는 인자는 안 넘겨도 되지만, 기본값이 없는 인자를 빠뜨리면 에러(TypeError)가 나요. 예를 들어 Student("Kim")처럼 score를 빼면 에러예요.

시험엔 이렇게 써요 — 이렇게 고르세요

메서드는 instance의 attribute를 읽거나 변경한다. 결과 예측은 ① attribute 상태표를 만들고 ② 메서드를 호출 순서대로 실행하며 값을 고치고 ③ print가 있는 메서드에서만 출력을 적는다. 값을 바꾸는 메서드와 보여 주는 메서드를 구분하세요.

잠깐 확인 — Car 예제에서 my_car.accelerate(30) 한 줄만 실행하면 화면에 무엇이 나오나요?

아무것도 안 나와요. accelerate는 speed 값만 바꾸고 print를 하지 않아요.

다음 카드 → 객체마다 다른 값 vs 모두가 같이 쓰는 값 — instance attribute와 class attribute

자료: 3~4주차 · Week03_Class_for_PyTorch(pdf, ipynb 업데이트본) · 빅데이터03(3주차)·빅데이터04(4주차) 녹취