면접,CS
[면접,CS] 함수형 프로그래밍
Cafe Mocha
2023. 1. 5. 16:19
함수형 프로그래밍
- 코드 작성 스타일
- 선언형 코드
- 결과값을 선언하는 것
- filter 등으로 선언형 코드를 사용할 수 있음.
- ex) CSS
- 명령형 코드
- 결과값에 “어떻게” 도달하느냐에 관한 것
- Javascript 는 명령형 코드
함수형 프로그래밍의 특징
- 순수 함수(Pure Function)
- 함수에서 외부의 상태값을 참조하거나 외부의 상태를 변경하는 것은 순수 함수가 아니다.
- 동일한 인자를 넣었을때 항상 동일한 결과를 리턴해야 한다.
- 비상태, 불변성 (Stateless, Immutability)
- 비상태, 불변성을 유지해야한다.
// 틀린 코드 let person = {name : "mocha",age:28}; function increaseAge(person){ person.age = person.age +1; return person; } // Stateless, Immutablility const person = {name : "mocha",age:28}; function increaseAge(person){ return {...person, age:person.age+1}; } //Javascript는 불변성 데이터 타입이 없기 때문에 Object.freeze를 통해 불변성 유지 가능 const person = Object.freeze({name : "mocha",age:28}); function increaseAge(person){ return Object.freeze({...person, age:person.age+1}); }
- no SideEffect
- 선언형 함수 (Expressions Only)
- no statements like if, switch, for 등등
일급함수
- 일차함수 : 함수를 다른 변수와 동일하게 다루는 언어는 일급 함수를 가졌다고 표현한다.
- 예를 들어, 일급 함수를 가진 언어에서는 함수를 다른 함수에 매개변수로 제공하거나, 함수가 함수를 반환할 수 있으며, 변수에도 할당할 수 있다.
- 일급 객체 : 함수는 일급 객체이다.
- 다음 조건을 만족하는 객체를 일급 객체라고 한다.
- 무명의 리터럴로 생성할 수 있다. (런타임 생성이 가능하다.)
- 변수나 자료구조(배열의 요소나 객체의 속성값)에 할당 할 수 있다.
- 함수를 다른 함수의 인자로 전달될 수 있다.
- 함수를 다른 함수의 결과로서 리턴할 수 있다.
- 다음 조건을 만족하는 객체를 일급 객체라고 한다.
- 함수는 객체의 인스턴스이다
- 함수를 정의할 때 실제로는 객체를 만드는 것이다.
- 함수는 Object.prototype 객체의 프로퍼티를 상속받는다.
- function helloWorld(){ console.log("hello world"); } console.log(typeof helloWorld); // --> function console.log(helloWorld instanceof Object); //-->true
- 자바스크립트 함수는 함수 객체라고 하는 특수한 유형의 객체이다.
고차함수
- 고차함수 : 고차 함수는 함수를 인자로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수
- 고차함수의 예시
- 다른 함수를 인자로 받는 경우
- 함수를 리턴하는 경우
- 함수를 인자로 받고, 함수를 리턴하는 경우
- 고차함수의 예시
- 배열의 내장 고차 함수
- 배열 고차 함수 메서드 : forEach, find, filter, map, reduce, sort, some, every
Reference
[JavaScript] 고차 함수와 콜백(Callback) - 일급 객체란? - 하나몬
❗️함수는 일급 객체이다. 자바스크립트에는 특별한 대우를 받는 일급 객체가 있다. 대표적인 일급 객체 중 하나가 바로 함수이다. 👉 다음 조건을 만족하는 객체를 일급 객체라고 한다. 무명
hanamon.kr
다시 쓰는 함수형 프로그래밍
> 참 좋은데 어떻게 표현할 방법이 없네... 오랜 기간 개발을 공부하게 되면서 여러가지 패러다임의 변화를 겪었는데 그 중에서 인상깊었던 것중에 하나는 객체지향 패러다임에서 함수형 패러다
velog.io
‘액션-계산-데이터’ 관점으로 보는 함수형 프로그래밍 패러다임 | 요즘IT
함수형 프로그래밍을 배우면서 깨달은 것이 있습니다. 실제 함수형 프로그래밍의 본질은 그렇게 어려운 것이 아닌데 이걸 설명하기 위해서는 대단히 어려운 일이 많았습니다. 아마 함수형 프
yozm.wishket.com