객체의 내부 로직을 감추고 외부에는 상대적으로 안정적인 부분만을 공개함으로써 데이터를 안전하게 보존하는 기법이다. 즉, 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체
로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다. 객체지향 프로그래밍을 사용하면 코드 재사용이 쉬우며, 유지보수가 간편하고 직관적인 코드 분석이 가능한 장점이 있다.
아우디와 벤츠는 모두 ‘자동차’에 해당됩니다.
따라서, 자동차라는 추상화 집합이 존재하며, 자동차들이 가진 공통적인 특징들을 하나의 집합으로 만들어 놓은 것입니다.
캡슐화란 하나의 객체에 대해 그 객체가 특정한 목적을 위한 필요한 변수나 메소드를 하나로 묶는 것을 의미합니다.
오버라이딩(Overriding)
오버로딩(Overloading)
side effect가 없는 pure function을 구현함으로써 프로그램을 디자인한다. 여러개의 작은 function을 엮으며 하나의 큰 function을 구현하고 불변성을 지키게 된다.
side effect : 부작용
pure function : 순수 함수
장점
높은 수준의 추상화를 제공한다.
함수 단위의 코드 재사용이 증가한다.
디버깅이 쉽다.
불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉽다.
대표적인 언어
Clojure, Swift, Haskell, Scala
특징
변수나 데이터 구조안에 담을 수 있다.
파라미터로 전달 할 수 있다.
반환값으로 사용할 수 있다.
할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
동적으로 프로퍼티 할당이 가능하다.
고차 함수 (Higher Order Function)
함수형 프로그래밍에서는 여러 작은 순수 함수들을 연쇄적 혹은 병렬적으로 호출해서 더 큰 함수를 만들어나간다. 함수를 엮기위해서 HOC(고차 컴포넌트)를 활용해야 한다.
함수의 파라미터로 함수를 전달할 수 있다.
함수의 반환값으로 함수를 사용할 수 있다.
불변성
데이터 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 그 데이터를 복사본을 만들어 그 일부를 변경하고, 변경한 복사본을 사용해 작업을 진행한다.
순수함수
동일한 인풋에는 항상 같은 값의 아웃풋을 반환해야 한다.
사이드 이펙트가 없어야한다.