티스토리 뷰
목차
프로그래밍에서 객체지향 프로그래밍(OOP)은 코드의 재사용성과 유지보수성을 극대화할 수 있는 중요한 패러다임입니다. 특히, Python은 OOP를 쉽고 직관적으로 사용할 수 있는 언어입니다. 저도 오랜 시간 Java를 메인 언어로 사용해왔지만, Python의 객체지향 문법은 훨씬 더 간결하고 직관적이라 초보 개발자들에게 추천하고 싶습니다. 클래스의 개념이 낯설더라도, 몇 가지 실습을 통해 연습하다 보면 클래스의 강력함과 유용함을 이해할 수 있을 겁니다. 이번 글에서는 Python 클래스의 기본 개념부터 실습 예제까지 상세하게 다뤄보겠습니다.
1. 간단한 클래스 정의하기: 첫 번째 실습 예제
클래스를 처음 배울 때 가장 중요한 것은 기본적인 클래스를 정의하고, 객체를 생성하며, 속성과 메서드를 다루는 것입니다. Python에서 클래스를 정의하는 방법부터 간단한 예제를 통해 연습해보겠습니다.
예제 1: 사람 클래스를 정의하고 객체 생성하기
class Person:
"""사람을 나타내는 클래스"""
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"안녕하세요, 제 이름은 {self.name}이고, 나이는 {self.age}살입니다.")
- 설명: Person이라는 클래스를 정의하고, __init__ 메서드로 이름과 나이를 초기화합니다. introduce 메서드를 사용해 자신을 소개하는 기능을 추가했습니다.
실습
person1 = Person("철수", 30)
person2 = Person("영희", 25)
person1.introduce() # 출력: 안녕하세요, 제 이름은 철수이고, 나이는 30살입니다.
person2.introduce() # 출력: 안녕하세요, 제 이름은 영희이고, 나이는 25살입니다.
- 목표: 클래스와 객체 생성의 기본 개념을 이해하고, 객체의 메서드를 호출하여 동작을 확인합니다.
2. 클래스 속성과 메서드 이해하기: 자동차 클래스
클래스는 속성(Attributes)과 메서드(Methods)로 구성됩니다. 이번 실습에서는 클래스 속성과 메서드를 활용하여 자동차의 정보를 저장하고, 동작을 구현해보겠습니다.
예제 2: 자동차 클래스
class Car:
"""자동차를 나타내는 클래스"""
def __init__(self, brand, model, year):
self.brand = brand
self.model = model
self.year = year
def start(self):
print(f"{self.brand} {self.model}의 시동을 겁니다.")
def stop(self):
print(f"{self.brand} {self.model}의 시동을 끕니다.")
- 설명: Car 클래스는 브랜드, 모델, 연도를 속성으로 가지며, 시동을 걸고 끄는 start와 stop 메서드를 정의합니다.
실습
my_car = Car("Hyundai", "Sonata", 2020)
my_car.start() # 출력: Hyundai Sonata의 시동을 겁니다.
my_car.stop() # 출력: Hyundai Sonata의 시동을 끕니다.
- 목표: 클래스 속성과 메서드를 활용해 객체가 어떻게 행동하는지 확인합니다.
3. 상속을 통해 클래스 확장하기: 전기차 클래스
상속은 기존 클래스를 확장하여 새로운 기능을 추가할 때 사용됩니다. 이번 실습에서는 기존의 Car 클래스를 상속하여 전기차(ElectricCar) 클래스를 만들어 보겠습니다.
예제 3: 전기차 클래스
class ElectricCar(Car):
"""전기차를 나타내는 클래스 (Car 클래스를 상속)"""
def __init__(self, brand, model, year, battery_size):
super().__init__(brand, model, year)
self.battery_size = battery_size
def show_battery(self):
print(f"{self.model}의 배터리 용량은 {self.battery_size}kWh입니다.")
- 설명: ElectricCar 클래스는 Car 클래스를 상속하여 배터리 용량(battery_size) 속성을 추가하고, 이를 출력하는 show_battery 메서드를 정의합니다.
실습
my_electric_car = ElectricCar("Tesla", "Model 3", 2021, 75)
my_electric_car.start() # 출력: Tesla Model 3의 시동을 겁니다.
my_electric_car.show_battery() # 출력: Model 3의 배터리 용량은 75kWh입니다.
- 목표: 상속을 사용하여 기존 클래스의 기능을 확장하고 새로운 메서드를 추가하는 방법을 익힙니다.
4. 클래스 메서드와 정적 메서드: 다양한 메서드 사용법
Python 클래스에서는 인스턴스 메서드뿐만 아니라 클래스 메서드와 정적 메서드도 사용할 수 있습니다. 이들은 클래스와 객체의 동작 방식을 유연하게 제어할 수 있습니다.
예제 4: 클래스 메서드와 정적 메서드
class MathOperations:
"""수학 연산을 제공하는 클래스"""
@classmethod
def add(cls, a, b):
return a + b
@staticmethod
def subtract(a, b):
return a - b
- 설명: MathOperations 클래스는 클래스 메서드 add와 정적 메서드 subtract를 정의합니다. 클래스 메서드는 클래스 자체를 참조하며, 정적 메서드는 인스턴스나 클래스와 관계없이 작동합니다.
실습
print(MathOperations.add(10, 5)) # 출력: 15
print(MathOperations.subtract(10, 5)) # 출력: 5
- 목표: 클래스 메서드와 정적 메서드의 차이를 이해하고, 각각의 사용 사례를 학습합니다.
5. 실습 예제: 은행 계좌 클래스 구현하기
이번 실습에서는 지금까지 배운 내용을 종합하여 실제로 유용하게 사용할 수 있는 은행 계좌(BankAccount) 클래스를 만들어 보겠습니다.
예제 5: 은행 계좌 클래스
class BankAccount:
"""은행 계좌를 나타내는 클래스"""
def __init__(self, owner, balance=0):
self.owner = owner
self.balance = balance
def deposit(self, amount):
self.balance += amount
print(f"{amount}원이 입금되었습니다. 잔액: {self.balance}원")
def withdraw(self, amount):
if amount <= self.balance:
self.balance -= amount
print(f"{amount}원이 출금되었습니다. 잔액: {self.balance}원")
else:
print("잔액이 부족합니다.")
def check_balance(self):
print(f"현재 잔액: {self.balance}원")
실습
my_account = BankAccount("철수")
my_account.deposit(5000) # 출력: 5000원이 입금되었습니다. 잔액: 5000원
my_account.withdraw(2000) # 출력: 2000원이 출금되었습니다. 잔액: 3000원
my_account.check_balance() # 출력: 현재 잔액: 3000원
- 목표: 여러 메서드를 결합하여 실제 애플리케이션처럼 작동하는 클래스를 작성하고, 객체가 가진 상태를 조작하고 확인하는 연습을 합니다.
요약
Python에서 클래스를 사용하면 코드의 재사용성과 유지보수성을 크게 높일 수 있습니다. 이번 실습을 통해 클래스 정의, 객체 생성, 상속, 클래스 메서드와 정적 메서드 사용법을 익혔습니다. 이러한 기본기를 바탕으로 더 복잡한 객체지향 프로그래밍 개념을 확장해 나가길 바랍니다.
디스크립션: "Python의 클래스 개념을 초보자를 위해 실습 예제와 함께 학습해 보세요. 객체 생성부터 상속, 클래스 메서드까지 다양한 예제를 통해 쉽게 이해할 수 있습니다."