Skip to Content
💻 코리아IT아카데미 신촌 - 프로그래밍 학습 자료
Python 프로그래밍Unit 6: 객체지향 프로그래밍Topic 1: 클래스 기본

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. 클래스를 정의할 때 사용하는 키워드는?

  1. function
  2. class
  3. def
  4. object

💡 정답 확인

정답: 2번 (class)

파이썬에서 클래스를 정의할 때는 class 키워드를 사용합니다.

Q2. 다음 중 올바른 클래스 이름은?

  1. student
  2. Student
  3. STUDENT
  4. 2번과 3번 모두

💡 정답 확인

정답: 4번 (2번과 3번 모두)

파이썬에서는 클래스 이름을 대문자로 시작하는 것이 관례입니다. StudentSTUDENT 모두 가능하지만, 일반적으로 Student처럼 첫 글자만 대문자로 쓰는 PascalCase를 사용합니다.

Q3. 다음 코드에서 student1student2는 같은 객체일까요?

class Student: pass student1 = Student() student2 = Student()
  1. 같은 객체다
  2. 다른 객체다
  3. 오류가 발생한다
  4. 알 수 없다

💡 정답 확인

정답: 2번 (다른 객체다)

같은 클래스로 만들어도 Student()를 호출할 때마다 새로운 객체가 생성됩니다. 따라서 student1student2는 서로 다른 객체입니다.

🔬 실습: 나만의 클래스 만들기

실습 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