Python 05 - Class

KjjeddΒ·2025λ…„ 12μ›” 29일

Python

λͺ©λ‘ 보기
5/10
post-thumbnail

πŸ“˜ 6. 클래슀 기초 (Class Basics)

이 μ±•ν„°λŠ” Python 클래슀의 기초 문법뿐 μ•„λ‹ˆλΌ, μ‹€λ¬΄μ—μ„œ κ°€μž₯ 자주 μ‚¬μš©λ˜λŠ” 클래슀 섀계 νŒ¨ν„΄κΉŒμ§€ ν•¨κ»˜ 닀룬닀.


🎯 μ™œ 클래슀λ₯Ό λ°°μ›Œμ•Ό ν• κΉŒ?

μ‹€λ¬΄μ—μ„œλŠ” 수백~수천 μ€„μ˜ μ½”λ“œκ°€ ν•˜λ‚˜μ˜ μ„œλΉ„μŠ€ μ•ˆμ—μ„œ λ™μž‘ν•œλ‹€. λ³€μˆ˜μ™€ ν•¨μˆ˜λ§ŒμœΌλ‘œ μ½”λ“œλ₯Ό κ΅¬μ„±ν•˜λ©΄ 데이터와 둜직이 흩어져 μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ–΄λ €μš΄ μ½”λ“œκ°€ λœλ‹€.

ν΄λž˜μŠ€λŠ” κ΄€λ ¨λœ 데이터(속성)와 κΈ°λŠ₯(λ©”μ„œλ“œ)을 ν•˜λ‚˜λ‘œ λ¬Άμ–΄ μ½”λ“œλ₯Ό κ΅¬μ‘°ν™”ν•˜λŠ” 핡심 도ꡬ닀.


❌ 클래슀 없이 관리할 λ•Œμ˜ 문제점


student1_name = "κΉ€μ² μˆ˜"
student1_id = "2024001"
student1_score = 85
student2_name = "이영희"
student2_id = "2024002"
student2_score = 92
  • 학생 μˆ˜κ°€ 늘수둝 λ³€μˆ˜ 폭증
  • 데이터 ꡬ쑰가 μ½”λ“œμ— λ“œλŸ¬λ‚˜μ§€ μ•ŠμŒ
  • κΈ°λŠ₯ μΆ”κ°€ μ‹œ 전체 μ½”λ“œ μˆ˜μ • ν•„μš”

βœ… 클래슀둜 문제 ν•΄κ²°


class Student:
    def __init__(self, name, student_id, score):
        self.name = name
        self.student_id = student_id
        self.score = score
def is_passed(self):
    return self.score >= 60

def get_grade(self):
    if self.score >= 90:
        return "A"
    elif self.score >= 80:
        return "B"
    elif self.score >= 70:
        return "C"
    else:
        return "F"

이제 학생이 30λͺ…, 300λͺ…μœΌλ‘œ λŠ˜μ–΄λ‚˜λ„ 클래슀 ν•˜λ‚˜λ‘œ 일관성 있게 관리할 수 μžˆλ‹€.


πŸ—οΈ 클래슀 핡심 κ°œλ… 정리

κ°œλ…μ„€λͺ…
클래슀객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ 섀계도
μΈμŠ€ν„΄μŠ€ν΄λž˜μŠ€λ‘œ μƒμ„±λœ μ‹€μ œ 객체
속성객체가 κ°€μ§„ 데이터
λ©”μ„œλ“œκ°μ²΄κ°€ μˆ˜ν–‰ν•˜λŠ” λ™μž‘

βš™οΈ __init__ λ©”μ„œλ“œ (μƒμ„±μž)

__init__은 μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œ μžλ™ μ‹€ν–‰λ˜λŠ” μ΄ˆκΈ°ν™” λ©”μ„œλ“œλ‹€.


student = Student("κΉ€μ² μˆ˜", "2024001", 85)
  1. 빈 객체 생성
  2. __init__ 호좜
  3. 속성 μ €μž₯
  4. μ™„μ„±λœ 객체 λ°˜ν™˜

πŸͺž self의 μ •ν™•ν•œ 의미

selfλŠ” ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ μΈμŠ€ν„΄μŠ€ μžμ‹ μ΄λ‹€.


class User:
    def __init__(self, name):
        self.name = name

    def greet(self):
        print(self.name)

alice = User("Alice")
bob = User("Bob")

alice.greet()  # Alice
bob.greet()    # Bob

λ©”μ„œλ“œλŠ” 항상 μΈμŠ€ν„΄μŠ€.method() ν˜•νƒœλ‘œ 호좜되며, Python이 μžλ™μœΌλ‘œ selfλ₯Ό μ „λ‹¬ν•œλ‹€.


πŸ“Œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ vs 클래슀 λ³€μˆ˜ (μ€‘μš”)

μΈμŠ€ν„΄μŠ€ λ³€μˆ˜


class User:
    def __init__(self, name):
        self.name = name
  • κ°μ²΄λ§ˆλ‹€ κ°œλ³„ κ°’
  • selfλ₯Ό 톡해 μ ‘κ·Ό

클래슀 λ³€μˆ˜


class User:
    count = 0
def __init__(self, name):
    self.name = name
    User.count += 1

  • λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ 곡유
  • 톡계, 섀정값에 자주 μ‚¬μš©

🏭 싀무 νŒ¨ν„΄ 1: 데이터 μ „μš© 클래슀


from dataclasses import dataclass

@dataclass
class ServerConfig:
host: str
port: int
timeout: int = 30

<dataclassλŠ” μ„€μ •κ°’, DTO(Data Transfer Object)에 맀우 자주 쓰인닀.


πŸ›’ 싀무 νŒ¨ν„΄ 2: μƒνƒœ(State) 관리 클래슀


class ShoppingCart:
    def __init__(self):
        self.items = []
def add_item(self, item, price):
    self.items.append({"item": item, "price": price})

def get_total(self):
    return sum(i["price"] for i in self.items)

ν΄λž˜μŠ€λŠ” μƒνƒœ + ν–‰μœ„λ₯Ό ν•¨κ»˜ κ΄€λ¦¬ν•˜λŠ” 데 μ΅œμ ν™”λœ ꡬ쑰닀.


🧠 싀무 νŒ¨ν„΄ 3: 단일 μ±…μž„ 원칙 (SRP)

ν•˜λ‚˜μ˜ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ μ—­ν• λ§Œ κ°€μ Έμ•Ό ν•œλ‹€.


class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email

class UserRepository:
    def save(self, user): pass

class EmailService:
    def send(self, user, message): pass

이 원칙을 μ§€ν‚€μ§€ μ•ŠμœΌλ©΄ God Objectκ°€ λœλ‹€.


❗가μž₯ 많이 ν•˜λŠ” μ‹€μˆ˜

  • λͺ¨λ“  κΈ°λŠ₯을 ν•œ ν΄λž˜μŠ€μ— λͺ°μ•„λ„£κΈ°
  • self μƒλž΅
  • 클래슀 λ³€μˆ˜μ™€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ ν˜Όλ™
  • 클래슀 없이 dict둜만 ꡬ쑰 λ§Œλ“€κΈ°

πŸ“Œ 핡심 μš”μ•½

ν‚€μ›Œλ“œμ˜λ―Έ
class섀계도
instanceμ‹€μ œ 객체
__init__μ΄ˆκΈ°ν™”
self객체 μžμ‹ 
state객체의 ν˜„μž¬ μƒνƒœ

profile
Gongbuhaja

0개의 λŒ“κΈ€