파이썬 클래스는 객체 지향 프로그래밍(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
참고문헌
- Python 공식 문서 - Classes
'Language' 카테고리의 다른 글
큐와 스택의 이해와 Python 구현 (0) | 2025.04.28 |
---|---|
싱글턴(Singleton) 패턴: 객체의 유일성을 보장하는 설계 패턴 완벽 분석 (0) | 2025.04.28 |
파이썬 초보를 위한 리스트와 NumPy Array 차이 쉽게 이해하기 (0) | 2025.04.23 |
파이썬 mutable과 immutable 변수들 (0) | 2025.04.19 |
파이썬 'global'과 'nonlocal' 키워드 설명 및 예제 (0) | 2025.04.19 |