객체지향 언어 (OOP) 특징 정리
간단한 정의
객체지향 프로그래밍(OOP, Object-Oriented Programming)은 데이터(속성)와 그 데이터를 처리하는 메서드(동작)를 하나의 단위인 객체로 묶어 소프트웨어를 구조화하는 패러다임입니다. 현실 세계의 개념을 모델링하기에 적합하며, 유지보수성과 재사용성을 높이는 데 유리합니다.
1. 핵심 개념
- 클래스(Class)와 객체(Object)
- 클래스: 속성과 메서드를 정의한 설계도
- 객체: 클래스의 인스턴스(실제 데이터와 동작을 가진 실체)
- 캡슐화(Encapsulation)
- 데이터와 내부 구현을 숨기고, 공개된 인터페이스로만 접근하도록 제한
- 접근 제어자(private/protected/public) 사용
- 상속(Inheritance)
- 기존 클래스의 특성(속성, 메서드)을 재사용하고 확장
- 코드 중복 감소, 계층적 설계 가능
- 다형성(Polymorphism)
- 같은 인터페이스/부모 타입으로 서로 다른 객체를 동일하게 다루는 능력
- 오버라이딩(런타임 다형성), 오버로딩(컴파일 타임 다형성)
- 추상화(Abstraction)
- 핵심적인 특징과 행동만 모델링하여 복잡도 감소
- 인터페이스나 추상 클래스로 구현
2. 관련/추가 개념
- 메시지 전달 / 메서드 호출: 객체 간 상호작용의 기본 수단
- 동적 바인딩(런타임 바인딩): 호출 시점에 실제 객체 타입에 맞는 메서드가 결정
- 인터페이스 및 추상 클래스: 계약(메서드 시그니처)을 통해 일관성 제공
- 생성자/소멸자: 객체의 초기화와 자원 정리
- 조합(Composition) vs 상속(Inheritance)
- "상속 대신 조합" 권장: 유연성과 변경에 대한 안정성 측면에서 조합 선호
- 디자인 패턴: OOP 설계에서 반복되는 문제에 대한 검증된 해법(팩토리, 싱글턴, 전략 등)
3. 장점
- 현실 세계 모델링이 자연스러움
- 코드 재사용성 및 유지보수성 향상
- 모듈화로 팀 분업 및 대규모 시스템 관리에 유리
- 인터페이스 기반 설계로 확장성 확보
4. 단점 / 한계
- 지나친 상속 구조는 복잡도 증가 및 유지보수 악화 초래
- 오브젝트 오버헤드로 성능/메모리 비용 발생 가능
- 설계가 부실하면 코드가 비효율적이고 읽기 어려워짐
- 모든 문제에 최적의 패러다임은 아님(함수형 등 대안 존재)
5. 설계 원칙(간단 정리)
- SOLID 원칙 (요약)
- S: 단일 책임 원칙 (Single Responsibility)
- O: 개방-폐쇄 원칙 (Open/Closed)
- L: 리스코프 치환 원칙 (Liskov Substitution)
- I: 인터페이스 분리 원칙 (Interface Segregation)
- D: 의존성 역전 원칙 (Dependency Inversion)
- 테스트 가능하고 변경에 강한 구조를 목표로 설계
6. 간단 예제
Java (클래스, 상속, 다형성)
class Animal {
public void speak() { System.out.println("..."); }
}
class Dog extends Animal {
@Override
public void speak() { System.out.println("멍멍"); }
}
public class Main {
public static void main(String[] args) {
Animal a = new Dog(); // 다형성
a.speak(); // 출력: 멍멍
}
}
Python (캡슐화(관습), 인터페이스 역할)
class Animal:
def speak(self):
raise NotImplementedError
class Dog(Animal):
def speak(self):
return "멍멍"
def make_sound(animal: Animal):
print(animal.speak())
make_sound(Dog()) # 출력: 멍멍
7. 실무에서의 팁
- 상속은 IS-A 관계에만 사용(강한 의미의 "이다")
- 코드 재사용이 목적이라면 우선 조합(composition)을 고려
- 인터페이스나 추상화를 통해 의존성을 줄이고 테스트 용이성 확보
- 설계 원칙(SOLID)을 염두에 두고 작은 단위로 리팩터링
8. 추가로 참고할 주제
- 디자인 패턴(GoF 패턴)
- 객체지향 설계의 안티패턴
- 병렬/동시성 환경에서의 객체 설계
- 함수형 프로그래밍과의 혼용(예: 불변성, 순수 함수)
원하시면 위 내용을 기반으로
- 특정 언어(Java, Python, C++, C# 등) 예제 확장,
- SOLID 원칙별 실전 예시,
- 자주 쓰이는 디자인 패턴 정리
중 어느 것을 먼저 만들어드릴지 알려주세요.
'STUDY' 카테고리의 다른 글
| 타입스크립트 (0) | 2025.11.10 |
|---|---|
| C 언어 핵심 개념 요약 + 예시 (0) | 2025.11.10 |
| c언어 개념 정리 (0) | 2025.11.06 |
| 변수와 상수 (0) | 2025.11.05 |
| 블로그 포스팅하면서 (0) | 2025.10.15 |