
객체지향 프로그래밍이란?
프로그래밍을 배우다 보면 '객체지향(Object-Oriented Programming, OOP)'이라는 용어를 자주 접하게 됩니다. 객체지향 프로그래밍은 현실 세계를 코드로 모델링하기 위한 개념으로, 사물(객체)의 특징(속성)과 행동(메서드)을 코드로 정의하는 방식입니다. 예를 들어, “자동차”라는 개념을 생각해보겠습니다.
- 속성: 색상, 브랜드, 속도
- 행동: 가속하다, 감속하다, 정지하다
이러한 정보를 하나의 클래스(class)
로 정의하고, 실제 동작하는 자동차를 객체(object)
로 만들어 사용하는 방식이 객체지향입니다. 파이썬은 객체지향 언어로, 클래스와 객체를 쉽게 만들고 활용할 수 있는 기능을 제공합니다. 그럼 이제 클래스와 객체를 파이썬 코드로 어떻게 작성하는지 알아보겠습니다.
클래스와 객체의 사용법
1. 가장 간단한 클래스 만들기
class Person:
def say_hello(self):
print("안녕하세요!")
class
키워드를 사용해 클래스를 정의합니다. say_hello
는 클래스 내부의 함수로, 이런 함수를 메서드(method)라고 부릅니다. 모든 메서드는 첫 번째 인자로 self
를 받아야 하며, 이는 객체 자신을 의미합니다.
2. 클래스에서 객체 생성하기
p1 = Person()
p1.say_hello() # 출력: 안녕하세요!
Person()
은 클래스에서 객체(인스턴스)를 생성하는 문법입니다. 생성된 객체는 p1
변수에 저장되고, 해당 객체의 say_hello()
메서드를 호출할 수 있습니다.
3. 생성자 __init__
메서드로 속성 초기화
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"제 이름은 {self.name}이고, 나이는 {self.age}세입니다.")
p2 = Person("영희", 28)
p2.introduce()
# 출력: 제 이름은 영희이고, 나이는 28세입니다.
__init__
은 객체가 생성될 때 자동으로 호출되는 생성자입니다. 여기서 name
과 age
속성을 설정해주며, 이후 메서드에서 이 속성들을 자유롭게 사용할 수 있습니다.
4. 클래스 속성 vs 인스턴스 속성
class Dog:
species = "포유류" # 클래스 속성
def __init__(self, name):
self.name = name # 인스턴스 속성
dog1 = Dog("초코")
dog2 = Dog("바둑이")
print(dog1.species) # 포유류
print(dog1.name) # 초코
클래스 속성은 모든 인스턴스가 공유하는 값이고, 인스턴스 속성은 객체마다 개별적으로 저장되는 값입니다. species
는 강아지라는 종 전체의 특징이고, name
은 각 강아지 개별의 이름에 해당하죠.
객체지향 활용(메서드, 상속 활용)
1. 메서드를 활용한 동작 구현
class Calculator:
def __init__(self):
self.result = 0
def add(self, num):
self.result += num
return self.result
def reset(self):
self.result = 0
calc = Calculator()
print(calc.add(5)) # 5
print(calc.add(3)) # 8
calc.reset()
print(calc.result) # 0
Calculator
클래스는 상태(result
)를 유지하면서 덧셈을 누적하고 초기화하는 기능을 제공합니다. 메서드를 통해 객체가 “동작”을 수행하게 만드는 구조를 체험할 수 있습니다.
2. 클래스 상속과 오버라이딩
class Animal:
def speak(self):
print("소리를 낸다")
class Cat(Animal):
def speak(self):
print("야옹~")
my_cat = Cat()
my_cat.speak() # 출력: 야옹~
Cat
클래스는 Animal
클래스를 상속받아 기능을 확장하거나 수정할 수 있습니다. 부모 클래스의 speak()
메서드를 자식 클래스에서 재정의(오버라이딩)하여 고양이만의 동작을 만들었습니다.
3. 객체리스트와 반복문 활용
class Student:
def __init__(self, name, grade):
self.name = name
self.grade = grade
students = [
Student("민수", 90),
Student("지연", 85),
Student("현우", 95)
]
for s in students:
print(f"{s.name} 학생의 점수는 {s.grade}점입니다.")
여러 개의 객체를 리스트에 담아 반복문으로 처리할 수 있습니다. 실제 프로그램에서는 이런 구조로 데이터 관리, 검색, 출력 등을 구현하게 됩니다. 그 외 객체지향을 활용 할 수 있는 방법은 다음과 같습니다.
- 학생 관리 시스템: 클래스 활용해 이름, 점수, 출결 기록 관리
- 도서 대출 앱: 책 클래스와 사용자 클래스를 조합해 대출 기능 구현
- 은행 계좌 시뮬레이터: 입금, 출금 메서드와 잔액 속성으로 구조화
- 텍스트 기반 RPG 게임: 캐릭터 클래스, 몬스터 클래스 구현 가능
마무리
객체지향 프로그래밍은 파이썬의 핵심 기능 중 하나로, 프로그램을 더 체계적이고 확장성 있게 만들 수 있는 구조를 제공합니다. 초보자에게는 다소 낯설 수 있지만, 클래스를 직접 만들어보고 객체를 생성하면서 점점 익숙해질 수 있습니다.
클래스와 객체를 이해하면, 실생활에서 반복적으로 사용하는 구조를 코드로 잘 표현할 수 있습니다. 앞으로 더 복잡한 프로젝트를 만들기 위한 튼튼한 기초가 되어줄 것입니다.