📌 OOP란 무엇인가?
OOP(Object-Oriented Programming, 객체지향 프로그래밍)는 현실 세계의 사물을 프로그래밍에 반영하는 방식입니다.
객체지향의 핵심은 “데이터와 기능을 하나로 묶고, 서로 메시지를 주고받도록 하는 구조”입니다.
프로시저 방식(절차지향)에서는 데이터와 함수가 분리되어 있었지만, OOP에서는 이를 하나의 ‘객체’로 묶어서 표현합니다.
🏗️ 객체(Object)란 무엇인가?
객체는 속성(데이터)과 메서드(기능)를 가진 독립적인 단위입니다.
예를 들어, “자동차”라는 객체를 생각해보면:
- 속성: 색상, 연료량, 모델명
- 메서드: 시동걸기(), 운전하기(), 멈추기()
자동차는 이런 정보와 기능을 포함한 하나의 덩어리로 이해할 수 있습니다. 이처럼 OOP는 현실을 추상화해서 코드로 모델링하는 방식입니다.
📚 OOP의 4대 핵심 원칙
- 캡슐화 (Encapsulation)
- 상속 (Inheritance)
- 다형성 (Polymorphism)
- 추상화 (Abstraction)
1️⃣ 캡슐화 – 객체 내부는 숨기고, 인터페이스만 노출
객체의 내부 상태(데이터)는 외부에서 직접 접근하지 못하도록 숨기고, 메서드를 통해서만 접근하게 만드는 원칙입니다.
class BankAccount:
def __init__(self):
self.__balance = 0 # private 변수
def deposit(self, amount):
self.__balance += amount
def get_balance(self):
return self.__balance
__balance
는 외부에서 직접 접근할 수 없고, deposit()
과 get_balance()
를 통해서만 조작 가능합니다.
2️⃣ 상속 – 코드 재사용을 위한 구조
상속은 기존 클래스의 속성과 기능을 새로운 클래스가 물려받아 확장할 수 있게 합니다.
class Animal:
def speak(self):
print("동물이 소리를 냅니다.")
class Dog(Animal):
def speak(self):
print("멍멍!")
Dog
는 Animal
의 속성을 상속받고, 필요 시 기능을 오버라이드(재정의)할 수 있습니다.
3️⃣ 다형성 – 같은 이름, 다른 동작
다형성은 동일한 메서드 이름이 상황에 따라 다른 동작을 하도록 만드는 원리입니다.
def animal_speak(animal):
animal.speak()
animal_speak(Dog())
animal_speak(Animal())
같은 speak()
메서드라도 어떤 객체냐에 따라 동작이 달라집니다. 이는 유연하고 확장성 높은 코드를 가능하게 합니다.
4️⃣ 추상화 – 필요한 기능만 보여주기
객체는 내부의 복잡한 동작은 숨기고, 외부에 필요한 기능만 보여줍니다. 사용자는 내부 구현을 몰라도 메서드만 알면 사용할 수 있습니다.
예: 전기밥솥의 버튼은 누르기만 하면 되지, 내부 회로는 몰라도 됩니다.
🧠 OOP가 왜 중요한가?
- 유지보수가 쉬움 – 기능이 객체 단위로 분리되어 수정이 쉬움
- 재사용성 향상 – 상속과 모듈화를 통한 코드 재활용
- 확장성 – 새로운 기능을 덧붙이기 쉽고 유연함
- 협업에 유리 – 객체별 역할이 명확하여 분업 가능
📌 절차지향 vs 객체지향 간단 비교
구분 | 절차지향 | 객체지향 |
---|---|---|
중심 | 함수, 순차적 흐름 | 객체, 메시지 전달 |
유지보수 | 복잡, 중복 발생 | 용이, 재사용 가능 |
확장성 | 낮음 | 높음 |
🚀 언제부터 OOP를 적용할까?
처음부터 너무 복잡하게 객체지향 설계를 고민할 필요는 없습니다. 하지만 프로젝트가 커지기 시작하면 반드시 필요해집니다.
따라서 기초 프로젝트에서는 절차지향으로 시작하고, 이후 점차 객체로 구조화해가는 습관을 들이면 자연스럽게 익혀집니다.
🎯 마무리 – 객체지향은 개발자의 사고방식이다
OOP는 단순한 문법이나 규칙이 아닙니다. 코드를 분리하고 설계하는 사고 방식입니다.
객체지향을 익히면 더 이상 "코드 짜기"가 아니라 "시스템을 설계하는 일"을 하게 됩니다.
오늘부터 객체를 중심으로 생각해보세요. 더 나은 코드, 더 나은 개발자로 나아가는 첫걸음이 될 것입니다.