- 객체 지향의 기본 개념(객체·클래스·인스턴스·속성·메서드)을 실생활 사례로 설명할 수 있다.
- 클래스를 정의하고 인스턴스를 생성하는 프로그램을 작성할 수 있다.
- 변수만 쓸 때와 비교하여 객체를 활용하는 것의 장점(묶음·재사용)을 설명할 수 있다.
생각 열기 — 붕어빵 틀의 철학
겨울 간식의 왕, 붕어빵을 떠올려 보세요. 틀은 하나지만 붕어빵은 수백 개를 구울 수 있고, 같은 모양이라도 속은 제각각(팥, 슈크림, 피자!)입니다. 게임의 캐릭터 생성 화면도 똑같아요 — '전사'라는 틀은 하나지만, 여러분과 친구가 만든 전사는 이름도 능력치도 다른 별개의 존재죠. 프로그래밍에서 이 틀을 클래스(class), 틀에서 나온 실체 하나하나를 인스턴스(instance)라고 부릅니다.
지금까지 우리는 학생 한 명을 표현하려고 name = "민준", age = 17, scores = [...]처럼
변수를 따로따로 만들었어요. 그런데 학생이 30명이라면? 변수 90개?! 😱 — 더 좋은 방법이 분명 있을 것 같지 않나요?
객체 — 데이터와 동작을 한 몸에
1차시 모델링의 완성형
객체(object)는 어떤 대상의 속성(데이터)과 동작(기능)을 하나로 묶은 거예요. 1차시에서 배운 모델링을 기억하나요? 현실의 대상에서 문제 해결에 필요한 것만 남기는 것 — 객체는 그 모델링의 결과를 코드로 옮긴 모습입니다.
| 현실의 대상 | 속성 (데이터) | 동작 (메서드) |
|---|---|---|
| 게임 캐릭터 | 이름, 레벨, 체력(HP) | 공격하기(), 회복하기(), 레벨업() |
| 은행 계좌 | 예금주, 잔액 | 입금하기(), 출금하기() |
| 유튜브 동영상 | 제목, 조회수, 좋아요 수 | 재생하기(), 좋아요누르기() |
| 1단원의 스마트 전구 | 밝기, 켜짐 여부 | 켜기(), 끄기(), 밝기조절() |
지금까지는 데이터(변수·리스트)와 기능(코드)이 떨어져 있었어요. 객체 지향은 "이 데이터를 다루는 기능은 데이터 곁에 두자"는 발상의 전환입니다. 전구의 밝기(데이터)와 켜기(동작)가 전구라는 한 객체 안에 함께 있는 것 — 현실 세계와 닮은 구조라 프로그램이 커져도 길을 잃지 않아요.
클래스 정의와 인스턴스 생성
틀을 만들고, 찍어내고, 부려 보자
class Character:
틀의 이름 선언. 클래스 이름은 대문자로 시작하는 관례가 있어요.
__init__(self, ...)
인스턴스가 태어날 때 자동 실행 — 속성의 초기값을 설정하는 '출생 신고'예요.
self
"나 자신"을 가리키는 약속. self.hp = "내 체력". 누가 메서드를 부르든 그 인스턴스 자신을 뜻해요.
Character("용사", 50)
틀에 반죽 붓기 = 인스턴스 생성! 괄호의 값들이 __init__으로 전달돼요.
Character 클래스(틀)는 하나뿐. 값만 바꿔 [인스턴스 생성]을 눌러 보세요 — 카드가 찍혀 나올 때마다 아래에 실제 파이썬 코드가 쌓입니다!
왜 객체를 쓸까 — 변수 30개 vs 인스턴스 리스트
묶으면 단순해지고, 틀이 있으면 안전해진다
😵 변수 따로따로
- 학생 30명 = 변수 90개
- 이름과 점수가 헤어질 위험(어느 점수가 누구 것?)
- 기능(평균 계산)이 데이터와 따로 떠돎
😎 클래스로 묶기
- 학생 30명 = 인스턴스 30개가 든 리스트 하나
- 한 학생의 모든 것이 한 덩어리로 이동
- 틀을 고치면 모든 인스턴스에 반영 — 재사용!
골격을 채워 반려동물 클래스를 완성하세요. 속성과 메서드를 무엇으로 할지가 곧 모델링(1차시)입니다!
확인 문제
바로바로 채점! 해설까지 꼭 읽어 보세요.
8차시 확인 문제
4문항 · 즉시 채점
1붕어빵 비유에서 '붕어빵 틀'과 '구워진 붕어빵'에 해당하는 것은?
2클래스 안에 정의된, 객체의 동작을 나타내는 함수를 무엇이라고 하는가?
3인스턴스가 생성될 때 자동으로 실행되어 속성을 초기화하는 특별한 메서드는?
4hero = Character("용사", 50)과 slime = Character("슬라임", 30)에 대한 설명으로 옳은 것은?
더 알아보기
교육과정 너머, 궁금한 만큼 깊이!
심화틀에서 틀이 태어난다 — 상속 맛보기
전사·마법사·궁수는 다르지만 공통점(이름, HP, 이동)도 많죠. 공통 틀을 만들어 두고 물려받는 것 — 상속(inheritance)입니다.
상속 계층 — 공통 기능은 부모에 한 번만, 자식은 자기만의 기능을 추가
"이미 잘 만든 틀을 고치지 않고 확장한다" — 거대한 소프트웨어가 무너지지 않는 비결 중 하나예요.
심화충격 사실 — 파이썬의 모든 것이 객체였다
4차시부터 우리가 써 온 "안녕".upper(), order.append("지호"), scores.values() —
이 점(.) 문법이 낯익지 않나요? 맞아요, 전부 메서드 호출이었습니다!
파이썬에서는 문자열도, 리스트도, 딕셔너리도, 심지어 정수도 모두 이미 만들어진 클래스의 인스턴스예요.
type("안녕")이 <class 'str'>이라고 답했던 것, 기억나죠?
여러분은 오늘 클래스를 처음 배운 게 아니라, 한 달 내내 객체를 쓰다가 드디어 그 정체를 알게 된 것입니다!
심화함부로 만지지 마세요 — 캡슐화와 은행 계좌
잔액(balance)을 아무 코드나 account.balance = -999로 바꿀 수 있다면 은행은 망합니다.
그래서 객체 지향은 속성을 직접 만지지 않기로 하고, 검문소 역할의 메서드(입금·출금)로만
접근하게 해요 — 이것이 캡슐화(encapsulation)입니다.
(파이썬은 속성 접근을 강제로 막지는 못해서, 이름 앞에 _를 붙여 "메서드로만 접근하자"고 약속하는 관례를 써요.)
코드를 보기 전에 검문소를 직접 체험해 보세요 — 마지막 버튼은 검문소를 우회하려는 시도입니다. 😈
2단원에서 배운 '데이터 보호'가 코드 구조 안에도 있는 셈이에요. 데이터에게 경호원을 붙이는 문법!
실전지금 화면의 모든 것이 객체 — 현실의 객체 지향
이 웹교과서 화면을 보세요. 여러분이 누르는 버튼 하나하나가 Button 클래스의 인스턴스이고(속성: 글자·색, 메서드: 클릭 처리), 퀴즈도, 시뮬레이터의 패킷도 모두 객체로 만들어졌어요.
안드로이드 앱의 화면, 게임 속 모든 유닛, 유튜브의 동영상 정보 — 현대 소프트웨어의 표준 설계 언어가 객체 지향입니다. 9차시 프로젝트에서 모둠원과 역할을 나눌 때도 "너는 Quiz 클래스, 나는 Score 클래스"처럼 클래스 단위로 분업하면 1차시의 문제 분해가 코드 구조로 완성된답니다!
증거를 보여 드릴게요 — 아래 실험실의 버튼이 진짜 객체입니다. 속성을 바꾸고 메서드를 호출해 보세요.
한눈에 정리
- 객체 = 속성(데이터) + 메서드(동작)를 한 몸에 묶은 것 — 모델링의 코드 버전
- 클래스 = 틀(설계도), 인스턴스 = 틀로 찍어낸 실체 — 틀 하나, 실체 무한
__init__은 출생 신고(초기화),self는 "나 자신"- 객체의 힘: 관련된 것들이 한 덩어리 + 틀의 재사용 + 메서드 검문소(캡슐화)
- 문자열의
.upper()도 메서드였다 — 파이썬의 모든 것은 객체!