프로그래밍 패러다임
프로그래밍 패러다임은 어떤 방식으로 프로그래밍 할 것인가에 대한 방식과 기법 중 하나이다.
절차지향프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍, 함수형 반응형 프로그래밍 등이 있다.
함수형 프로그래밍
함수형 프로그래밍 (函數型 프로그래밍, 영어: functional programming)은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.
-위키백과
사람의 사고방식과 비슷한 객체지향, 절차지향 프로그래밍과 다르게, 함수형 프로그래밍은 대량의 데이터를 병렬적으로 안정적으로 처리할 수 있도록 수학적 함수처럼 프로그램을 구현한다. 마치 파이프라인처럼 인풋을 넣으면 처리과정을 거쳐 아웃풋이 나오게 되며, 외부에서는 함수 내부에 접근할 수 없고, 함수 내부에서도 외부에 접근할 수 없다.
함수형 프로그래밍의 특징
순수함수 (Pure Functions)
같은 인자가 입력될 때 같은 결과값을 리턴하는 함수이다.
외부의 상태값이나 변수를 변경하지 않고, 외부의 상태를 참조하지 않는다.
언제 선언이 되었든지 외부에 전혀 영향을 받지 않는다.
const add = (a:number, b:number) => {
return a+b
}
const result = add(2,3)
비상태(Stateless), 불변성(Immutability)
전달된 인자의 데이터를 변경하지 않고 새로운 객체를 만들어 리턴해야 한다.
외부의 상태가 변경되거나 예상하지 못한 에러가 발생하는 등의 사이드 이펙트(side effect)가 발생하지 않기 때문에 동시다발적 멀티스레딩 환경에서도 안정성을 유지할 수 있다.
자바스크립트에서는 불변성의 데이터타입이 따로 없으므로 object.freeze() 함수를 이용하여 Object를 불변성으로 만들어줄 수 있다.
const object = {c:1, d:'d'}
const update = (object) => {
return {...object, c:c+1}
}
//Object.freeze()
const object = Object.freeze({c:1, d:'d'})
const update = (object) => {
return Object.freeze({...object, c:c+1})
}
문장이 아닌 표현식만!
if, switch, for 문 등의 statement를 사용하지 않는다.
let numbers = [1,2,3];
const notFuctional = () => {
for(let number of numbers){
number = number * 2;
}
}
const functional = () => {
return numbers.map(number => number * 2);
}
일급객체(First-class)와 고차함수(higher-order functions)
일급객체
다른 객체들이 일반적으로 적용 가능한 연산을 모두 지원하는 객체로, 함수 자체가 객체가 된다.
- 모든 요소는 함수의 실제 매개변수가 될 수 있다.
- 모든 요소는 함수의 반환 값이 될 수 있다.
- 모든 요소는 할당 명령문의 대상이 될 수 있다.
- 모든 요소는 동일 비교의 대상이 될 수 있다.
고차함수
하나 이상의 함수 자체를 인수로 전달하거나 또 다른 함수를 리턴 하는 함수이다.
//일급객체
const increase = (a:number) => a + 1;
const multiple = (a:number) => a * 2;
const tramsform = numbers => numbers.map(increase).map(multiple);
console.log(transform([1,2,3,4]);
//고차함수
const addText = (text1:string) => (text2:string) => text1 + text2;
const beautiful = addText('beutiful');
console.log(beautiful('korea')); //koreabeautiful
객체지향 프로그래밍(Obejct-Oriented Programming)
객체지향 프로그래밍은 상태를 저장하는 필드와 그 필드들을 이용해 기능을 제공하는 메소드를 만들고 클래스를 만들지만 함수형프로그래밍은 몇몇 자료구조(list, map, set) 등을 이용해 최적화된 동작을 만들어낸다.
'주말에 쓰는 개발일기 > javascript' 카테고리의 다른 글
[Javascript] 이벤트 버블링과 이벤트 캡쳐링 (0) | 2022.04.28 |
---|---|
오류 : Uncaught TypeError: window.showModalDialog is not a function (0) | 2021.12.01 |
크롬에서 opener의 함수호출 오류 (개발자도구를 켜야 작동할 경우) (0) | 2021.11.16 |
chrome 80 samesite 정책 (크롬 / 엣지 결제모듈 인증모듈 사용 후 세션 유실) (1) | 2021.01.08 |
ArrayList 함수 clear() UnsupportedOperationException 에러. (0) | 2021.01.08 |