OOP는 Object Oriented Programming의 약자로서 객체지향 프로그래밍이라고 불린다.
객체지향 프로그래밍은 객체를 기본 컨셉으로한 프로그래밍의 패러다임을 의미하는데 패러다임은 코드의 스타일을 뜻한다. 그리고 자바스크립트에서는 객체지향 프로그래밍이 조금 다르게 작동하는데 프로토타입으로 작동한다. 자바스크립트에는 프로토타입이 있고 모든 객체는 프로토타입 객체와 연결되어 있다. 즉, 모든 객체에는 프로토타입 객체가 존재한다.
이 방식을 프로토타입 상속이라 부르며 프로토타입이 해당 프로토타입과 연결된 모든 객체들의 메소드들을 포함하고 있고 접근이 가능하다. 그리고 프로토타입의 상속은 일반적인 객체지향 프로그래밍과 다른데 프로토타입 상속은 클래스로부터 인스턴스를 상속 받는다.
캡슐화는 객체의 내부 로직을 감추고 외부에는 안정적인 부분만 공개한다. 외부에 영향을 주지 않고 객체 내부의 구현을 변경할 수 있다.
추상화는 Class의 공통점을 찾아서 한번에 묶고 복잡한 디테일을 숨긴 뒤 핵심만 추출해 나간다.
상속은 프로토타입을 기반으로해서 부모 클래스한테 하위 클래스들은 상속을 받을 수 있다.
상위 클래스의 모든것을 하위 클래스가 이어 받으며 부모클래스의 특징을 자식클래스에게 모두 물려준다.
같은 이름을 가진 메소드여도 하위 클래스의 상황에 맞게 다르게 구현 할 수 있다.
하나의 변수명, 함수명등이 상황에 따라 다른 의미로 해설 될 수 있다.
FP는 Functional Programming의 약자로서 함수형 프로그래밍이라고 부른다.
함수형 프로그래밍은 함수 사용을 강조하는 소프트웨어 개발 스타일이며 애플리케이션의 부수효과를 방지하고 상태 변이를 감소 시키기 위해 데이터의 제어 흐름과 연산을 추상하는 것이 핵심이다. 여러개의 작은 함수를 엮어 하나의 큰 함수를 구현하고 불변성을 지킨다.
컴퓨터 프로그래밍 언어에서 일반적으로 다른 객체들에 적용 가능한 연산을 모두 지원하는 객체를 가르킨다.
함수의 파라미터로 함수를 전달할 수 있고 함수의 반환값으로 함수를 사용할 수 있다는 1급 객체의 특징을 가진 함수다.
고차함수의 예를들면 map, filter, reduce가 있다.
값이 변경되지 않는다.
즉, 데이터 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 그 데이터를 복사해 복사본을 만들어 일부만 변경하고, 변경한 복사본을 사용해 작업을 진행한다.
참고한 사이트 :
https://serzhul.io/JavaScript/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/
https://j-su2.tistory.com/m/35
https://yesdoing.dev/functional%20programming/fp-javascript---1%EC%9E%A5-%EC%A0%95%EB%A6%AC/