너도 할 수 있는, 너도밤나무 코딩

[Python] 클래스(Class) 심화 가이드 본문

프로그래밍 언어/파이썬

[Python] 클래스(Class) 심화 가이드

곡마일장 2025. 9. 10. 09:41
반응형

파이썬에서 클래스는 객체 지향 프로그래밍(OOP)의 핵심입니다.
이 글에서는 클래스 기본 문법부터 속성, 메서드, 상속, 다형성, 실전 예제와 설계 팁까지 자세히 다룹니다.


1. 클래스 기본 문법

클래스는 데이터와 기능을 하나로 묶은 구조입니다.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        print(f"안녕하세요, {self.name}입니다. 나이는 {self.age}살이에요.")

# 사용 예
p1 = Person("철수", 30)
p1.greet()  # 안녕하세요, 철수입니다. 나이는 30살이에요.
  • __init__ : 생성자(Constructor)
  • self : 인스턴스 자신을 가리킴
  • 속성과 메서드를 정의할 수 있음

2. 속성(Attribute)과 메서드(Method)

속성

  • 인스턴스 속성: 객체마다 다른 값
  • 클래스 속성: 모든 객체가 공유
class Dog:
    species = "개"  # 클래스 속성

    def __init__(self, name):
        self.name = name  # 인스턴스 속성

# 사용 예
d1 = Dog("바둑이")
d2 = Dog("멍멍이")
print(d1.species, d1.name)  # 개 바둑이
print(d2.species, d2.name)  # 개 멍멍이

메서드

  • 인스턴스 메서드: 객체에 종속
  • 클래스 메서드: 클래스 자체에 종속 (@classmethod)
  • 정적 메서드: 클래스/객체와 관계없이 사용 (@staticmethod)
class MathUtils:
    @staticmethod
    def add(a, b):
        return a + b

print(MathUtils.add(3, 5))  # 8

3. 상속(Inheritance)

부모 클래스의 속성과 메서드를 자식 클래스가 물려받음.

class Animal:
    def __init__(self, name):
        self.name = name
    def speak(self):
        pass

class Cat(Animal):
    def speak(self):
        print(f"{self.name} 야옹")

c = Cat("나비")
c.speak()  # 나비 야옹

4. 다형성(Polymorphism)

같은 이름의 메서드가 서로 다른 동작을 수행할 수 있음.

animals = [Cat("나비"), Dog("바둑이")]

for animal in animals:
    try:
        animal.speak()
    except AttributeError:
        print(f"{animal.name}은 말하지 못해요.")

5. 실전 예제

class Vehicle:
    def __init__(self, brand, speed=0):
        self.brand = brand
        self.speed = speed

    def accelerate(self, value):
        self.speed += value
        print(f"{self.brand} 속도: {self.speed}km/h")

class Car(Vehicle):
    def honk(self):
        print(f"{self.brand} 빵빵!")

my_car = Car("BMW")
my_car.accelerate(50)
my_car.honk()

6. 설계 팁

  1. 작게 설계: 한 클래스는 한 가지 역할만
  2. 상속과 합성의 균형: 불필요한 상속 지양, 필요 시 합성 사용
  3. 메서드 최소화: 객체 상태 변경과 데이터 접근은 최소화
  4. 캡슐화: _속성으로 외부 접근 제한
반응형