728x90
반응형
객체 지향 프로그래밍(OOP)
객체 지향 프로그래밍(Object-Oriented Programming, OOP) 은 소프트웨어를 '객체(Object)' 단위로 구성하여 개발하는 방법론입니다. 각 객체는 데이터를 포함하고 있으며, 데이터를 처리하는 함수(메서드)와 함께 캡슐화되어 있습니다.
OOP의 핵심 아이디어는 "현실 세계를 소프트웨어에 모델링한다"는 것입니다. 즉, 사람, 자동차, 주문서처럼 우리가 인식할 수 있는 개체들을 프로그램 내 객체로 만들어, 서로 상호작용하도록 설계합니다.
1. 객체 지향의 개념
객체 지향은 복잡한 문제를 작은 단위(객체)로 나누어 이해하고 해결하기 쉽게 만들어줍니다.
- 클래스 : 객체를 만들기 위한 설계도입니다. 속성(변수)과 동작(메서드)을 정의합니다.
- 객체 : 클래스를 기반으로 생성된 실체입니다. 각각 독립적인 상태를 가집니다.
장점
- 코드 재사용성 증가 : 상속과 클래스 기반 설계 덕분에 중복 코드가 줄어듭니다.
- 유지보수 용이 : 모듈 단위로 관리가 가능하여, 수정이 쉬워집니다.
- 확장성 높음 : 새로운 기능 추가 시 기존 코드에 최소한의 영향을 줍니다.
- 현실 세계 모델링이 자연스러움 : 복잡한 문제를 객체로 나눠 설계하면 이해하기 쉬워집니다.
단점
- 초기 설계 복잡성 : 처음부터 잘 설계하지 않으면, 오히려 구조가 복잡해질 수 있습니다.
- 성능 오버헤드 가능성 : 객체 간 메시지 전달, 상속 관계 관리로 인해 절차적 프로그래밍보다 느릴 수 있습니다.
- 남용 시 문제 발생 : 필요 없는 상속이나 과도한 캡슐화는 개발을 어렵게 만들 수 있습니다.
2. 객체 지향 장단점
a. 캡슐화(Encapsulation)
- 데이터를 외부로부터 보호하고, 접근을 제한합니다.
- 객체 내부 구현을 숨기고, 필요한 기능만 외부에 노출합니다.
b. 상속(Inheritance)
- 기존 클래스를 확장하여 새로운 클래스를 만들 수 있습니다.
- 코드 재사용성과 확장성이 좋아집니다.
c. 다형성(Polymorphism)
- 같은 인터페이스를 공유하지만, 서로 다른 방식으로 동작할 수 있습니다.
- "하나의 인터페이스, 다양한 구현"을 의미합니다.
d. 추상화(Abstraction)
- 불필요한 세부사항은 숨기고, 필요한 정보만 공개합니다.
- 복잡성을 줄이고 핵심에 집중할 수 있게 합니다.
3. 예시 코드 (Python)
간단한 객체 지향 예시를 살펴봅시다.
# 클래스 정의
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
# 상속
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"
# 객체 생성
dog = Dog("Buddy")
cat = Cat("Kitty")
print(dog.speak()) # Buddy says Woof!
print(cat.speak()) # Kitty says Meow!
- Animal 은 부모 클래스
- Dog 와 Cat 은 Animal 을 상속받아 다형성을 이용해 speak 메서드를 다르게 구현했습니다.
4. 마무리
객체 지향 프로그래밍은 소프트웨어를 현실 세계처럼 모델링하여 이해하기 쉽고 유지보수 가능한 코드를 작성할 수 있게 해줍니다. 하지만 구조를 잘못 설계하면 오히려 복잡성을 키울 수 있으므로, 올바른 개념 이해와 신중한 설계가 중요합니다.
728x90
반응형
'컴퓨터 사이언스 > 소프트웨어 아키텍처' 카테고리의 다른 글
[디자인 패턴] 좋은 소프트웨어 설계는 이렇게 시작된다. (0) | 2025.04.28 |
---|---|
[파이프-필터 아키텍처] 데이터 흐름을 분리하고 모듈화하는 방법 (0) | 2025.04.28 |
[SPA] 하나의 HTML로 모든 페이지를 만든다? (0) | 2025.04.19 |
[SSG와 ISR] 정적 사이트도 이제 유연하게 바뀐다. (0) | 2025.04.16 |
[데이터 정렬] 프론트엔드에서 할까, 백엔드에서 할까? (0) | 2025.04.14 |