절차지향 프로그래밍은 프로그램을 순차적인 절차나 단계로 분해하고, 각 단계를 함수 또는 프로시저로 구현하여 문제를 해결하는 패러다임입니다. 이러한 함수들은 데이터를 중심으로 동작하며, 데이터와 동작이 분리되는 특징이 있습니다. C, Pascal, Fortran 등이 절차지향 프로그래밍의 대표적인 언어입니다.
객체지향 프로그래밍은 현실 세계의 사물을 객체(Object)로 보고, 이러한 객체들 간의 상호작용으로 문제를 해결하는 패러다임입니다. 객체는 데이터와 그 데이터를 처리하는 메서드(함수)를 함께 묶어서 캡슐화합니다. 또한, 상속과 다형성 등의 개념을 통해 코드의 재사용성과 확장성을 강조합니다. Java, Python, C++ 등이 객체지향 프로그래밍의 대표적인 언어입니다.
함수형 프로그래밍은 함수를 기본 구성 요소로 사용하여 문제를 해결하는 패러다임입니다. 함수형 프로그래밍에서는 함수들이 상태를 변경하지 않고 입력을 받아서 출력을 반환하는 순수 함수(pure function)를 중심으로 프로그래밍됩니다. 이러한 순수 함수들의 조합으로 프로그램을 작성하며, 부작용을 최소화하여 코드를 더 예측 가능하고 유지보수하기 쉽게 만듭니다. Haskell, Lisp, JavaScript의 일부 기능 등이 함수형 프로그래밍의 특징을 지닌 언어들입니다.
- 데이터와 동작의 관점:
- 절차지향: 데이터와 동작을 분리하여 생각합니다.
- 객체지향: 데이터와 그 데이터를 처리하는 동작(메서드)을 객체로 묶어서 생각합니다.
- 함수형: 함수를 기본 구성 요소로 생각하고, 데이터와 동작을 순수 함수로 다룹니다.
- 상태 관리:
- 절차지향: 주로 전역 변수를 사용하여 상태를 관리합니다.
- 객체지향: 객체의 속성(멤버 변수)을 통해 상태를 관리합니다.
- 함수형: 상태 변경 없이 입력과 출력 간의 관계를 강조합니다.
- 코드 구성 방식:
- 절차지향: 순차적인 코드 흐름을 중심으로 프로그램을 작성합니다.
- 객체지향: 객체 간의 상호작용을 중심으로 프로그램을 작성합니다.
- 함수형: 순수 함수들의 조합으로 프로그램을 작성하며, 함수 합성을 강조합니다.
- 코드 재사용성과 확장성:
- 절차지향: 함수를 통해 코드를 분리하여 재사용성을 높일 수 있지만, 객체지향과 함 수형에 비해 제한적입니다.
- 객체지향: 상속과 다형성을 통해 코드를 재사용하고 확장할 수 있습니다.
- 함수형: 순수 함수들을 조합하는 방식으로 코드를 재사용하고 확장합니다.