단원 홈
3단원 · 8차시

세상을 객체로
클래스와 인스턴스

붕어빵 틀 하나면 붕어빵을 얼마든지 구울 수 있습니다. 프로그램의 '틀'인 클래스로 객체를 찍어내는 — 현대 프로그래밍의 가장 중요한 사고법을 배웁니다.

성취기준 12정03-08
객체클래스인스턴스 속성메서드
🎯 학습 목표
  • 객체 지향의 기본 개념(객체·클래스·인스턴스·속성·메서드)을 실생활 사례로 설명할 수 있다.
  • 클래스를 정의하고 인스턴스를 생성하는 프로그램을 작성할 수 있다.
  • 변수만 쓸 때와 비교하여 객체를 활용하는 것의 장점(묶음·재사용)을 설명할 수 있다.
🤔

생각 열기 — 붕어빵 틀의 철학

틀에서 구워지고 있는 붕어빵들
붕어빵의 사촌, 일본 타이야키 가게의 틀 — 틀(클래스)은 그대로인데 빵(인스턴스)이 줄줄이! 빈 틀, 반죽, 앙금, 완성품까지 인스턴스 생산 과정이 한눈에 보인다. 출처: Wikimedia Commons (CC BY 2.0)

겨울 간식의 왕, 붕어빵을 떠올려 보세요. 틀은 하나지만 붕어빵은 수백 개를 구울 수 있고, 같은 모양이라도 속은 제각각(팥, 슈크림, 피자!)입니다. 게임의 캐릭터 생성 화면도 똑같아요 — '전사'라는 틀은 하나지만, 여러분과 친구가 만든 전사는 이름도 능력치도 다른 별개의 존재죠. 프로그래밍에서 이 을 클래스(class), 틀에서 나온 실체 하나하나를 인스턴스(instance)라고 부릅니다.

💬 함께 생각해 보기

지금까지 우리는 학생 한 명을 표현하려고 name = "민준", age = 17, scores = [...]처럼 변수를 따로따로 만들었어요. 그런데 학생이 30명이라면? 변수 90개?! 😱 — 더 좋은 방법이 분명 있을 것 같지 않나요?

1

객체 — 데이터와 동작을 한 몸에

1차시 모델링의 완성형

객체(object)는 어떤 대상의 속성(데이터)동작(기능)을 하나로 묶은 거예요. 1차시에서 배운 모델링을 기억하나요? 현실의 대상에서 문제 해결에 필요한 것만 남기는 것 — 객체는 그 모델링의 결과를 코드로 옮긴 모습입니다.

현실의 대상속성 (데이터)동작 (메서드)
게임 캐릭터이름, 레벨, 체력(HP)공격하기(), 회복하기(), 레벨업()
은행 계좌예금주, 잔액입금하기(), 출금하기()
유튜브 동영상제목, 조회수, 좋아요 수재생하기(), 좋아요누르기()
1단원의 스마트 전구밝기, 켜짐 여부켜기(), 끄기(), 밝기조절()
💡 "데이터 따로, 기능 따로"의 시대가 저물다

지금까지는 데이터(변수·리스트)와 기능(코드)이 떨어져 있었어요. 객체 지향은 "이 데이터를 다루는 기능은 데이터 곁에 두자"는 발상의 전환입니다. 전구의 밝기(데이터)와 켜기(동작)가 전구라는 한 객체 안에 함께 있는 것 — 현실 세계와 닮은 구조라 프로그램이 커져도 길을 잃지 않아요.

2

클래스 정의와 인스턴스 생성

틀을 만들고, 찍어내고, 부려 보자

🏭

class Character:

틀의 이름 선언. 클래스 이름은 대문자로 시작하는 관례가 있어요.

🛠️

__init__(self, ...)

인스턴스가 태어날 때 자동 실행 — 속성의 초기값을 설정하는 '출생 신고'예요.

🪞

self

"나 자신"을 가리키는 약속. self.hp = "내 체력". 누가 메서드를 부르든 그 인스턴스 자신을 뜻해요.

🐟

Character("용사", 50)

틀에 반죽 붓기 = 인스턴스 생성! 괄호의 값들이 __init__으로 전달돼요.

🏭 캐릭터 공장 — 클래스 하나, 인스턴스 무한대 INTERACTIVE

Character 클래스(틀)는 하나뿐. 값만 바꿔 [인스턴스 생성]을 눌러 보세요 — 카드가 찍혀 나올 때마다 아래에 실제 파이썬 코드가 쌓입니다!

# 생성된 인스턴스가 없습니다 — 위에서 캐릭터를 만들어 보세요!
[공장]클래스는 메모리에 단 하나, 인스턴스는 원하는 만큼!
3

왜 객체를 쓸까 — 변수 30개 vs 인스턴스 리스트

묶으면 단순해지고, 틀이 있으면 안전해진다

😵 변수 따로따로

  • 학생 30명 = 변수 90개
  • 이름과 점수가 헤어질 위험(어느 점수가 누구 것?)
  • 기능(평균 계산)이 데이터와 따로 떠돎
VS

😎 클래스로 묶기

  • 학생 30명 = 인스턴스 30개가 든 리스트 하나
  • 한 학생의 모든 것이 한 덩어리로 이동
  • 틀을 고치면 모든 인스턴스에 반영 — 재사용!
🛠️ 활동 1 — 직접 설계: 나만의 클래스

골격을 채워 반려동물 클래스를 완성하세요. 속성과 메서드를 무엇으로 할지가 곧 모델링(1차시)입니다!

확인 문제

바로바로 채점! 해설까지 꼭 읽어 보세요.

📝

8차시 확인 문제

4문항 · 즉시 채점

1붕어빵 비유에서 '붕어빵 틀'과 '구워진 붕어빵'에 해당하는 것은?

2클래스 안에 정의된, 객체의 동작을 나타내는 함수를 무엇이라고 하는가?

3인스턴스가 생성될 때 자동으로 실행되어 속성을 초기화하는 특별한 메서드는?

4hero = Character("용사", 50)slime = Character("슬라임", 30)에 대한 설명으로 옳은 것은?

🚀

더 알아보기

교육과정 너머, 궁금한 만큼 깊이!

심화틀에서 틀이 태어난다 — 상속 맛보기

전사·마법사·궁수는 다르지만 공통점(이름, HP, 이동)도 많죠. 공통 틀을 만들어 두고 물려받는 것 — 상속(inheritance)입니다.

Character (부모) name · hp · attack() ⚔️ Warrior + bash() 방패 치기 🪄 Wizard + cast() 파이어볼 🏹 Archer + snipe() 저격 세 자식 모두 name·hp·attack()은 부모에게 물려받아 공짜!

상속 계층 — 공통 기능은 부모에 한 번만, 자식은 자기만의 기능을 추가

"이미 잘 만든 틀을 고치지 않고 확장한다" — 거대한 소프트웨어가 무너지지 않는 비결 중 하나예요.

심화충격 사실 — 파이썬의 모든 것이 객체였다

4차시부터 우리가 써 온 "안녕".upper(), order.append("지호"), scores.values() — 이 점(.) 문법이 낯익지 않나요? 맞아요, 전부 메서드 호출이었습니다!

파이썬에서는 문자열도, 리스트도, 딕셔너리도, 심지어 정수도 모두 이미 만들어진 클래스의 인스턴스예요. type("안녕")<class 'str'>이라고 답했던 것, 기억나죠? 여러분은 오늘 클래스를 처음 배운 게 아니라, 한 달 내내 객체를 쓰다가 드디어 그 정체를 알게 된 것입니다!

심화함부로 만지지 마세요 — 캡슐화와 은행 계좌

잔액(balance)을 아무 코드나 account.balance = -999로 바꿀 수 있다면 은행은 망합니다. 그래서 객체 지향은 속성을 직접 만지지 않기로 하고, 검문소 역할의 메서드(입금·출금)로만 접근하게 해요 — 이것이 캡슐화(encapsulation)입니다. (파이썬은 속성 접근을 강제로 막지는 못해서, 이름 앞에 _를 붙여 "메서드로만 접근하자"고 약속하는 관례를 써요.)

코드를 보기 전에 검문소를 직접 체험해 보세요 — 마지막 버튼은 검문소를 우회하려는 시도입니다. 😈

💳 김알고 님의 계좌 (Account 인스턴스)
잔액 5,000원
[계좌]버튼은 모두 '메서드 검문소'를 거칩니다 — 마지막 버튼만 빼고요!

2단원에서 배운 '데이터 보호'가 코드 구조 안에도 있는 셈이에요. 데이터에게 경호원을 붙이는 문법!

실전지금 화면의 모든 것이 객체 — 현실의 객체 지향

이 웹교과서 화면을 보세요. 여러분이 누르는 버튼 하나하나가 Button 클래스의 인스턴스이고(속성: 글자·색, 메서드: 클릭 처리), 퀴즈도, 시뮬레이터의 패킷도 모두 객체로 만들어졌어요.

안드로이드 앱의 화면, 게임 속 모든 유닛, 유튜브의 동영상 정보 — 현대 소프트웨어의 표준 설계 언어가 객체 지향입니다. 9차시 프로젝트에서 모둠원과 역할을 나눌 때도 "너는 Quiz 클래스, 나는 Score 클래스"처럼 클래스 단위로 분업하면 1차시의 문제 분해가 코드 구조로 완성된답니다!

증거를 보여 드릴게요 — 아래 실험실의 버튼이 진짜 객체입니다. 속성을 바꾸고 메서드를 호출해 보세요.


          
📌

한눈에 정리

  • 객체 = 속성(데이터) + 메서드(동작)를 한 몸에 묶은 것 — 모델링의 코드 버전
  • 클래스 = 틀(설계도), 인스턴스 = 틀로 찍어낸 실체 — 틀 하나, 실체 무한
  • __init__은 출생 신고(초기화), self는 "나 자신"
  • 객체의 힘: 관련된 것들이 한 덩어리 + 틀의 재사용 + 메서드 검문소(캡슐화)
  • 문자열의 .upper()도 메서드였다 — 파이썬의 모든 것은 객체!