OOP
Object Oriented Programming의 약자로 class와 object에 기반한 프로그래밍 패러다임(디자인 패턴)이다.
OOP는 관련된 데이터끼리 묶어 class를 형성하고 그 안에서 object instance를 만듬으로써 프로그램을 디자인 해준다.
캡술화는 객체의 내부 로직은 감추고 외부에는 상대적으로 안정적인 부분만을 공개함으로써 데이터를 안전하게 보존하는 기법이다. 캡슐화는 외부에 영향을 주지 않고 객체 내부의 구현을 변경할 수 있기 때문에 내부 로직에 대한 유연함을 제공한다.
추상화는 공통점을 찾아 Class로 한번에 묶고 복잡한 디테일을 숨기고 핵심만 추출해나가는 형태이다. 구현 세부사항 대시 큰 범위의 공통된 기능 측면에서 클래스를 개발하는 것이다.
예를 들어, 결제 페이 기능을 구현한다고 할때, 네이버 페이, 카카오 페이등은 모두 작동하는 방식은 달라도 결제를 한다는 공통된 기능을 가지고 있다.
이때 "공통된 기능"을 하나로 묶는 방법이라고 할 수 있다.
(공통된 클래스로부터 상속)
다시 말해, 실제로 존재하는 객체들을 프로그램으로 만들기 위해 공통적인 특성을 파악해 필요없는 특성들을 제거해나가는 작업을 말한다.
상속은 프로토타입을 기반으로 부모 클래스부터 하위 클래스는 상속을 받을 수 있다.
상위 클래스의 모든 것을 하위 클래스가 모두 이어받는 것이다. 즉, 부모가 자식에게 유전자를 물려주듯 부모의 특징을 자식에게 모두 물려주는 행위이다.
같은 이름을 가진 메소드라도 하위클래스의 상황에 맞게 다르게 구현될 수 있게 하는 것을 말한다. 즉, 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있다.
상위 클래스의 메서드와 같은 이름, 매개변수를 재정의 하는 것이다.
상위클래스에서 만들어진 메서드는 하위 클래스의 상황에 따라
다시 재창조해 사용하는 것을 말한다.
Runtime에 이루어진다.
같은 이름의 함수를 여러개 정의하고, 파라미터의 타입과 개수를 다르게 해서 파라미터에 따라 다르게 호출할 수 있게 하는 것을 말한다.
메서드끼리 이름은 가지만 매개변수의 갯수나 데이터 타입이 다르면 오버로딩이 적용돼서 메서드 이름이 같아도 문법 에러가 나지 않는다.
Compile time(컴파일 타임)에 이루어진다.
객체가 처리하려는 것에 대한 정확한 이해가 필요해
설계 단계부터는 많은 시간이 소모될 우려가 있다.
객체지향언어는 대체적으로 실행속도가 느린 편이다.
다중 상속이 지원되는 C++ 같은 경우에 너무 복잡해져
코딩의 난이도가 상승할 수 있다.
Funtional Programming
FP(Functional Programming)은 Side effect(부작용)이 없는 Pure function(순수 함수)를 구현함으로써 프로그램을 디자인 한다. 여러개의 작은 function을 엮어 하나의 큰 function을 구현하고 불변성을 지키게 된다.
함수형 프로그래밍에서는 여러 작은 순수 함수들을 연쇄적 혹은 병렬적으로 호출해 더 큰 함수를 만들어 간다. 함수를 엮기 위해 HOC(고차 컴포넌트)를 잘 활용해야 한다.
데이터 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고도 그 데이터를 복사본을 만들어 그 일부만 변경하고, 변경한 복사본을 사용해 작업을 진행한다.