본문 바로가기

분류 전체보기

(58)
함수19 - 순수 함수와 비순수 함수 "함수" 7.5. 순수 함수와 비순수 함수 함수형 프로그래밍에서는 어떤 외부 상태에 의존하지도 않고 변경시키지도 않는, 즉 부수 효과가 없는 함수를 순수 함수(Pure function), 외부 상태를 변경시키는 즉, 부수 효과가 있는 함수를 비순수 함수(Impure function)라고 부른다. 순수 함수는 동일한 인수가 전달되면 언제나 동일한 값을 반환하는 함수를 말한다. 즉, 순수 함수는 어떤 외부 상태에도 의존하지 않고 오직 매개변수를 통해 함수 내부로 전달된 인수에게만 의존하여 반환값을 만든다. 함수의 외부 상태에 의존하는 함수는 외부 상태에 따라 반환갓이 달라진다. 순수 함수의 또 하나의 특징은 함수의 외부 상태를 변경하지 않는다는 것이다. var count = 0;// 현재 카운트를 나타내는 ..
함수18 - 콜백 함수 "함수" 7.4. 콜백 함수 어떤 일을 반복 수행하는 repeat 함수를 정의해 보자. // n만큼 어떤 일을 반복한다. function repeat(n) { // i를 출력한다. for (var i = 0; i < n; i++) console.log(i); } repeat(5);// 0 1 2 3 4 repeat 함수는 매개변수를 통해 전달받은 숫자만큼 반복하며 console.log(i)를 호출한다. 이때 repeat 함수는 console.log(i)에 강하게 의존하고 있어 다른 일을 할 수 없다. 따라서 만약 repeat 함수의 반복문 내부에서 다른 일을 하고 싶다면 함수를 새롭게 정의해야 한다. // n만큼 어떤 일을 반복한다 function repeat1(n) { // i를 출력한다 for (va..
함수17 - 중첩 함수 "함수" 7.3. 중첩 함수 함수 내부에 정의된 함수를 중첩 함수(nested function) 또는 내부 함수(inner function)라 한다. 그리고 중첩 함수를 포함하는 함수는 외부 함수(outer function)라 부른다. 일반적으로 중첩 함수는 자신을 포함하는 외부 함수를 돕는 헬퍼 함수(helper function)의 역할을 한다. function outer() { var x = 1; // 중첩 함수 function inner () { var y = 2; // 외부 함수의 변수를 참조할 수 있다. console.log(x + y);// 3 } inner (); } outer(); ES6부터 함수 정의는 문이 위치할 수 있는 문맥이라면 어디든지 가능하다. 함수 선언문의 경우, ES6 이전에..
함수16 - 재귀 함수 "함수" 7.2. 재귀 함수 함수가 자기 자신을 호출하는 것을 재귀 호출(recursive call)이라 한다. 재귀 함수(recursive function)는 자기 자신을 호출하는 행위, 즉 재귀 호출을 수행하는 함수를 말한다. 재귀 호출을 통해 반복 연산을 간단하게 구현할 수 있다. 예를 들어 팩토리얼은 재귀 호출로 간단히 구현할 수 있다. // 팩터리얼(계승)은 1부터 자신까지의 모든 양의 정수의 곱이다. // n! = 1* 2 * ... * (n-1) * n function factorial(n) { // 탈출 조건: n이 1 이하일 때 재귀 호출을 멈춘다. if (n
함수15 - 즉시 실행 함수 "함수" 7. 다양한 함수의 형태 7.1. 즉시 실행 함수 함수 정의와 동시에 즉시 호출되는 함수를 즉시 실행 함수(IIFE, Immediately lnvoked Function Expression)라고 한다. 즉시 실행 함수는 단 한번만 호출되며 다시 호출할 수는 없다. 따라서 즉시 실행 함수는 함수 이름이 없는 익명 함수를 사용하는 것이 일반적이다. // 익명 즉시 실행 함수 (function () { var a = 3; var b = 5; return a * b; }()); 함수 이름이 있는 기명 함수도 즉시 실행 함수도 사용할 수 있다. 하지만 그룹 연산자 (...) 내의 함수는 함수 선언문이 아니라 함수 리터럴로 평가되며 함수 이름은 함수 몸체에서만 참조할 수 있는 식별자이므로 즉시 실행 함수를..
함수14 - 외부 상태의 변경과 함수형 프로그래밍 "함수" 6. 외부 상태의 변경과 함수형 프로그래밍 원시 값은 값에 의한 전달(Pass by value), 객체는 참조에 의한 전달(Pass by reference) 방식으로 동작한다. 매개변수도 함수 몸체 내부에서 변수와 동일하게 취급되므로 매개변수 또한 타입에 따라 값에 의한 전달, 참조에 의한 전달 방식을 그대로 따른다. 함수의 매개변수에 값을 전달하는 방식을 값에 의한 호출(Call by value), 참조에 의한 호출(Call by reference)로 구별해 부르는 경우도 있으나 동작 방식은 값에 의한 전달, 참조에 의한 전달과 동일하다. 아래 예제를 살펴보자. // 매개변수 primitive는 원시값을 전달받고, 매개변수 obj는 객체를 전달받는다. function changeVal(prim..
함수13 - 반환문 "함수" 5.4. 반환문 함수는 return 키워드와 반환값으로 이루어진 반환문을 사용하여 실행 결과를 함수 외부로 반환(return)할 수 있다. function multiply(x, y) { return x * y;// 값의 반환 } // 함수는 반환값으로 평가된다. var result = multiply(3, 5); console.log(result);// 15 multiply 함수는 두 개의 인수를 전달받아서 곱한 결과값을 반환한다. 반환값은 return 키워드를 사용해 반환한다. 함수는 return 키워드를 사용해 자바스크립트에서 사용 가능한 모든 값을 반환할 수 있다. 함수 호출은 표현식이다. 이때 함수 호출 표현식은 return 키워드가 반환한 값, 즉 반환값으로 평가된다. 반환문은 두가지 ..
함수12 - 매개변수의 최대 개수 "함수" 5.3. 매개변수의 최대 개수 ECMAScript 사양에서는 매개변수의 최대 개수에 대해 명시적으로 제한하고 있지 않다. 하지만 물리적 한계는 있으므로 자바스크립트 엔진마다 매개변수의 최대 개수에 대한 제한이 있겠지만 충분히 많은 매개변수를 지정할 수 있다. 매개변수는 최대 몇 개까지 사용하는 것이 좋을까? 매개변수는 순서에 의미가 있다. 따라서 매개변수가 많아지만 함수를 호출할 때 전달해야 할 인수의 순서를 고려해야 한다. 이는 함수의 사용 방법을 어렵게 만들고 실수를 발생시킬 가능성을 높인다. 또한 매개변수의 개수나 순서가 변경되면 함수의 호출 방법도 변경되므로 함수를 사용하는 코드 전체가 영향을 받는다. 즉, 유지보수성도 나빠진다. 함수의 매개변수 코드 이해에 방헤가 되는 요소이므로 이상적..