클로저 JavaScript자바스크립트 클로저 예제클로저란리액트 클로저고차함수

클로저와 고차 함수: JavaScript 개발자가 꼭 알아야 할 필수 개념

KUKJIN LEE
KUKJIN LEE
2024년 7월 2일
145

클로저(Closure)란 무엇인가?

클로저는 함수와 함수가 선언된 어휘적 환경의 조합입니다. 즉, 함수가 생성될 때의 스코프를 기억하고 있는 함수입니다. 클로저는 외부 함수의 변수에 접근할 수 있는 내부 함수를 정의할 때 자주 사용됩니다.

function createGreeting(greeting) {
    return function(name) {
        console.log(greeting + ', ' + name);
    }
}

const sayHello = createGreeting('Hello');
sayHello('Alice'); // 출력: Hello, Alice
sayHello('Bob');   // 출력: Hello, Bob

const sayHi = createGreeting('Hi');
sayHi('Charlie');  // 출력: Hi, Charlie

위 예제에서 createGreeting 함수는 클로저를 생성합니다. sayHellosayHi는 각각 다른 greeting 값을 기억하고 있습니다. 클로저는 변수의 생명 주기를 확장시켜, 함수가 실행된 후에도 변수를 사용할 수 있게 합니다.

 

고차 함수(Higher-order functions)란 무엇인가?

고차 함수는 함수를 인자로 받거나 함수를 반환하는 함수입니다.

JavaScript에서 함수는 일급 객체이기 때문에, 고차 함수를 통해 함수형 프로그래밍 패턴을 쉽게 구현할 수 있습니다.

// 함수를 인자로 받는 고차 함수
function repeat(action, times) {
    for (let i = 0; i < times; i++) {
        action();
    }
}

function sayHello() {
    console.log('Hello!');
}

repeat(sayHello, 3);
// 출력:
// Hello!
// Hello!
// Hello!

// 함수를 반환하는 고차 함수
function createMultiplier(multiplier) {
    return function(number) {
        return number * multiplier;
    }
}

const double = createMultiplier(2);
console.log(double(5)); // 출력: 10

const triple = createMultiplier(3);
console.log(triple(5)); // 출력: 15

고차 함수는 코드의 재사용성을 높이고, 간결하고 읽기 쉬운 코드를 작성하는 데 유용합니다.

 

클로저와 고차 함수를 활용하는 방법

클로저와 고차 함수를 결합하면 강력한 패턴을 만들 수 있습니다. 예를 들어, 특정 조건을 만족하는 요소만 필터링하는 함수를 만들 수 있습니다.

function filter(array, test) {
    let result = [];
    for (let element of array) {
        if (test(element)) {
            result.push(element);
        }
    }
    return result;
}

const isEven = (num) => num % 2 === 0;
const numbers = [1, 2, 3, 4, 5, 6];
console.log(filter(numbers, isEven)); // 출력: [2, 4, 6]

const isOdd = (num) => num % 2 !== 0;
console.log(filter(numbers, isOdd)); // 출력: [1, 3, 5]

위 예제에서 filter 함수는 고차 함수로, test 함수를 인자로 받아 배열의 각 요소를 테스트합니다. 이를 통해 재사용 가능한 유연한 함수를 만들 수 있습니다.

관련 글

TypeScript any 린트 에러(no-explicit-any) 근본적으로 해결하기

TypeScript 프로젝트에서 @typescript-eslint/no-explicit-any 린트 에러는 단순 규칙 비활성화로 해결할 문제가 아닙니다. 눈 앞 문제는 해결할 수 있지만, TypeScript를 사용하는 가장 중요한 이유를 위배하게 됩니다. any 타입은...

2025년 7월 23일269

JSP 주석, 아직도 `` 쓰시나요? 올바른 사용법

코드를 작성하다 보면 주석을 남기는 경우가 많습니다. 하지만 JSP 환경에서 어떤 주석을 사용하냐에 따라 보안 수준과 성능 이 크게 달라집니다. 표준 주석: 서버 사이드 주석 &lt;%-- --%&gt; JSP 페이지 내 개발 관련 주석은 &lt;%-- --%&gt; 를 사용하는게 좋습니다...

2025년 7월 9일144

쉽게 만드는 React Tab 라이브러리 react-tabs

개발자가 커스텀 스타일을 쉽게 적용할 수 있도록 최소한의 스타일만 제공하여 유연한 스타일링 이 가능한 라이브러리입니다. 상태 관리가 내장되어 있어 탭 선택 및 패널 표시 로직을 직접 구현할 필요 없이 간편하게 사용할 수 있습니다. 기본 사용법 먼저, 라이브러리를 설치합...

2025년 6월 17일173

Next.js 환경 변수 NEXT_PUBLIC 접두사 역할

NEXT_PUBLIC 접두사를 붙이면 변수의 접근 범위가 완전히 달라집니다. 이 차이점을 이해하는 것이 안전하고 효율적인 Next.js 애플리케이션을 구축하는 데 중요합니다. NEXT_PUBLIC 접두사가 없는 환경 변수 (서버 전용) NEXT_PUBLIC 접두사 없이...

2025년 6월 13일156