Learning
토픽 135 / 192·프로그래밍 패러다임

객체지향 프로그래밍 (Object-Oriented Programming)

객체지향 프로그래밍 (Object-Oriented Programming)

데이터와 해당 데이터를 처리하는 메서드를 하나의 객체(Object)로 묶어 프로그램을 구성하는 패러다임으로, 현실 세계의 사물을 모델링하여 소프트웨어를 설계

목적: 코드 재사용, 유지보수 용이, 확장성, 복잡성 관리, 모듈화

4대 특성

  • 캡슐화(Encapsulation): 데이터+메서드 묶기, 정보 은닉(private/protected/public), 인터페이스만 노출
  • 상속(Inheritance): 부모 클래스 속성·메서드 물려받기, 코드 재사용, is-a 관계, 오버라이딩
  • 다형성(Polymorphism): 같은 인터페이스 다른 구현, 오버로딩(컴파일타임)/오버라이딩(런타임), 서브타입 다형성
  • 추상화(Abstraction): 본질적 특성만 추출, 복잡성 숨김, 추상 클래스/인터페이스

핵심 개념

  • 클래스(Class): 객체의 설계도, 속성+메서드 정의
  • 객체(Object): 클래스의 인스턴스, 상태+행위
  • 인터페이스(Interface): 메서드 시그니처만 정의, 다중 구현 가능
  • 컴포지션(Composition): 객체 조합, has-a 관계, 상속보다 유연("Composition over Inheritance")

설계 원칙: SOLID(SRP/OCP/LSP/ISP/DIP), DRY(반복 금지), KISS(단순하게), YAGNI(필요할 때만)

단점: 과도한 추상화, 상속 깊이 문제(깊은 계층), 객체 생성 오버헤드, 간단한 문제에 비효율

비교: OOP(객체/상태변화/Java) vs FP(함수/불변/Haskell) vs 절차적(순차/단순/C)

적용사례: 대규모 엔터프라이즈 시스템, GUI 프레임워크, 게임 엔진, 디자인 패턴

연관: SOLID, 디자인 패턴, UML, 클린 아키텍처, DDD