데이터와 함수를 분리하여 생각하고, 문제를 해결하기 위해 필요한 기능들을 함수로 구현하고 이들 함수를 조합하여 프로그램을 구현합니다.
C언어나 Pascal 등이 이러한 방식을 따르는 대표적인 언어입니다.
데이터와 함수를 하나의 단위인 객체로 묶어서 생각하며, 객체의 상태를 변경하거나 메시지를 주고받으면서 문제를 해결합니다. Java나 Python, C++ 등이 이러한 방식을 따르는 대표적인 언어입니다.
함수를 일급 객체로 취급하며, 상태 변경을 최소화하여 부작용(Side Effect)을 방지하고, 코드의 재사용성과 가독성을 높입니다. Haskell, Lisp, Erlang 등이 이러한 방식을 따르는 대표적인 언어입니다.
이들 프로그래밍 패러다임의 가장 큰 차이점은 문제를 해결하는 방식에 있습니다.
또한, 객체지향과 함수형은 상속과 다형성 같은 개념에서 차이가 있습니다.
객체지향은 상속을 통해 다형성을 구현하지만, 함수형은 함수의 인자와 반환값의 타입에 의해서 구현합니다.