이 레슨과 관련된 학습 키워드
컴퓨터 과학 & 프로그래밍 — 문제 해결의 도구 → Python 프로그래밍 — 첫 코드에서 실전까지 → Python 프로그래밍 — 첫 코드에서 실전까지 → 중급
클래스, 상속, 다형성, 매직 메서드, ABC, dataclass, SOLID 원칙
player_hp, player_x, player_y, player_inventory 등 전역 변수 20개가 산재player_hp를 바꿨는지 추적 불가 → 버그 원인 찾기가 탐정 수사 수준calculate_damage() 함수가 player_level, weapon_power, enemy_defense를 전역에서 읽음balance, owner, history는 딕셔너리, deposit(), withdraw(), get_statement()는 별도 함수balance를 직접 수정해도 막을 방법이 없음 → 데이터 무결성 붕괴Character 객체가 hp, position, inventory를 내부에 보유 → 외부에서 직접 수정 불가, take_damage(amount) 메서드로만 변경Account 객체가 balance를 보호 → withdraw() 시 잔액 검증 로직이 객체 안에 포함APIClient 객체가 base_url, auth_token, session을 캡슐화 → 인증 상태를 자동 관리안녕하세요, 오늘은 객체지향이 왜 필요한지 알아봅니다.
절차형 코드가 무엇이 문제인지부터 살펴볼게요.
슬라이드 왼쪽을 보세요.
빨간 박스 안에 세 가지 붕괴 패턴이 있습니다.
첫 번째는 전역 변수 얽힘입니다.
player_hp, player_x, player_y 같은 변수들이요.
이런 변수가 전역에 20개씩 흩어져 있다고 해봅시다.
하나를 바꾸면 예상 못 한 곳이 그냥 깨집니다.
이 상태를 스파게티 상태라고 부릅니다.
왼쪽 가운데 박스를 보시면요.
두 번째는 함수 간 암묵적 의존 문제입니다.
calculate_damage 함수가 전역 변수를 몰래 읽어요.
함수 이름만 봐서는 이 의존관계를 알 수가 없습니다.
시그니처 뒤에 의존성이 숨어 있는 거죠.
세 번째, 데이터와 로직이 분리된 문제입니다.
왼쪽 아래 박스를 보세요.
balance 변수와 withdraw 함수가 따로 존재합니다.
어떤 함수든 balance를 직접 수정할 수 있어요.
보호막이 전혀 없는 상태인 겁니다.
이 세 가지가 절차형 코드의 핵심 한계입니다.
클래스를 쓰면 이 문제들이 한꺼번에 해결됩니다.
데이터와 로직을 하나의 객체 안에 묶는 거예요.
전역 변수 대신 객체가 자기 상태를 직접 관리합니다.
오늘 이 구조를 차근차근 코드로 확인해봅시다.
선생님: 자, 여기서 질문 하나 받겠습니다.
학생: 선생님, balance 변수를 아무 함수나 바꿀 수 있으면 왜 그게 문제인가요?
선생님: 좋은 질문이에요! 은행 금고를 상상해보세요.
선생님: 자물쇠가 없어서 누구나 금고를 열 수 있다면 어떻게 될까요?
선생님: balance가 전역 변수면 딱 그 상황이에요.
선생님: 어느 함수가 언제 값을 바꿨는지 추적이 전혀 안 됩니다.
선생님: 클래스는 데이터에 자물쇠를 달아서, 정해진 방법으로만 접근하게 만들어줘요.