[JavaScript] 함수를 키-값 구조로 사용하기

falsovsveritas·2025년 1월 2일

JavaScript

목록 보기
1/4

자바스크립트에서 함수도 객체이기 때문에 함수 내부에 키-값 구조를 포함할 수 있습니다. 함수는 본질적으로 일반 객체와 비슷하게 동작하므로 속성을 추가하거나 수정할 수 있습니다.


1. 함수 내부에 키-값 구조 추가

function myFunction() {
    console.log("This is a regular function");
}

// 함수에 키-값 구조 추가
myFunction.property1 = "I am a property";
myFunction.method = function() {
    return "I am a method on the function";
};

console.log(myFunction.property1); // "I am a property"
console.log(myFunction.method());  // "I am a method on the function"

결과:

  • myFunction은 함수지만, property1method라는 키를 추가로 가지고 있습니다.
  • 이런 방식으로 함수를 Map과 비슷한 구조로 사용할 수 있습니다.

2. 함수를 Map처럼 사용하는 예제

함수를 데이터 저장용으로 활용하려면, 객체처럼 키-값 구조를 넣으면 됩니다:

function storage() {}

// 키-값 추가
storage.data = {};
storage.set = function(key, value) {
    this.data[key] = value;
};
storage.get = function(key) {
    return this.data[key];
};

// 사용
storage.set("name", "Alice");
console.log(storage.get("name")); // "Alice"

결과:

  • storage 함수는 실행 자체는 아무것도 하지 않지만, 데이터를 저장하고 관리하는 기능을 제공합니다.
  • data 속성을 통해 내부 데이터를 관리합니다.

3. 함수와 Map의 차이점

함수를 키-값 구조로 사용하면 유사한 동작을 구현할 수 있지만, Map과는 차이가 있습니다:

특징함수Map
키의 타입문자열 또는 심볼만 가능모든 데이터 타입 가능
키 순서 유지키 삽입 순서를 보장하지 않음삽입 순서를 보장함
메서드 지원직접 구현해야 함 (set, get 등)기본 메서드 제공 (set, get)
사용 목적유연한 로직 구현 가능데이터 저장 및 관리 최적화

4. Map의 기능을 함수로 구현

Map처럼 동작하는 함수를 직접 구현할 수도 있습니다:

function createMap() {
    const store = {};

    return {
        set: function(key, value) {
            store[key] = value;
        },
        get: function(key) {
            return store[key];
        },
        has: function(key) {
            return key in store;
        }
    };
}

// 사용
const myMap = createMap();
myMap.set("key1", "value1");
console.log(myMap.get("key1")); // "value1"
console.log(myMap.has("key1")); // true

결과:

  • createMap 함수는 내부적으로 store 객체를 사용하여 데이터를 저장합니다.
  • set, get, has 같은 메서드를 통해 데이터를 다룰 수 있습니다.

5. 결론

  • 함수는 객체처럼 키-값 구조를 가질 수 있으므로 Map과 유사한 구조로 구성 가능합니다.
  • 하지만 복잡한 키를 다뤄야 하거나 삽입 순서를 유지하려면 Map 자료구조를 사용하는 것이 더 적합합니다.
  • 간단한 경우에는 함수 내부에 키-값 구조를 정의해 활용할 수 있습니다. 😊

6. 활용예제

0개의 댓글