프로그래밍 패러다임은 프로그래밍 언어에도 자연스럽게 반영되는데,
C언어는 대표적인 절차지향 언어이며, 자바는 대표적인 객체 지향 언어다.
이 두 패러다임을 모두 수용하기도 하는데,
파이썬이 이런 멀티 패러다임 언어라고 볼 수 있다.
현재 가장 대중적인 프로그래밍 패러다임은 객체 지향 프로그래밍이지만
silver bullet(정답)은 없듯이 무조건 객체지향이 옳다고 볼 수 없다.
절차 지향
데이터와 함수가 분리되어서 각각 동작한다.
프로그램이 수행하는 알고리즘이 명확하고, 기능 확장 등이 자주 일어나지 않는 상황에서 사용하기에 좋다.
(top → down)
객체 지향
객체 지향의 가장 큰 특징은 같은 역할을 하는 객체를 쉽게 바꾸도록 설계할 수 있다.
→ 다형성
어떤 객체에 필요한 객체를 때에 따라 다르게 주입해주는 것을 “의존성 주입”이라고 한다.
데이터, 함수가 하나가 되어서 객체 하나가 하나의 책임을 수행한다.
여러 명의 개발자들이 협력을 해야 하거나, 확장 가능하도록 코드를 설계해야 하는 경우에 적합하다.
함수형 프로그래밍
함수를 입력과 출력으로 쓸 수 있다.
순수함수 : 외부상태를 갖지 않고 항상 동일한 결과를 출력
상태를 가지지 않기 때문에 예측에서 벗어나는 결과(사이드 이펙트)가 없다.
*예측하지 못한 결과 → side effect
하지만 실제로 상태를 가지지 않는 함수를 작성하고 활용하는 코드를 작성하는 것은 어렵다.