Python class

μƒ€μ›Œμ‹€μ˜ 바보·2025λ…„ 2μ›” 5일
0

Python

λͺ©λ‘ 보기
6/10

🎯 Python 클래슀 κΈ°λ³Έ κ°œλ…κ³Ό μ‚¬μš©λ²•

βœ… ν΄λž˜μŠ€λž€?

클래슀(Class)λŠ” 객체(Object)λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ 청사진(Blue Print) λ˜λŠ” ν…œν”Œλ¦Ώμž…λ‹ˆλ‹€.

즉, 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP, Object-Oriented Programming)μ—μ„œ μ—¬λŸ¬ 개의 객체λ₯Ό 생성할 수 μžˆλ„λ‘ ν•˜λŠ” 섀계도 역할을 ν•©λ‹ˆλ‹€.

πŸ“Œ 1️⃣ 클래슀의 κΈ°λ³Έ ꡬ쑰

class ν΄λž˜μŠ€μ΄λ¦„:
    # μƒμ„±μž (객체 μ΄ˆκΈ°ν™”)
    def __init__(self, 속성1, 속성2):
        self.속성1 = 속성1  # μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ„ μ–Έ
        self.속성2 = 속성2

    # λ©”μ„œλ“œ (클래슀 λ‚΄μ—μ„œ μ •μ˜λœ ν•¨μˆ˜)
    def λ©”μ„œλ“œμ΄λ¦„(self):
        print(f"속성1: {self.속성1}, 속성2: {self.속성2}")

β€’ class ν΄λž˜μŠ€μ΄λ¦„ β†’ 클래슀λ₯Ό μ •μ˜ν•˜λŠ” ν‚€μ›Œλ“œ

β€’ init (μƒμ„±μž, Constructor) β†’ 객체가 생성될 λ•Œ μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜λ‘œ, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•¨

β€’ self β†’ ν˜„μž¬ μΈμŠ€ν„΄μŠ€λ₯Ό μ˜λ―Έν•˜λ©°, 클래슀 λ‚΄λΆ€μ—μ„œ 객체의 속성을 μ°Έμ‘°ν•  λ•Œ μ‚¬μš©

β€’ λ©”μ„œλ“œ (Method) β†’ 클래슀 λ‚΄λΆ€μ—μ„œ μ •μ˜λœ ν•¨μˆ˜λ‘œ, 객체의 λ™μž‘(κΈ°λŠ₯)을 κ΅¬ν˜„ν•¨

πŸ“Œ 2️⃣ 클래슀 μ‚¬μš© 예제

➊ 기본 클래슀 예제

class Person:
    def __init__(self, name, age):  # μƒμ„±μž
        self.name = name  # μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
        self.age = age

    def introduce(self):  # λ©”μ„œλ“œ
        print(f"μ•ˆλ…•ν•˜μ„Έμš”, 제 이름은 {self.name}이고, λ‚˜μ΄λŠ” {self.age}μ‚΄μž…λ‹ˆλ‹€.")

# 객체(μΈμŠ€ν„΄μŠ€) 생성
p1 = Person("Alice", 25)
p2 = Person("Bob", 30)

# λ©”μ„œλ“œ 호좜
p1.introduce()
p2.introduce()

좜λ ₯ κ²°κ³Ό

μ•ˆλ…•ν•˜μ„Έμš”, 제 이름은 Alice이고, λ‚˜μ΄λŠ” 25μ‚΄μž…λ‹ˆλ‹€.
μ•ˆλ…•ν•˜μ„Έμš”, 제 이름은 Bob이고, λ‚˜μ΄λŠ” 30μ‚΄μž…λ‹ˆλ‹€.

πŸ“Œ 3️⃣ 클래슀의 μ£Όμš” κ°œλ…

➊ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ 클래슀 λ³€μˆ˜

β€’ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ β†’ self.λ³€μˆ˜λͺ… : κ°μ²΄λ§ˆλ‹€ λ‹€λ₯Έ 값을 가짐

β€’ 클래슀 λ³€μˆ˜ β†’ 클래슀λͺ….λ³€μˆ˜λͺ… : λͺ¨λ“  객체가 κ³΅μœ ν•˜λŠ” λ³€μˆ˜

class Dog:
    species = "Canine"  # 클래슀 λ³€μˆ˜ (λͺ¨λ“  객체가 곡유)

    def __init__(self, name, age):
        self.name = name  # μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
        self.age = age

# 객체 생성
dog1 = Dog("Buddy", 5)
dog2 = Dog("Charlie", 3)

# 클래슀 λ³€μˆ˜ μ ‘κ·Ό
print(Dog.species)   # Canine
print(dog1.species)  # Canine

# μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ ‘κ·Ό
print(dog1.name, dog1.age)  # Buddy 5
print(dog2.name, dog2.age)  # Charlie 3

βž‹ λ©”μ„œλ“œμ˜ μ’…λ₯˜

  1. μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ (self μ‚¬μš©) β†’ κ°œλ³„ 객체에 λŒ€ν•œ λ™μž‘μ„ μ •μ˜

  2. 클래슀 λ©”μ„œλ“œ (@classmethod μ‚¬μš©) β†’ 클래슀 λ³€μˆ˜λ₯Ό λ³€κ²½ν•  λ•Œ μ‚¬μš©

  3. 정적 λ©”μ„œλ“œ (@staticmethod μ‚¬μš©) β†’ ν΄λž˜μŠ€λ‚˜ μΈμŠ€ν„΄μŠ€μ™€ λ¬΄κ΄€ν•œ 일반 ν•¨μˆ˜μ²˜λŸΌ λ™μž‘

class Example:
    class_variable = "클래슀 λ³€μˆ˜"

    def __init__(self, value):
        self.instance_variable = value  # μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

    def instance_method(self):  # μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ
        return f"μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ κ°’: {self.instance_variable}"

    @classmethod
    def class_method(cls):  # 클래슀 λ©”μ„œλ“œ
        return f"클래슀 λ³€μˆ˜ κ°’: {cls.class_variable}"

    @staticmethod
    def static_method():  # 정적 λ©”μ„œλ“œ
        return "이것은 정적 λ©”μ„œλ“œμž…λ‹ˆλ‹€."

# 객체 생성
obj = Example("Hello")

# 호좜
print(obj.instance_method())  # μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ 호좜
print(Example.class_method())  # 클래슀 λ©”μ„œλ“œ 호좜
print(Example.static_method())  # 정적 λ©”μ„œλ“œ 호좜

➌ 상속(Inheritance)

β€’ 상속을 μ‚¬μš©ν•˜λ©΄ κΈ°μ‘΄ 클래슀의 κΈ°λŠ₯을 κ·ΈλŒ€λ‘œ λ¬Όλ €λ°›μ•„ ν™•μž₯ν•  수 있음.

# λΆ€λͺ¨ 클래슀 (Super Class)
class Animal:
    def __init__(self, name):
        self.name = name

    def make_sound(self):
        return "μ†Œλ¦¬λ₯Ό λ‚Έλ‹€"

# μžμ‹ 클래슀 (Sub Class)
class Dog(Animal):  # Animal을 μƒμ†λ°›μŒ
    def make_sound(self):  # λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©
        return "멍멍!"

# 객체 생성
dog = Dog("Buddy")
print(dog.name)  # λΆ€λͺ¨ 클래슀 속성 μ‚¬μš©
print(dog.make_sound())  # μžμ‹ 클래슀의 μ˜€λ²„λΌμ΄λ”©λœ λ©”μ„œλ“œ μ‹€ν–‰

좜λ ₯ κ²°κ³Ό

Buddy
멍멍!

πŸ“Œ 4️⃣ 클래슀 μ‚¬μš© 예제 (심화)

➊ 은행 κ³„μ’Œ 클래슀

class BankAccount:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.balance = balance

    def deposit(self, amount):  # μž…κΈˆ λ©”μ„œλ“œ
        self.balance += amount
        print(f"{amount}원이 μž…κΈˆλ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ μž”μ•‘: {self.balance}원")

    def withdraw(self, amount):  # 좜금 λ©”μ„œλ“œ
        if self.balance >= amount:
            self.balance -= amount
            print(f"{amount}원이 μΆœκΈˆλ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ μž”μ•‘: {self.balance}원")
        else:
            print("μž”μ•‘μ΄ λΆ€μ‘±ν•©λ‹ˆλ‹€!")

# κ³„μ’Œ 생성
account = BankAccount("Alice", 1000)
account.deposit(500)   # 500원 μž…κΈˆ
account.withdraw(200)  # 200원 좜금
account.withdraw(2000)  # μž”μ•‘ λΆ€μ‘±

βž‹ μžλ™μ°¨ 클래슀

class Car:
    def __init__(self, brand, model, year):
        self.brand = brand
        self.model = model
        self.year = year
        self.speed = 0

    def accelerate(self):
        self.speed += 10
        print(f"{self.brand} {self.model} 속도 증가: {self.speed} km/h")

    def brake(self):
        self.speed = max(0, self.speed - 10)
        print(f"{self.brand} {self.model} 속도 κ°μ†Œ: {self.speed} km/h")

# 객체 생성
my_car = Car("Tesla", "Model 3", 2022)
my_car.accelerate()
my_car.accelerate()
my_car.brake()

🎯 정리

κ°œλ…μ„€λͺ…
init()μƒμ„±μž (객체가 생성될 λ•Œ μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜)
selfν˜„μž¬ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•˜λŠ” λ³€μˆ˜
μΈμŠ€ν„΄μŠ€ λ³€μˆ˜κ°œλ³„ 객체가 κ°€μ§€λŠ” λ³€μˆ˜ (self.λ³€μˆ˜λͺ…)
클래슀 λ³€μˆ˜λͺ¨λ“  객체가 κ³΅μœ ν•˜λŠ” λ³€μˆ˜ (클래슀λͺ….λ³€μˆ˜λͺ…)
μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œκ°œλ³„ 객체의 λ™μž‘μ„ μ •μ˜
클래슀 λ©”μ„œλ“œ (@classmethod)클래슀 λ³€μˆ˜λ₯Ό λ³€κ²½ν•  λ•Œ μ‚¬μš©
정적 λ©”μ„œλ“œ (@staticmethod)독립적인 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜
상속 (Inheritance)κΈ°μ‘΄ 클래슀λ₯Ό ν™•μž₯ν•˜μ—¬ μƒˆλ‘œμš΄ 클래슀λ₯Ό μ •μ˜
λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜
profile
κ³΅λΆ€ν•˜λŠ” 개발자

0개의 λŒ“κΈ€