컴퓨터 사이언스/소프트웨어 아키텍처

[OOP] 객체 지향 프로그래밍이란 무엇인가?

Dachaes 2025. 4. 28. 15:53
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
반응형