30 Days of JavaScript - Closures | LeetCode

Bori·2025년 11월 18일

LeetCode

목록 보기
1/5
post-thumbnail

문제를 풀면서 문제의 의도와 연관된 개념에 대해 정리합니다.

2667. Create Hello World Function

기초적인 클로저 개념과 함수 생성 패턴 이해하기

문제 의도

  • 함수를 반환하는 함수에 대한 이해
  • 클로저에 대한 이해
  • JavaScript 일급 함수에 대한 이해

일급 함수(First-class Function)

일급 함수란, "함수가 다른 변수처럼 다루어진다."는 조건을 만족하는 언어의 함수를 의미합니다. 즉, 함수가 값처럼 취급되는 것을 말합니다.

  • 변수에 함수를 할당할 수 있습니다.

    • 예:

       const foo = () => {
        console.log("hello"); 
      };
      
      foo(); // 변수를 통해 호출
    • 함수도 값(value)으로 간주되어 변수에 저장될 수 있습니다.

  • 함수를 다른 함수의 인자로 전달할 수 있습니다.

    • 예:

       function gretting(helloFn, name) {
         console.log(helloFn() + name);
       }
       function sayHello() {
         return "Hello, "
       }
      
      greeting(sayHello, "World!") // Hello, World!
    • 이처럼 콜백 함수(callback)로 전달하는 것이 가능합니다.

  • 함수를 반환할 수 있습니다.

    • 함수를 실행한 결과로 다른 함수를 반환할 수 있습니다.

    • 예:

      function makeGreeter() {
        return function() {
          console.log("Hi!");
        };
      }
      
      const greeter = makeGreeter();
      greeter(); // Hi!
    • 이렇게 함수를 반환하는 함수를 고차 함수(Higher-Order Function)라고 합니다.

  • JavaScript 함수는 변수에 할당되거나, 다른 함수에 전달되거나, 함수에서 반환될 수 있기 때문에 일급 객체로 취급됩니다.

    • 즉, 함수는 객체이면서 "호출 가능한 값(callable value)"으로 이러한 특징을 통해 고차 함수, 클로저, 함수형 프로그래밍 등을 구현할 수 있습니다.

2620. Counter

클로저를 이용해 함수 내부에 상태(state)를 저장하고 관리하기

문제 의도

  • 클로저를 이용해 상태 유지 및 변경에 대한 이해
    • 클로저는 함수가 선언될 때의 외부 스코프를 기억하여, 함수의 실행이 끝난 뒤에도 해당 스코프에 접근할 수 있다.
    • 따라서, 함수가 private state를 갖는 것처럼 사용할 수 있다.
    • 함수 내부에 변수를 두고 그 값을 기억하여, 매번 호출할 때마다 내부 값을 변경할 수 있다.
  • 고차 함수에 대한 이해

2704. To Be Or Not To Be

함수형 인터페이스 설계(메서드 체이닝)와 에러 처리를 통해 테스트 코드의 기본 원리 학습하기

문제 의도

  • 고차 함수와 클로저 개념의 이해
    • expect(value) 호출 시 내부에서 value를 기억하는 객체를 반환한다.
  • 엄격한 비교(===)와 느슨한 비교(==) 차이 이해
    • 테스트는 예측 가능해야하고 타입 변환이 일어나면 안되므로 엄격한 비교(=== / !==) 를 사용해서 값과 타입을 비교한다.
  • 에러 처리(Error throwing)
    • 조건을 만족하지 않은 경우, return false가 아니라 에러를 던져 테스트의 실패를 명확하게 나타낸다.
  • 객체 반환 패턴과 메서드 구조 설계
    • 함수는 객체를 반환하고, 내부 변수에 접근할 수 있는 메서드를 구현한다.
  • 테스트 프레임워크 원리 학습
    • 테스트는 기댓값과 실제 값을 비교하여 실패 시 에러를 던지고, 성공 시 true를 반환하는 테스트 코드의 기본 원리를 학습

2665. Counter II

클로저를 이용하여 상태를 보존하고 조작하는 패턴 다루기

  • 클로저의 개념 이해
    • createCounter(init) 호출 시내부에 상태를 저장
    • 이 상태는 외부에서 직접 접근할 수 없다.
    • createCounter가 반환하는 객체의 함수들만 내부 상태에 접근하여 값을 변경할 수 있다.
  • 상태 유지 함수 패턴 학습
    • 일반 함수는 호출할 때마다 새로 시작하지만, 문제는 이전 호출의 결과가 다음 호출에 영향을 주는 것을 구현하도록 요구
  • 캡슐화(Encapsulation) 개념 이해

캡슐화(Encapsulation)

  • 캡슐화는 데이터와 함수를 하나의 컴포넌트(예: 클래스 또는 객체)로 묶는 개념입니다.
  • 컴포넌트 내부 구현(데이터 구조 또는 내부 함수)은 외부에 노출하지 않고, 외부에서는 정해진 인터페이스(메서드 등)를 통해 접근하도록 제어합니다.
  • 이를 통해 내부 구현을 숨기면서 필요한 기능만 외부로 제공합니다.

0개의 댓글