파이썬 클래스는 객체 지향 프로그래밍의 핵심 개념입니다. 클래스를 사용하면 데이터와 해당 데이터를 처리하는 코드를 하나의 논리적 단위로 묶을 수 있습니다. 이번 글에서는 클래스의 기본 개념과 사용법, 다양한 기능들에 대해 설명하겠습니다.
1. 클래스란?
클래스는 객체를 생성하기 위한 설계도입니다. 클래스는 속성(데이터)과 메서드(함수)를 포함할 수 있습니다. 클래스를 사용하면 여러 객체를 효율적으로 생성하고 관리할 수 있습니다.
class Dog:
# 초기화 메서드
def __init__(self, name, age):
self.name = name
self.age = age
# 메서드
def bark(self):
return f"{self.name} is barking."
# 객체 생성
my_dog = Dog("Buddy", 3)
# 메서드 호출
print(my_dog.bark())
# 출력 결과:
# Buddy is barking.
위 코드에서는 'Dog'라는 클래스를 정의하고, 'name'과 'age'라는 속성을 초기화하는 '__init__' 메서드와 'bark' 메서드를 포함하고 있습니다. 'my_dog' 객체를 생성하고 'bark' 메서드를 호출하여 결과를 출력하고 있습니다.
'self'는 클래스의 인스턴스를 나타내는 예약어입니다.
'__init__'은 클래스의 인스턴스를 생성할 때 호출되는 함수입니다. 코드의 12번 째 라인에서 'Dog("Buddy", 3)' 이라는 코드로 객체가 생성됐고, 자동으로 '__init__' 함수가 실행됩니다.
2. 클래스와 인스턴스
클래스는 설계도이고, 인스턴스는 그 설계도를 바탕으로 생성된 실제 객체입니다. 여러 개의 인스턴스를 생성할 수 있으며, 각 인스턴스는 독립적인 상태를 가집니다.
dog1 = Dog("Buddy", 3)
dog2 = Dog("Molly", 5)
print(dog1.bark()) # 출력 결과: Buddy is barking.
print(dog2.bark()) # 출력 결과: Molly is barking.
위 코드에서는 'Dog' 클래스의 두 인스턴스를 생성하고, 각 인스턴스의 'bark' 메서드를 호출합니다.
3. 클래스 속성과 인스턴스 속성
클래스 속성은 모든 인스턴스가 공유하는 속성이고, 인스턴스 속성은 각 인스턴스마다 고유한 속성입니다.
class Dog:
# 클래스 속성
species = "Canis familiaris"
def __init__(self, name, age):
# 인스턴스 속성
self.name = name
self.age = age
dog1 = Dog("Buddy", 3)
dog2 = Dog("Molly", 5)
print(Dog.species) # 출력 결과: Canis familiaris
print(dog1.species) # 출력 결과: Canis familiaris
print(dog2.species) # 출력 결과: Canis familiaris
위 코드에서는 'species' 라는 클래스 속성을 정의하고, 이를 통해 모든 'Dog' 인스턴스가 같은 값을 공유합니다.
4. 메서드 종류
클래스 내에는 여러 종류의 메서드가 있습니다. 일반 메서드, 클래스 메서드, 정적 메서드가 그 예입니다.
일반 메서드
일반 메서드는 첫 번째 매개변수로 항상 인스턴스 자신을 가리키는 'self'를 받습니다.
클래스 메서드
클래스 메서드는 첫 번째 매개변수로 클래스 자신을 가르키는 'cls'를 받으며, '@classmethod' 데코레이터로 정의합니다.
정적 메서드
정적 메서드는 클래스나 인스턴스에 관계없이 호출될 수 있으며, '@staticmethod' 데코레이터로 정의합니다.
class Dog:
species = "Canis familiaris"
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
return f"{self.name} is barking."
@classmethod
def get_species(cls):
return cls.species
@staticmethod
def is_domestic():
return True
print(Dog.get_species()) # 출력 결과: Canis familiaris
print(Dog.is_domestic()) # 출력 결과: True
위 코드에서는 'bark'라는 일반 메서드, 'get_species'라는 클래스 메서드, 'is_domestic'이라는 정적 메서드를 정의하고 호출합니다.
5. 상속
상속은 기존 클래스를 기반으로 새로운 클래스를 생성하는 방법입니다. 상속을 통해 코드를 재사용하고, 기능을 확장할 수 있습니다.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Subclass must implement this method")
class Dog(Animal):
def speak(self):
return f"{self.name} says woof!"
class Cat(Animal):
def speak(self):
return f"{self.name} says meow!"
dog = Dog("Buddy")
cat = Cat("Molly")
print(dog.speak()) # 출력 결과: Buddy says woof!
print(cat.speak()) # 출력 결과: Molly says meow!
위 코드에서는 'Animal'이라는 부모 클래스를 상속받아 'Dog'와 'Cat' 클래스를 생성하고, 각 클래스에서 'speak' 메서드를 구현합니다.
6. 다형성
다형성은 같은 인터페이스를 통해 다른 클래스의 객체를 처리할 수 있는 능력입니다. 이는 코드의 유연성과 확장성을 높입니다.
animals = [Dog("Buddy"), Cat("Molly")]
for animal in animals:
print(animal.speak())
# 출력 결과:
# Buddy says woof!
# Molly says meow!
위 코드에서는 'Dog'와 'Cat' 객체를 같은 리스트에 넣고, 반복문을 통해 각 객체의 'speak' 메서드를 호출합니다.
이번 글에서는 파이썬 클래스의 개념과 기능들에 대해 살펴보았습니다. 파이썬 클래스는 객체 지향 프로그래밍의 핵심 개념으로, 복잡한 프로그램을 설계하고 유지보수하는 데 매우 유용합니다. 이상입니다.
'Python > 문법' 카테고리의 다른 글
[Python] 파이썬 예외 처리 정리 및 사용법 (0) | 2024.08.05 |
---|---|
[Python] 파이썬 파일 읽기와 파일 쓰기에 대해서 (0) | 2024.08.04 |
[Python] 파이썬 함수 기능 정리 및 예제 (0) | 2024.08.02 |
[Python] 파이썬 while문 정리 및 예제 (0) | 2024.08.01 |
[Python] 파이썬 for문 정리 및 예제 (0) | 2024.07.31 |
댓글