목차
함수와 일급 객체 🌊
- 일급 객체가 뭔가요?
다른 객체에 일반적으로 적용 가능한 연산을 모두 지원하는 객체로 함수를 값으로도 저장할 수 있고 변수에 넣어줄 수 있으며, 리턴값으로 쓰일 수도 있어야 일급객체라고 부른다.- 자바스크립트에서 함수가 일급 객체라면, 일급 객체로 뭘 할 수 있나요?
다른 함수를 인수로 전달 받을 수 있기때문에 고차함수를 만들고 콜백을 사용할 수 있다.- 꼬리 질문) 함수형 프로그래밍이 뭔가요? 🌊🌊
부수 효과를 없애고 순수 함수를 만들어 모듈화 수준을 높이는 프로그래밍의 새로운 패러다임으로 거의 모든 것을 순수함수로 나누어 문제를 해결한다고 볼 수 있다.- 꼬리 질문) 순수 함수가 뭔가요? 일반 함수와는 어떤 차이가 있죠? 🌊🌊
순수 함수는 부수효과가 없는 함수로 외부에 영향을 끼치지 않는 함수이고 비순수 함수는 부수효과가 발생하여 외부에 영향을 주는 함수이다.
함수와 일급 객체
- 일급 객체가 뭔가요?
자바스크립트에서 함수가 일급 객체라면, 일급 객체로 뭘 할 수 있나요?
- 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체(사용할 때 다른 요소들과 아무런 차별이 없음)
- 모든 일급 객체는
변수나 데이터에 담을
수 있어야 함(변수에 할당)- 함수 표현식으로 자유롭게 대입 가능
1 2 3
const hello = function () { console.log("Hello World"); };
- 함수 표현식으로 자유롭게 대입 가능
모든 일급 객체는
함수의 파라미터로 전달
할 수 있어야 함(다른 함수를 인자로 전달받음)콜백 함수 형태로 자유롭게 전달 가능
1 2 3 4 5 6 7 8 9
const hello = function () { console.log("Hello World"); }; function print(func) { func(); } print(hello); // hello(콜백함수)를 인자로 받는 print는 고차함수
모든 일급 객체는
함수의 리턴값으로 사용
할 수 있어야 함1 2 3 4 5 6 7
function add(num1) { return function (num2) { return num1 + num2; }; } add(3)(4); // 7
꼬리 질문) 함수형 프로그래밍이 뭔가요?
- 부수 효과를 없애고 순수 함수를 만들어 모듈화 수준을 높이는 프로그래밍 패러다임(거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법)
특징
- 입출력이 순수해야함(
순수함수
) : 반드시 하나 이상의 인자를 받고, 받은 인자를 처리하여 반드시 결과물을 돌려주어야함 - 부작용(부산물)이 없어야함 : 바꾸고자하는 변수 외에는 바뀌어서는 안됨(원본 데이터의
불변성
) - 함수와 데이터를 중점으로 생각함
- 대표적인 메소드 : map, filter, reduce
- 입출력이 순수해야함(
*
부수효과
는 아래와 같은 변화가 발생하는 작업을 의미함- 변수의 값이 변경됨
- 자료 구조를 제자리에서 수정함
- 객체의 필드값을 설정함
- 예외나 오류가 발생하며 실행이 중단됨
- 콘솔 또는 파일 I/O가 발생함
꼬리 질문) 순수 함수가 뭔가요? 일반 함수와는 어떤 차이가 있죠?
비순수 함수
: 외부 상태에 의존하거나 외부 상태를 변경하는, 즉부수 효과가 있는
함수순수 함수
: 어떤 외부 상태에 의존하지도 않고 변경하지도 않는, 즉부수 효과가 없는
함수- 동일한 입력에는 항상 같은 값을 반환해야 하는 함수
- 함수의 실행이 프로그램의 실행에 영향을 미치지 않아야 하는 함수
함수 내부에서 인자의 값을 변경하거나 프로그램 상태를 변경하는 Side Effect가 없는 것
1 2 3 4 5 6 7 8 9 10 11 12 13
//비순수함수 : add라는 함수 안에서 전역으로 선언된 변수인 num을 참조 let num = 1; function add(a) { return a + num; } // 순수함수 : 프로그램 실행에 영향을 미치지 않고 입력 값에 대해서만 값의 변환이 있음 function add(a, b) { return a + b; } const result = add(2, 3);
- 순수 함수는 프로그램의 변화 없이 입력 값에 대한 결과를 예상 할 수 있어 테스트가 용이함
출처