파이썬 클래스 (Class): 개념 및 사용법
클래스(Class) 는 객체 지향 프로그래밍(OOP, Object-Oriented Programming)의 기본 단위로, 데이터와 해당 데이터를 처리하는 메서드(함수)를 함께 정의하는 구조입니다. 클래스를 사용하면 프로그램을 논리적으로 구조화하고 코드 재사용성을 높일 수 있습니다.
1. 클래스의 기본 개념
- 클래스(Class): 객체를 생성하기 위한 청사진(템플릿)입니다.
- 객체(Object): 클래스에서 생성된 인스턴스(instance)입니다.
- 속성(Attribute): 객체의 데이터(변수)입니다.
- 메서드(Method): 객체가 수행할 수 있는 동작(함수)입니다.
2. 클래스 정의
class키워드를 사용하여 클래스를 정의합니다.-
구문:
class 클래스이름: 클래스 변수 메서드 -
예제:
class Person: def __init__(self, name, age): # 생성자 메서드 self.name = name self.age = age def greet(self): # 메서드 print(f"안녕하세요, 저는 {self.name}이고, 나이는 {self.age}입니다.")
3. 객체 생성 및 사용
객체 생성
- 클래스를 호출하여 객체를 생성합니다.
- 예제:
p1 = Person("철수", 25) p2 = Person("영희", 30)
객체 속성 접근
- 객체의 속성에 점(
.) 연산자를 사용하여 접근합니다. - 예제:
print(p1.name) # 철수 print(p2.age) # 30
객체 메서드 호출
- 점(
.) 연산자로 메서드를 호출합니다. - 예제:
p1.greet() # 안녕하세요, 저는 철수이고, 나이는 25입니다. p2.greet() # 안녕하세요, 저는 영희이고, 나이는 30입니다.
4. 클래스의 구성 요소
(1) 생성자 메서드 (__init__)
- 객체가 생성될 때 호출되어 초기화 작업을 수행합니다.
- 예제:
class Dog: def __init__(self, name, breed): self.name = name self.breed = breed my_dog = Dog("바둑이", "진돗개") print(my_dog.name) # 바둑이 print(my_dog.breed) # 진돗개
(2) 인스턴스 변수
- 객체마다 고유한 값을 가지는 변수.
self를 통해 정의합니다.
(3) 클래스 변수
- 모든 객체가 공유하는 변수. 클래스 이름으로 접근합니다.
- 예제:
class Counter: count = 0 # 클래스 변수 def __init__(self): Counter.count += 1 c1 = Counter() c2 = Counter() print(Counter.count) # 2
(4) 메서드
- 객체가 수행할 수 있는 동작을 정의한 함수.
self를 첫 번째 매개변수로 사용하여 객체를 참조합니다.
(5) 클래스 메서드 (@classmethod)
- 클래스 변수를 다루기 위해 사용. 클래스 자체를 첫 번째 매개변수로 받습니다.
- 예제:
class MyClass: count = 0 @classmethod def increment(cls): cls.count += 1 MyClass.increment() print(MyClass.count) # 1
(6) 정적 메서드 (@staticmethod)
- 클래스와 객체와 관련 없이 동작하는 메서드.
- 예제:
class Math: @staticmethod def add(a, b): return a + b print(Math.add(3, 5)) # 8
5. 상속 (Inheritance)
상속의 개념
- 기존 클래스를 기반으로 새로운 클래스를 정의.
- 코드 재사용성을 높이고, 클래스 계층 구조를 형성.
기본 구문
class 부모클래스:
...
class 자식클래스(부모클래스):
...
예제
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print("소리를 냅니다.")
class Dog(Animal):
def speak(self): # 메서드 오버라이딩
print(f"{self.name}가 멍멍 소리를 냅니다.")
dog = Dog("바둑이")
dog.speak() # 바둑이가 멍멍 소리를 냅니다.
6. 다형성 (Polymorphism)
개념
- 같은 메서드 이름이지만, 클래스에 따라 다르게 동작.
- 예제:
class Cat(Animal): def speak(self): print(f"{self.name}가 야옹 소리를 냅니다.") animals = [Dog("바둑이"), Cat("나비")] for animal in animals: animal.speak() # 바둑이가 멍멍 소리를 냅니다. # 나비가 야옹 소리를 냅니다.
7. 특수 메서드 (Magic Methods)
주요 특수 메서드
__str__: 객체의 문자열 표현 정의.__repr__: 객체의 개발자용 문자열 표현 정의.__add__: 객체 간 덧셈 연산 정의.- 예제:
class Vector: def __init__(self, x, y): self.x = x self.y = y def __add__(self, other): return Vector(self.x + other.x, self.y + other.y) def __str__(self): return f"Vector({self.x}, {self.y})" v1 = Vector(2, 3) v2 = Vector(4, 5) v3 = v1 + v2 print(v3) # Vector(6, 8)
8. 데이터 캡슐화와 접근 제한
캡슐화
- 객체의 내부 데이터를 보호하고, 외부 접근을 제한.
접근 제한자
- 공개 (Public): 모든 곳에서 접근 가능. (기본)
- 비공개 (Private): 클래스 내부에서만 접근 가능. 변수 이름 앞에
__사용. - 예제:
class BankAccount: def __init__(self, balance): self.__balance = balance # 비공개 변수 def deposit(self, amount): self.__balance += amount def get_balance(self): return self.__balance account = BankAccount(1000) account.deposit(500) print(account.get_balance()) # 1500 # print(account.__balance) # AttributeError
9. 클래스 활용 예제
간단한 계산기 클래스
class Calculator:
def __init__(self):
self.result = 0
def add(self, value):
self.result += value
def subtract(self, value):
self.result -= value
def multiply(self, value):
self.result *= value
def divide(self, value):
if value != 0:
self.result /= value
else:
print("0으로 나눌 수 없습니다.")
def clear(self):
self.result = 0
calc = Calculator()
calc.add(10)
calc.multiply(2)
print(calc.result) # 20
요약
- **클래스**는 객체를 생성하기 위한 템플릿.
- **생성자 메서드 (
__init__)**로 객체 초기화. - **속성**은 객체의 데이터, **메서드**는 객체의 동작.
- **상속**과 **다형성**으로 객체 간 관계를 형성.
- **특수 메서드**로 연산자 동작 커스터마이징 가능.
- **캡슐화**로 데이터를 보호하고 관리.
클래스를 잘 활용하면 복잡한 프로그램도 논리적으로 구조화할 수 있습니다! 😊