7장: 객체 지향 프로그래밍
파이썬은 객체 지향 프로그래밍(OOP)을 지원하는 언어입니다. 객체 지향 프로그래밍은 데이터를 객체로 모델링하고, 객체 간의 상호작용을 통해 프로그램을 설계하는 방식입니다. 이 장에서는 객체 지향 프로그래밍의 기본 개념과 파이썬에서 클래스를 정의하고 사용하는 방법에 대해 알아보겠습니다.
#### 7.1 클래스와 객체
클래스는 객체를 생성하기 위한 템플릿(청사진)입니다. 객체는 클래스의 인스턴스(instance)로, 클래스에서 정의한 속성과 메서드를 가집니다.
```python
# 클래스 정의
class Dog:
# 생성자 메서드
def __init__(self, name, age):
self.name = name
self.age = age
# 메서드 정의
def bark(self):
print(f"{self.name}가 짖습니다.")
# 객체 생성
my_dog = Dog("Buddy", 3)
# 객체의 메서드 호출
my_dog.bark() # 출력: Buddy가 짖습니다.
```
#### 7.2 생성자와 소멸자
생성자(Constructor)는 객체가 생성될 때 자동으로 호출되는 메서드로, `__init__` 메서드를 사용하여 정의합니다. 소멸자(Destructor)는 객체가 소멸될 때 호출되는 메서드로, `__del__` 메서드를 사용하여 정의합니다.
```python
# 생성자와 소멸자 예제
class Cat:
def __init__(self, name):
self.name = name
print(f"{self.name}가 태어났습니다.")
def __del__(self):
print(f"{self.name}가 죽었습니다.")
# 객체 생성
my_cat = Cat("Whiskers")
# 객체 소멸
del my_cat
```
#### 7.3 상속
상속(Inheritance)은 기존 클래스를 기반으로 새로운 클래스를 정의하는 방법입니다. 상속을 통해 코드의 재사용성을 높이고, 클래스 간의 관계를 모델링할 수 있습니다.
```python
# 상속 예제
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
print("소리를 냅니다.")
class Dog(Animal):
def make_sound(self):
print(f"{self.name}가 멍멍 짖습니다.")
class Cat(Animal):
def make_sound(self):
print(f"{self.name}가 야옹 웁니다.")
# 객체 생성 및 메서드 호출
dog = Dog("Buddy")
cat = Cat("Whiskers")
dog.make_sound() # 출력: Buddy가 멍멍 짖습니다.
cat.make_sound() # 출력: Whiskers가 야옹 웁니다.
```
#### 7.4 메서드 오버라이딩
메서드 오버라이딩(Method Overriding)은 상위 클래스에서 정의된 메서드를 하위 클래스에서 재정의하는 것입니다. 이를 통해 하위 클래스에서 상위 클래스의 동작을 변경할 수 있습니다.
```python
# 메서드 오버라이딩 예제
class Bird(Animal):
def make_sound(self):
print(f"{self.name}가 짹짹 웁니다.")
bird = Bird("Tweety")
bird.make_sound() # 출력: Tweety가 짹짹 웁니다.
```
#### 7.5 다중 상속
파이썬은 다중 상속(Multiple Inheritance)을 지원하며, 여러 개의 클래스를 상속받을 수 있습니다. 다중 상속을 사용할 때는 클래스의 상속 순서를 주의해야 합니다.
```python
# 다중 상속 예제
class Swimmable:
def swim(self):
print("수영을 합니다.")
class Flyable:
def fly(self):
print("날아다닙니다.")
class Duck(Animal, Swimmable, Flyable):
def make_sound(self):
print(f"{self.name}가 꽥꽥 웁니다.")
duck = Duck("Donald")
duck.make_sound() # 출력: Donald가 꽥꽥 웁니다.
duck.swim() # 출력: 수영을 합니다.
duck.fly() # 출력: 날아다닙니다.
```
#### 7.6 캡슐화
캡슐화(Encapsulation)는 객체의 속성과 메서드를 외부로부터 숨기고, 객체 내부의 데이터에 접근할 수 있는 방법을 제공하는 것입니다. 파이썬에서는 변수 이름 앞에 밑줄(_)을 붙여서 비공개 속성을 나타낼 수 있습니다.
```python
# 캡슐화 예제
class Person:
def __init__(self, name, age):
self.__name = name # 비공개 속성
self.__age = age # 비공개 속성
def get_name(self):
return self.__name
def get_age(self):
return self.__age
person = Person("Alice", 30)
print(person.get_name()) # 출력: Alice
print(person.get_age()) # 출력: 30
```
#### 7.7 다형성
다형성(Polymorphism)은 동일한 인터페이스를 사용하여 서로 다른 데이터 타입을 처리할 수 있는 기능을 의미합니다. 파이썬에서는 메서드 오버라이딩과 같은 기능을 통해 다형성을 구현할 수 있습니다.
```python
# 다형성 예제
class Shape:
def draw(self):
raise NotImplementedError("서브클래스에서 구현해야 합니다.")
class Circle(Shape):
def draw(self):
print("원을 그립니다.")
class Rectangle(Shape):
def draw(self):
print("사각형을 그립니다.")
shapes = [Circle(), Rectangle()]
for shape in shapes:
shape.draw()
# 출력: 원을 그립니다.
# 출력: 사각형을 그립니다.
```
이상으로, 파이썬에서 객체 지향 프로그래밍을 사용하는 방법에 대해 알아보았습니다. 다음 장에서는 모듈과 패키지에 대해 더 자세히 알아보겠습니다. 질문이나 요청사항이 있으시면 댓글로 남겨주세요!
---
이 글의 내용은 GoalKicker.com의 Python Notes for Professionals 책을 참조하였습니다.
댓글
댓글 쓰기