- 절차적 프로그래밍이란 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다.
- 절차적 프로그래밍은 '데이터를 중심으로 함수'를 만든다.
- 대표적인 절차적 언어에는 C언어 가 있다.
- 객체지향 프로그래밍이란 실제 세계를 모델링하여 소프트웨어를 개발하는 방법이다.
- 객체지향에서는 데이터와 메소드를 하나의 덩어리로 묶어서 생각한다.
- 대표적인 객체지향 언어에는 Java, Python 등이 있다.
대표적으로 아래의 기준을 바탕으로 객체지향 언어와 절차적 언어를 구분한다.
- 캡슐화, 다형성, 상속, 추상화를 지원하는가?
- 데이터 접근 제한을 걸 수 있는가?
보통 위 기준을 만족하면 객체지향, 만족하지 않으면 절차적 성격이 강해진다.
절차적 프로그래밍과 같은 경우 말 그대로 절차적으로 코드를 구성한다. 쉽게 말하면 '흐름도(순서도)'로 코드를 구성한다.
절차적 프로그래밍과 다르게 객체지향 프로그래밍은 고객이 할 수 있는 행위와 데이터들을 하나로 묶어 객체를 만들고, 자판기에서 할 수 있는 행위들과 데이터들을 묶어 자판기라는 하나의 객체를 만들어 묶는다.
- 객체나 클래스를 만들 필요 없이 바로 프로그램을 코딩할 수 있다.
- 필요한 기능을 함수로 만들어 두기 때문에 같은 코드를 복사하지 않고 호출하여 사용할 수 있다.
- 프로그램의 흐름을 쉽게 추적할 수 있다.
- 각 코드가 매우 유기성이 높기 때문에 수정하기가 힘들다. (새로운 데이터나 기능을 추가하기가 어려움)
- 프로그램 전체에서 코드를 재사용 할 수가 없어 프로젝트 개발 비용과 시간이 늘어날 수 있다.
- 디버그(오류 검사)가 어렵다.
- 모듈화, 캡슐화로 인해 유지보수에 용이하다.
- 객체지향적이기 때문에 현실 세계와 유사성에 의해 코드를 이해하기 쉽게 만든다.
- 객체는 그 자체가 하나의 프로그램이기 때문에 다른 프로그램에서 재사용이 가능하다.
- 대부분의 객체 지향 프로그램은 속도가 상대적으로 느려지고 많은 양의 메모리를 사용하는 경향이 있다.
- 현실 세계와 유사성에 의해 코드를 이해하기 쉽게 만드는 만큰 설계 과정에 시간이 많이 투자된다.

