본문 바로가기
Language

Python Class 문법 완벽 가이드

by markbyun 2025. 4. 27.

파이썬 클래스는 객체 지향 프로그래밍(OOP)의 핵심입니다. 함수와 데이터(속성)를 하나로 묶어 복잡한 프로그램을 구조화하고, 코드 재사용성을 높이는 데 필수적인 도구입니다. 이 글에서는 Python 클래스의 문법과 사용법, 그리고 특징까지 깊이 있게 다루고, 사용자들에게 꼭 필요한 실전 예제와 함께 완전한 코드를 제공합니다.


Python 클래스란 무엇인가?

클래스(Class)는 객체(Object) 를 생성하는 설계도 입니다. 클래스를 기반으로 만든 인스턴스(instance)는 서로 독립적인 속성과 메서드를 가질 수 있어, 대규모 프로그램에서도 깔끔한 구조를 유지할 수 있습니다.

클래스 기본 구조 

class ClassName:
    def __init__(self, parameters):
        self.attribute = value

    def method(self, parameters):
        # method body
        pass
  • __init__() 메서드는 생성자(Constructor)로, 객체가 생성될 때 자동 호출됩니다.
  • self는 인스턴스 자기 자신을 가리키며, 메서드 정의 시 항상 첫 번째 인자로 작성해야 합니다.

Python 클래스의 주요 문법과 사용 방법

1. 클래스 정의 및 인스턴스 생성

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

    def bark(self):
        print(f"{self.name}가 짖습니다. 멍멍!")

# 인스턴스 생성
dog1 = Dog("코코", 3)
dog1.bark()

출력 결과:

코코가 짖습니다. 멍멍!
클래스를 정의하고, 인스턴스를 통해 메서드를 호출합니다.

2. 인스턴스 변수와 클래스 변수

class Car:
    wheels = 4  # 클래스 변수

    def __init__(self, brand):
        self.brand = brand  # 인스턴스 변수

car1 = Car("Tesla")
car2 = Car("BMW")

print(car1.brand)   # Tesla
print(car2.brand)   # BMW
print(car1.wheels)  # 4

 

  • 인스턴스 변수: 객체마다 다른 값을 가짐
  • 클래스 변수: 모든 인스턴스가 공유하는 값
클래스 변수는 메모리를 아끼고, 객체 간 공통 속성을 관리할 때 유용합니다.

3. 메서드 종류: 인스턴스 메서드, 클래스 메서드, 정적 메서드

인스턴스 메서드 (기본)

class Example:
    def instance_method(self):
        print(f"Called by {self}")

ex = Example()
ex.instance_method()

 

 

클래스 메서드 (@classmethod)

class Example:
    count = 0

    def __init__(self):
        Example.count += 1

    @classmethod
    def get_count(cls):
        return cls.count

print(Example.get_count())  # 0
ex1 = Example()
ex2 = Example()
print(Example.get_count())  # 2
  • cls는 클래스 자체를 가리킵니다.

정적 메서드 (@staticmethod)

class Math:
    @staticmethod
    def add(x, y):
        return x + y

print(Math.add(3, 7))  # 10
  • 클래스나 인스턴스에 접근할 필요 없는 독립적인 기능을 만듭니다.

Python 클래스의 주요 특징

1. 상속(Inheritance)

class Animal:
    def speak(self):
        print("동물이 소리를 냅니다.")

class Dog(Animal):
    def speak(self):
        print("개가 짖습니다. 멍멍!")

d = Dog()
d.speak()  # 개가 짖습니다. 멍멍!
  • 기존 클래스를 기반으로 새로운 클래스를 만들 수 있습니다.
  • 메서드 오버라이딩(Override) 으로 부모 클래스의 메서드를 재정의할 수 있습니다.

2. 다중 상속(Multiple Inheritance)

class Father:
    def gardening(self):
        print("아버지가 정원 가꾸기를 합니다.")

class Mother:
    def cooking(self):
        print("어머니가 요리를 합니다.")

class Child(Father, Mother):
    def play(self):
        print("아이가 놉니다.")

c = Child()
c.gardening()
c.cooking()
c.play()
Python은 다중 상속을 지원하지만, 복잡성이 증가하므로 주의해야 합니다.

3. 캡슐화(Encapsulation)

class Account:
    def __init__(self, balance):
        self.__balance = balance  # private 변수

    def deposit(self, amount):
        self.__balance += amount

    def get_balance(self):
        return self.__balance

acc = Account(1000)
acc.deposit(500)
print(acc.get_balance())  # 1500
  • __변수명 형태로 작성하면 외부에서 직접 접근할 수 없습니다.

4. 추상화(Abstraction)

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def move(self):
        pass

class Bird(Animal):
    def move(self):
        print("새가 하늘을 납니다.")

b = Bird()
b.move()
  • ABC 모듈을 사용해 추상 클래스(Abstract Class) 를 만들 수 있습니다.
  • 추상 메서드는 반드시 하위 클래스에서 구현해야 합니다.

완성형 예제: 사용자 관리 시스템

class User:
    user_count = 0  # 클래스 변수

    def __init__(self, username, email):
        self.username = username
        self.email = email
        User.user_count += 1

    def display_info(self):
        print(f"Username: {self.username}, Email: {self.email}")

    @classmethod
    def total_users(cls):
        print(f"총 사용자 수: {cls.user_count}")

    @staticmethod
    def validate_email(email):
        return "@" in email

# 테스트
if __name__ == "__main__":
    if User.validate_email("test@example.com"):
        user1 = User("testuser", "test@example.com")
        user1.display_info()
    
    user2 = User("anotheruser", "another@example.com")
    user2.display_info()

    User.total_users()

출력 결과:

Username: testuser, Email: test@example.com
Username: anotheruser, Email: another@example.com
총 사용자 수: 2

참고문헌