객체 지향 핵심 5개 요소
- 추상화(Abstraction):
- 복잡한 시스템을 단순화하여 중요한 부분만을 다루고, 불필요한 세부 사항은 무시하는 과정.
- 예시: 자동차를 운전할 때, 내부 엔진의 작동 원리를 알 필요 없이 운전 방법만 알면 됨.
- 캡슐화(Encapsulation):
- 내부 구현을 숨기고, 필요한 인터페이스만 외부에 제공하여 객체의 상태를 보호하는 방법.
- 예시: 자동차의 내부 메커니즘을 숨기고, 운전자가 조작할 수 있는 페달과 핸들만 제공.
- 상속(Inheritance):
- 부모 클래스의 속성과 메서드를 자식 클래스가 물려받아 재사용하는 방법.
- "is a kind of" 관계를 나타냄.
- 예시: Vehicle 클래스에서 Car 클래스가 상속받아 사용.
- 다형성(Polymorphism):
- 동일한 인터페이스를 통해 서로 다른 구현을 사용할 수 있는 능력.
- 예시: 여러 클래스가 각각 다른 방식으로 output 메서드를 구현하여, 같은 메서드 호출이 각기 다른 동작을 수행.
- 구성(Composition):
- 객체 간의 "has_a" 관계를 나타내며, 객체가 다른 객체를 포함하는 방식.
- 런타임에 동적으로 정의되며, 객체는 인터페이스를 통해서만 접근.
- 예시: Car 클래스가 Engine 객체를 포함하여 사용.
---
절차적 프로그래밍(Procedural Programming) vs. 객체 지향 프로그래밍(Object-Oriented Programming)
프로그램 조직 | 절차(프로시저)로 구성 | 객체로 구성 |
중심 요소 | 함수와 변수 | 객체(데이터 + 메서드) |
초점 | 데이터 구조, 알고리즘, 단계 순서 | 객체와 객체 간의 통신 |
코드 재사용 | 함수 재사용 | 상속 및 구성 |
데이터 접근 | 전역 변수나 매개변수로 데이터 전달 | 캡슐화를 통해 데이터 보호 및 객체 내부에서만 접근 가능 |
설계 방법론 | 구조적 분석 및 설계(SASD) | 객체 지향 분석 및 설계(OOAD) |
예시 | C, FORTRAN | Java, Python, C++ |
절차적 프로그래밍
- 프로그램 조직: 절차와 함수로 구성.
- 초점: 데이터 구조, 알고리즘, 단계 순서.
- 설계 방법론: SASD(Structured Analysis and Structured Design).
- Top-Down Divide and Conquer: 큰 문제를 작은 문제로 나누어 해결.
- 기능적 관점: DFD(Data Flow Diagram)를 사용하여 기능적 관점에서 문제 분석.
객체 지향 프로그래밍
- 프로그램 조직: 객체로 구성.
- 초점: 객체와 객체 간의 통신.
- 설계 방법론: OOAD(Object-Oriented Analysis and Design).
- 객체 지향 분석(OOA): 도메인의 객체와 요구 사항 식별.
- 객체 지향 설계(OOD): 소프트웨어 객체와 이들의 협력 방식 정의.
핵심 비교 요약
항목절차적 프로그래밍객체 지향 프로그래밍
조직 | 함수 | 객체 |
초점 | 알고리즘과 데이터 구조 | 객체와 통신 |
설계 방법론 | 구조적 분석 및 설계(SASD) | 객체 지향 분석 및 설계(OOAD) |
---