자바스크립트에서 함수도 객체이기 때문에 함수 내부에 키-값 구조를 포함할 수 있습니다. 함수는 본질적으로 일반 객체와 비슷하게 동작하므로 속성을 추가하거나 수정할 수 있습니다.
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은 함수지만, property1과 method라는 키를 추가로 가지고 있습니다.함수를 데이터 저장용으로 활용하려면, 객체처럼 키-값 구조를 넣으면 됩니다:
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 속성을 통해 내부 데이터를 관리합니다.함수를 키-값 구조로 사용하면 유사한 동작을 구현할 수 있지만, Map과는 차이가 있습니다:
| 특징 | 함수 | Map |
|---|---|---|
| 키의 타입 | 문자열 또는 심볼만 가능 | 모든 데이터 타입 가능 |
| 키 순서 유지 | 키 삽입 순서를 보장하지 않음 | 삽입 순서를 보장함 |
| 메서드 지원 | 직접 구현해야 함 (set, get 등) | 기본 메서드 제공 (set, get) |
| 사용 목적 | 유연한 로직 구현 가능 | 데이터 저장 및 관리 최적화 |
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 같은 메서드를 통해 데이터를 다룰 수 있습니다.Map 자료구조를 사용하는 것이 더 적합합니다.