Topic 1: 클래스 기본 - 객체 만들기의 시작 🏠
🎯 학습 목표
클래스와 객체의 기본 개념을 이해하고, class 키워드를 사용하여 간단한 클래스를 정의하고 객체를 생성할 수 있습니다.
🤔 클래스와 객체란?
붕어빵 틀과 붕어빵
일상생활에서 가장 이해하기 쉬운 비유입니다:
- 클래스(Class) = 붕어빵 틀 🧇
- 객체(Object) = 실제 붕어빵 🥞
# 붕어빵 틀 (클래스) 만들기
class bungeoppang:
pass # 아직은 비어있는 틀
# 붕어빵 틀로 실제 붕어빵(객체) 만들기
bungeoppang1 = bungeoppang() # 첫 번째 붕어빵
bungeoppang2 = bungeoppang() # 두 번째 붕어빵
bungeoppang3 = bungeoppang() # 세 번째 붕어빵
자동차 공장과 자동차
또 다른 비유로 이해해봅시다:
- 클래스 = 자동차 설계도 📋
- 객체 = 실제 만들어진 자동차 🚗
# 자동차 설계도 (클래스)
class Car:
pass
# 설계도로 실제 자동차들(객체) 만들기
my_car = Car() # 내 차
friend_car = Car() # 친구 차
family_car = Car() # 가족 차
🏗️ 클래스 만들기 - class 키워드
기본 문법
class 클래스이름:
pass # 아직 내용이 없을 때
클래스 이름 규칙
중요한 규칙: 클래스 이름은 대문자로 시작합니다!
# ✅ 올바른 클래스 이름
class Student: # 학생
pass
class BankAccount: # 은행 계좌
pass
class GameCharacter: # 게임 캐릭터
pass
# ❌ 잘못된 클래스 이름
class student: # 소문자로 시작 (관례 위반)
pass
class bank_account: # 언더스코어 사용 (함수나 변수 스타일)
pass
간단한 클래스 예시
# 학생 클래스
class Student:
pass
# 동물 클래스
class Animal:
pass
# 책 클래스
class Book:
pass
print("클래스들이 정의되었습니다!")
📦 객체 생성하기
객체 만드는 방법
class Student:
pass
# 객체 생성: 클래스이름()
student1 = Student() # 첫 번째 학생 객체
student2 = Student() # 두 번째 학생 객체
student3 = Student() # 세 번째 학생 객체
print(f"student1: {student1}")
print(f"student2: {student2}")
print(f"student3: {student3}")
여러 개의 다른 객체들
class Animal:
pass
class Car:
pass
class Book:
pass
# 다양한 객체들 생성
dog = Animal()
cat = Animal()
my_car = Car()
taxi = Car()
novel = Book()
textbook = Book()
print("다양한 객체들이 만들어졌습니다!")
🔍 객체 확인하기
type() 함수로 확인
class Student:
pass
student = Student()
print(f"student의 타입: {type(student)}")
# 출력: <class '__main__.Student'>
# 다른 데이터 타입들과 비교
number = 10
text = "안녕"
my_list = [1, 2, 3]
print(f"number의 타입: {type(number)}") # <class 'int'>
print(f"text의 타입: {type(text)}") # <class 'str'>
print(f"my_list의 타입: {type(my_list)}") # <class 'list'>
isinstance() 함수로 확인
class Student:
pass
class Teacher:
pass
student = Student()
teacher = Teacher()
# 객체가 특정 클래스의 인스턴스인지 확인
print(isinstance(student, Student)) # True
print(isinstance(student, Teacher)) # False
print(isinstance(teacher, Teacher)) # True
🎭 실생활 클래스 예시들
예시 1: 학교 관련 클래스들
# 학급 관리 시스템
class Student:
pass
class Teacher:
pass
class Classroom:
pass
# 학생들 생성
kim_cheolsu = Student()
lee_younghee = Student()
park_minsu = Student()
# 선생님 생성
homeroom_teacher = Teacher()
math_teacher = Teacher()
# 교실 생성
grade1_class1 = Classroom()
grade2_class3 = Classroom()
print("학급 관리 시스템 객체들이 생성되었습니다!")
예시 2: 게임 캐릭터 클래스들
# 게임 개발
class Warrior: # 전사
pass
class Mage: # 마법사
pass
class Archer: # 궁수
pass
# 다양한 캐릭터들 생성
my_character = Warrior()
friend_character = Mage()
guild_member1 = Archer()
guild_member2 = Warrior()
print("게임 캐릭터들이 생성되었습니다!")
예시 3: 쇼핑몰 시스템
# 온라인 쇼핑몰
class Product: # 상품
pass
class Customer: # 고객
pass
class Order: # 주문
pass
class Cart: # 장바구니
pass
# 쇼핑몰 관련 객체들 생성
laptop = Product()
smartphone = Product()
customer1 = Customer()
customer2 = Customer()
order1 = Order()
order2 = Order()
cart1 = Cart()
cart2 = Cart()
print("쇼핑몰 시스템 객체들이 생성되었습니다!")
🆔 객체의 정체성
각 객체는 고유합니다
class Student:
pass
# 같은 클래스로 만들어도 서로 다른 객체
student1 = Student()
student2 = Student()
student3 = Student()
# id() 함수로 객체의 고유 번호 확인
print(f"student1 ID: {id(student1)}")
print(f"student2 ID: {id(student2)}")
print(f"student3 ID: {id(student3)}")
# 모두 다른 번호가 나옵니다!
print(f"student1과 student2가 같은 객체? {student1 is student2}") # False
객체 비교하기
class Book:
pass
book1 = Book()
book2 = Book()
book3 = book1 # book1과 같은 객체를 가리킴
print(f"book1 == book2: {book1 == book2}") # False (다른 객체)
print(f"book1 is book2: {book1 is book2}") # False (다른 객체)
print(f"book1 == book3: {book1 == book3}") # True (같은 객체)
print(f"book1 is book3: {book1 is book3}") # True (같은 객체)
🎯 왜 클래스를 사용할까?
문제 상황: 학생 정보 관리
클래스 없이 학생 정보를 관리한다면…
# ❌ 클래스 없이 관리하기 (복잡함)
student1_name = "김철수"
student1_grade = 2
student1_class_num = 3
student2_name = "이영희"
student2_grade = 2
student2_class_num = 3
student3_name = "박민수"
student3_grade = 1
student3_class_num = 5
# 정보가 흩어져 있어서 관리하기 어려움...
해결책: 클래스 사용
# ✅ 클래스로 깔끔하게 관리
class Student:
pass
# 학생 객체들 생성
kim_cheolsu = Student()
lee_younghee = Student()
park_minsu = Student()
# 각 객체가 학생을 대표함 - 훨씬 직관적!
print("학생 객체들이 생성되었습니다!")
📚 클래스와 함수의 차이점
함수: 특정 작업 수행
def calculate_grade(score):
if score >= 90:
return "A"
elif score >= 80:
return "B"
else:
return "C"
# 함수는 작업을 수행
grade = calculate_grade(85)
print(f"성적: {grade}")
클래스: 사물을 표현
class Student:
pass
# 클래스는 사물(학생)을 표현
student = Student()
print(f"학생 객체: {student}")
🔄 클래스 활용 패턴
패턴 1: 여러 개의 비슷한 객체 만들기
class Pet:
pass
# 여러 마리 애완동물
dog = Pet()
cat = Pet()
hamster = Pet()
parrot = Pet()
print("애완동물들이 모두 준비되었습니다!")
패턴 2: 다양한 종류의 객체들
class Character:
pass
class Item:
pass
class Skill:
pass
# 게임 요소들
protagonist = Character()
sword = Item()
magic = Skill()
monster = Character()
shield = Item()
healing = Skill()
print("게임 요소들이 준비되었습니다!")
🚨 자주 발생하는 오류
오류 1: 클래스 이름 규칙 위반
# ❌ 소문자로 시작 (문법 오류는 아니지만 관례 위반)
class student:
pass
# ✅ 대문자로 시작 (파이썬 관례)
class Student:
pass
오류 2: 객체 생성 시 괄호 누락
class Student:
pass
# ❌ 괄호 없음 - 객체가 생성되지 않음
student1 = Student # 클래스 자체를 가리킴
# ✅ 괄호 있음 - 객체 생성됨
student2 = Student() # 새로운 객체 생성
print(f"student1: {student1}") # <class '__main__.Student'>
print(f"student2: {student2}") # <__main__.Student object at ...>
오류 3: 클래스와 객체 혼동
class Car:
pass
# ❌ 클래스 이름으로 또 다른 객체를 만들려고 시도
# Car = Car() # 이렇게 하면 클래스 정의가 사라집니다!
# ✅ 다른 변수 이름 사용
my_car = Car()
your_car = Car()
💡 퀴즈: 클래스 기본 이해도 체크
Q1. 클래스를 정의할 때 사용하는 키워드는?
- function
- class
- def
- object
💡 정답 확인
정답: 2번 (class)
파이썬에서 클래스를 정의할 때는 class
키워드를 사용합니다.
Q2. 다음 중 올바른 클래스 이름은?
- student
- Student
- STUDENT
- 2번과 3번 모두
💡 정답 확인
정답: 4번 (2번과 3번 모두)
파이썬에서는 클래스 이름을 대문자로 시작하는 것이 관례입니다. Student
나 STUDENT
모두 가능하지만, 일반적으로 Student
처럼 첫 글자만 대문자로 쓰는 PascalCase를 사용합니다.
Q3. 다음 코드에서 student1
과 student2
는 같은 객체일까요?
class Student:
pass
student1 = Student()
student2 = Student()
- 같은 객체다
- 다른 객체다
- 오류가 발생한다
- 알 수 없다
💡 정답 확인
정답: 2번 (다른 객체다)
같은 클래스로 만들어도 Student()
를 호출할 때마다 새로운 객체가 생성됩니다. 따라서 student1
과 student2
는 서로 다른 객체입니다.
🔬 실습: 나만의 클래스 만들기
실습 1: 동물원 만들기
# 동물 클래스들 정의
class Lion:
pass
class Elephant:
pass
class Monkey:
pass
class Penguin:
pass
# 동물원에 동물들 배치
lion1 = Lion()
lion2 = Lion()
elephant = Elephant()
monkey1 = Monkey()
monkey2 = Monkey()
monkey3 = Monkey()
penguin1 = Penguin()
penguin2 = Penguin()
print("🦁 사자 2마리")
print("🐘 elephant 1마리")
print("🐵 원숭이 3마리")
print("🐧 펭귄 2마리")
print("동물원이 완성되었습니다! 🎉")
실습 2: 스마트폰 앱들
# 스마트폰 앱 클래스들
class KakaoTalk:
pass
class Instagram:
pass
class YouTube:
pass
class NaverMap:
pass
# 내 폰에 설치된 앱들
kakao_talk = KakaoTalk()
instagram = Instagram()
youtube = YouTube()
map_app = NaverMap()
# 친구 폰에도 같은 앱들이 있지만 다른 객체
friend_kakao = KakaoTalk()
friend_instagram = Instagram()
print("📱 내 폰: kakao_talk, instagram, youtube, map_app")
print("📱 친구 폰: friend_kakao, friend_instagram")
print("같은 앱이지만 서로 다른 객체입니다!")
✅ 클래스 기본 마스터 체크리스트
✅ 클래스 기본 마스터 체크리스트
🚀 다음 단계 미리보기
클래스의 기본을 익혔으니, 이제 더 똑똑한 클래스들을 만들어보겠습니다!
다음 토픽에서는:
- 속성(Attribute): 객체가 가지는 정보
- 메서드(Method): 객체가 할 수 있는 행동
- self: 객체 자신을 가리키는 특별한 키워드
예를 들어:
class Student:
def __init__(self):
self.name = "김철수" # 속성: 이름
self.grade = 2 # 속성: 학년
def introduce(self): # 메서드: 자기소개
print(f"안녕하세요, {self.name}입니다!")
student = Student()
student.introduce() # 안녕하세요, 김철수입니다!
객체가 정보를 가지고 행동할 수 있게 됩니다! 💫
Last updated on