객체지향 프로그래밍(OOP)의 탄생배경
-
초기의 프로그래밍 방식은 순차적/절차적 프로그래밍

- 순차적 프로그래밍 (sequential programming)
- 명시된 입력 → 명시된 순서 → 순차적으로 결과
- 한줄이 단위
- 절차적 프로그래밍 (procedural programming)
- 프로그램을 여러 함수들의 단계적 호출로 구성
- 큰 문제를 작은 문제로 나누어 접근 (top-down)
- 함수가 기본단위
-
절차적 프로그래밍(PP)의 문제점
- 데이터의 처리방법만 구조화 , 데이터 자체 구조화 X
- 데이터와 함수를 분리 → 프로그램 관리 어려움
- 프로그램의 규모가 커지면 함수들이 얽힘 → 유지보수 어려움
- 데이터 변경(타입, 의미) → 수정할 함수가 많아짐
- 함수나 호출의 순서가 바뀌면 결과가 변경
객체지향 프로그래밍(OOP)이란 ?

- 프로그램을 여러 객체라는 기본 단위로 나누고 객체 사이의 상호 작용으로 동작하는 것으로 인식하고 기술하는 방식
- 데이터와 함수를 하나의 덩어리로 묶어서 생각
- 작은 문제들을 해결하는 객체 조합 ⇒ 큰 문제 해결 (bottom-up)
- 독립성/신뢰성이 높게 만듬 → 수정없이 재사용 가능 : 생산성 향상
절차적 vs 객체지향
-
구조적 차이

- PP : 함수가 계층적인 구조
- OOP : 클래스의 모임 + 관계
|
절차적 프로그래밍 (PP) |
객체지향 프로그래밍 (OOP) |
접근 방식 |
Top-down |
Bottom-up |
구현 관점 |
전체 기능 고려 → 각 기능 구현 |
객체 설계 → 객체 상호 작용 설계 |
구성 요소 |
함수 |
객체 |
장점 |
오버헤드를 줄여 빠르게 동작 |
코드의 중복을 줄이고 재활용성이 높음 |
구조 파악 및 디버깅이 쉬움 |
|
|
단점 |
구조가 복잡, 코드 중복, 순서를 지켜야 해서 재활용성이 떨어짐 |
설계에 많은 시간이 요구됨 |
객체가 많아지면 오버헤드 발생 |
|
|
용도 |
한정된 자원/특수 목적 (보안 ,속도) |
대규모 협업 프로젝트(생산성 중시) |
프로그래밍 방식의 차이이지 서로 반대 개념이 아니
각각의 장단점를 인식하고 상황에 맞는 방법을 사용 (우월한것 X)
객체(Object)
사전적 의미 : 실세계에 존재하거나 생각할 수 있는 대상
프로그래밍 관점 : 어떠한 상태 값과 행위를 가지고 있는 데이터

$$
\downarrow
$$
