Once Function

Once Function - Explanation

보통 함수 O(1) O(1)

Problem Summary

Write a function that ensures another function is only called once.

Go to Problem →

Detailed Explanation

이 문제는 **클로저(closure)**를 사용하여 함수가 한 번만 실행되도록 래핑하는 방법을 학습합니다. ## 핵심 개념: 실행 횟수 제한 클로저를 사용하여 함수 호출 상태를 추적하고 제어합니다. ### 접근 방법 ```javascript function once(fn) { let called = false; let result; return function(...args) { if (!called) { called = true; result = fn.apply(this, args); } return result; }; } ``` ### 동작 분석 1. 외부 변수 called로 호출 여부 추적 2. 첫 호출 시 함수 실행하고 결과 저장 3. 이후 호출은 저장된 결과만 반환 ### 실행 예시 ```javascript const init = once(() => console.log('초기화')); init(); // "초기화" 출력 init(); // 아무것도 안 함 init(); // 아무것도 안 함 ``` ### 실무 활용 - 초기화 함수 (한 번만 실행) - API 호출 제한 - 이벤트 핸들러 중복 방지 - 싱글톤 패턴 구현

Solution Code

solution.js
function once(fn) {
  let called = false;
  let result;
  return function(...args) {
    if (!called) {
      called = true;
      result = fn.apply(this, args);
    }
    return result;
  };
}

Key Concepts from This Problem

1. 클로저
2. 고차 함수
3. 상태 추적
4. 함수 래핑

Common Mistakes

this 바인딩을 유지하려면 apply나 call을 사용해야 합니다
화살표 함수는 자체 this가 없으므로 주의가 필요합니다
결과를 캐시하지 않으면 첫 호출 이후 undefined를 반환합니다

Hints

Hint 1: 클로저로 호출 여부를 추적하세요.

Complexity Analysis

Time Complexity

O(1)

Constant time regardless of input size

Space Complexity

O(1)

Uses almost no additional memory

Related Tags

#함수 #클로저 #고차함수