Python 객체지향 프로그래밍(OOP) 개념 이해하기
Python은 객체지향 프로그래밍(OOP)을 지원하는 대표적인 언어 중 하나입니다. 객체지향 프로그래밍은 코드 재사용성과 유지보수성을 높이는 데 큰 역할을 하는 프로그래밍 패러다임입니다. 이번 글에서는 Python의 객체지향 프로그래밍을 이해하기 위해 클래스와 객체의 개념을 배우고, 이를 실제로 어떻게 정의하고 사용하는지에 대해 알아보겠습니다. 또한 상속과 다형성이라는 중요한 객체지향 개념도 함께 다루어 보겠습니다.
클래스와 객체란 무엇인가?
- 클래스(Class): 클래스는 객체를 생성하기 위한 청사진(설계도)입니다. 클래스는 데이터와 데이터를 다루는 메서드를 정의합니다. 예를 들어, 자동차라는 클래스를 만든다면, 속성으로는 '색상', '모델', '제조사' 등을 가질 수 있고, 메서드로는 '주행하기', '정지하기' 등이 있을 수 있습니다.
- 객체(Object): 객체는 클래스를 이용해 만들어진 실제 존재하는 개체입니다. 클래스가 설계도라면, 객체는 설계도를 바탕으로 만들어진 실제 자동차라고 할 수 있습니다. 하나의 클래스로 여러 개의 객체를 만들 수 있습니다.
클래스와 객체의 관계는 설계도와 제품의 관계와 같습니다. 클래스는 객체를 정의하는 데 필요한 구조를 정의하고, 객체는 그 구조를 기반으로 실제로 동작합니다.
클래스 정의하기
Python에서 클래스를 정의하는 방법은 간단합니다. class
키워드를 사용해 클래스를 정의할 수 있습니다. 아래는 기본적인 클래스를 정의하는 예제입니다.
class Car:
def __init__(self, color, model):
self.color = color # 속성 정의
self.model = model
def drive(self):
print(f"{self.color} {self.model}가 주행 중입니다.")
위 코드에서 Car
클래스는 두 개의 속성 color
와 model
을 가지고 있으며, drive
라는 메서드를 정의합니다. __init__
메서드는 생성자로, 객체가 생성될 때 호출되어 속성을 초기화합니다.
객체 생성하기
이제 Car
클래스를 이용해 객체를 생성해보겠습니다.
my_car = Car("빨간색", "소나타")
my_car.drive()
출력 결과:
빨간색 소나타가 주행 중입니다.
위 예제에서는 Car
클래스를 이용해 my_car
라는 객체를 만들었습니다. 이 객체는 drive
메서드를 호출할 수 있으며, 속성인 color
와 model
의 값을 사용할 수 있습니다.
클래스 속성과 메서드
클래스에는 객체의 상태를 나타내는 속성(Attribute)과 객체가 수행할 수 있는 메서드(Method)가 있습니다. 속성은 __init__
메서드에서 초기화되며, 메서드는 클래스 내에 정의된 함수입니다.
아래 예제에서는 속성에 접근하고, 메서드를 사용하는 방법을 보여줍니다.
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
print(f"{self.name}가 짖습니다: 멍멍!")
my_dog = Dog("바둑이", "진돗개")
print(my_dog.name) # 속성 접근
my_dog.bark() # 메서드 호출
출력 결과:
바둑이
바둑이가 짖습니다: 멍멍!
상속(Inheritance)
상속은 기존 클래스를 바탕으로 새로운 클래스를 만드는 것을 의미합니다. 상속을 사용하면 코드의 재사용성을 높일 수 있습니다. 새로운 클래스는 기존 클래스의 속성과 메서드를 물려받을 수 있으며, 필요에 따라 새로운 기능을 추가하거나 기존 기능을 수정할 수 있습니다.
아래 예제는 상속을 사용하는 방법을 보여줍니다.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name}이(가) 소리를 냅니다.")
class Cat(Animal):
def speak(self):
print(f"{self.name}이(가) 야옹 하고 소리를 냅니다.")
my_cat = Cat("나비")
my_cat.speak()
출력 결과:
나비이(가) 야옹 하고 소리를 냅니다.
위 예제에서 Cat
클래스는 Animal
클래스를 상속받습니다. Cat
클래스는 speak
메서드를 재정의하여 고양이의 특성을 반영하도록 수정했습니다. 이렇게 상속을 통해 기존 클래스를 재사용하고, 필요한 부분만 수정할 수 있습니다.
다형성(Polymorphism)
다형성은 동일한 메서드 이름이 서로 다른 클래스에서 다른 동작을 하도록 하는 객체지향 프로그래밍의 중요한 개념입니다. 이를 통해 코드의 유연성과 확장성을 높일 수 있습니다.
아래 예제는 다형성을 보여줍니다.
class Bird:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name}이(가) 지저귑니다.")
class Dog(Animal):
def speak(self):
print(f"{self.name}이(가) 멍멍 짖습니다.")
animals = [Bird("참새"), Dog("진돗개"), Cat("고양이")]
for animal in animals:
animal.speak()
출력 결과:
참새이(가) 지저귑니다.
진돗개이(가) 멍멍 짖습니다.
고양이이(가) 야옹 하고 소리를 냅니다.
위 예제에서는 Bird
, Dog
, Cat
객체가 animals
리스트에 포함되어 있습니다. for
루프를 통해 각 객체의 speak
메서드를 호출할 때, 객체의 실제 클래스에 맞는 메서드가 호출됩니다. 이것이 바로 다형성의 예시입니다.
정리
이번 포스팅에서는 Python의 객체지향 프로그래밍 개념인 클래스와 객체에 대해 알아보고, 클래스를 정의하고 객체를 생성하는 방법을 배웠습니다. 또한 상속과 다형성의 개념을 예제와 함께 살펴보았습니다.
객체지향 프로그래밍은 코드의 재사용성과 유지보수성을 높이는 강력한 도구입니다. Python에서 OOP를 잘 활용하면 더 깨끗하고 확장 가능한 코드를 작성할 수 있습니다.
'Python > Python' 카테고리의 다른 글
Python 예외 처리 가이드 (0) | 2025.07.03 |
---|---|
Python 파일 입출력 기초 - 파일 읽기와 쓰기 (0) | 2025.07.02 |
Python 내장 함수와 사용자 정의 함수의 심화 사용법 (0) | 2025.06.30 |
Python의 함수(Function)를 소개합니다 (0) | 2025.06.29 |
Python 자료구조 알아보기: 리스트, 튜플, 딕셔너리, 집합(Set)의 차이점 (0) | 2025.06.28 |