Object Oriented Programming의 약자이며 객체 지향 프로그래밍이라고 부른다.
객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
객체지향 프로그래밍은 보다 유연하고 유지보수하기 쉬우며 확장성 측면에서서도 유리한 프로그래밍을 하도록 의도되었다고 볼 수 있다.
이를 위해 캡슐화(Encapsulation), 정보은닉(Information Hiding), 추상화(Abstraction), 상속성(Inheritance) 등의 특징들을 가지고 있다.
장점
1. 코드 재사용이 용이하다.
한 번 작성된 코드를 활용하여 동일한 객체를 만들 수 있다. 즉, 모듈화시켜서 개발할 수 있다.
단점
1. 개발속도가 느리다.
생성하고자 하는 객체를 정확한 이해하고 넓게 생각해야하기에 설계단계부터 많은 시간이 소모 된다.
함수형 프로그래밍은 순수 함수(pure function)를 조합하고 공유 상태(shared state), 변경 가능한 데이터(mutable data) 및 부작용(side-effects)을 피하여 프로그래밍하는 패러다임이다.
연계성을 생각하기보다는 함수를 이용해서 사이드 이펙트 없도록 선언형 프로그래밍을 하는 것이 함수형 프로그래밍인 것이다.
함수형 프로그래밍 역시 순수 함수(Pure Function), 불변성(Immutable), 참조 투명성(Referential Transparency), 게으른 평가(Lazy Evaluation)등의 특징이 있다.
장점
1. 사이드 이펙트가 없다.
순수함수의 조합으로 이루어지기 때문에 결과값은 변하지 않는다.
단점
1. 상태(State)가 없다.
함수형 프로그래밍은 상태(State)를 배제하여 Side Effect가 없게 동작한다(연계성이 없다는 소리). 그러나 프론트에서 상호작용(Interaction)은 대부분 상태 변화로 모델링된다.