λͺ©μ°¨
μλ°μ€ν¬λ¦½νΈ map()ν¨μ, Object json key κ° κ°μ Έμ€κΈ°
μλ°μ€ν¬λ¦½νΈλ μΉ κ°λ°μμ κ°μ₯ λ리 μ¬μ©λλ νλ‘κ·Έλλ° μΈμ΄ μ€ νλλ‘, λ€μν λ°μ΄ν° μ‘°μ λ° μ²λ¦¬λ₯Ό μν λ΄μ₯ ν¨μλ₯Ό μ 곡νκ³ μμ΅λλ€. κ·Έ μ€μμλ λ°°μ΄μ ν¨μ¨μ μΌλ‘ λ€λ£¨κΈ° μν map() ν¨μμ JSON κ°μ²΄μμ ν€(key) κ°μ μΆμΆνλ λ°©λ²μ κ°λ°μλ€μ΄ μμ£Ό νμ©νλ κΈ°λ₯μ λλ€. μ΄λ² ν¬μ€ν μμλ μλ°μ€ν¬λ¦½νΈμ map() ν¨μμ λν κΈ°λ³Έ κ°λ κ³Ό μ¬μ©λ², κ·Έλ¦¬κ³ JSON κ°μ²΄μ ν€ κ°μ κ°μ Έμ€λ λ°©λ²μ λν΄ μ¬λ μκ² μμλ³΄κ³ , μ΄λ₯Ό HTML μΊλ²μ€λ₯Ό νμ©ν μ€μ μμ μ ν¨κ» μκ°νκ³ μ ν©λλ€.
μΉ μ ν리μΌμ΄μ κ°λ° κ³Όμ μμ λ°μ΄ν° λ³νκ³Ό μ‘°μμ λ§€μ° μ€μν μμ μ λλ€. λ°°μ΄μ μ μ₯λ λ°μ΄ν°λ₯Ό κ°κ³΅νμ¬ μλ‘μ΄ λ°°μ΄λ‘ λ°ννκ±°λ, JSON κ°μ²΄ λ΄μ ν€μ κ°μ νμ©ν΄ μνλ μ 보λ₯Ό μΆμΆνλ κ³Όμ μ μ¬μ©μ μΈν°λμ , API λ°μ΄ν° μ²λ¦¬ λ± λ€μν μν©μμ νμμ μΌλ‘ μ¬μ©λ©λλ€. νΉν, ES6μμ λμ λ map() ν¨μλ κΈ°μ‘΄ λ°°μ΄μ κ° μμλ₯Ό μννλ©° μνλ λ‘μ§μ μ μ©ν ν μλ‘μ΄ λ°°μ΄μ λ°ννλ κΈ°λ₯μ μ 곡νμ¬, μ½λμ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ ν¬κ² ν₯μμμΌ°μ΅λλ€.
λν, JSON(JavaScript Object Notation)μ μΉ μ ν리μΌμ΄μ μμ μλ²μ ν΄λΌμ΄μΈνΈ κ° λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ λ μ¬μ©λλ λνμ μΈ λ°μ΄ν° νμμ λλ€. JSON κ°μ²΄μμ ν€ κ°λ§μ μΆμΆνκ±°λ, κ° ν€μ λμνλ κ°μ κ°κ³΅νλ μμ μμ λ§€μ° λΉλ²νκ² λ°μν©λλ€. Objectμ λ΄μ₯ λ©μλμΈ Object.keys()μ Object.values(), Object.entries()λ₯Ό νμ©νλ©΄ μ΄λ¬ν μμ μ λ³΄λ€ κ°νΈνκ² μνν μ μμ΅λλ€.
μ΄λ² ν¬μ€ν μμλ map() ν¨μμ JSON κ°μ²΄ ν€ κ° μΆμΆμ κΈ°λ³Έ μ리, ꡬ문, κ·Έλ¦¬κ³ μ΄λ₯Ό νμ©ν μ€λ¬΄ μμ λ₯Ό ν΅ν΄ μλ°μ€ν¬λ¦½νΈμ κ°λ ₯ν λ°μ΄ν° μ²λ¦¬ κΈ°λ₯μ μ΄ν΄λ³΄κ³ μ ν©λλ€.
μλ°μ€ν¬λ¦½νΈμ map() ν¨μλ?
map() ν¨μλ μλ°μ€ν¬λ¦½νΈ λ°°μ΄(Array) κ°μ²΄μ λ΄μ₯ λ©μλλ‘, λ°°μ΄μ κ° μμμ λν΄ μ£Όμ΄μ§ μ½λ°± ν¨μλ₯Ό νΈμΆν κ²°κ³Όλ₯Ό λͺ¨μ μλ‘μ΄ λ°°μ΄μ λ°νν©λλ€. μ΄ ν¨μλ μλ³Έ λ°°μ΄μ λ³κ²½νμ§ μκ³ , μλ‘μ΄ λ°°μ΄μ μμ±νλ€λ μ μμ μμ ν¨μ(Pure Function)μ νΉμ±μ μ§λλ©°, ν¨μν νλ‘κ·Έλλ° ν¨λ¬λ€μκ³Όλ λ°μ ν κ΄λ ¨μ΄ μμ΅λλ€.
μΌλ°μ μΈ map() ν¨μμ μ¬μ©λ²μ λ€μκ³Ό κ°μ΅λλ€.
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(num => num * 2);
console.log(doubled); // μΆλ ₯ κ²°κ³Ό: [2, 4, 6, 8, 10]
μ μμ μμλ numbers λ°°μ΄μ κ° μμμ 2λ₯Ό κ³±ν ν, κ²°κ³Όλ₯Ό μλ‘μ΄ λ°°μ΄μΈ doubledμ μ μ₯νλ κ³Όμ μ 보μ¬μ€λλ€. μ΄μ²λΌ map() ν¨μλ λ°°μ΄ λ΄ κ° μμμ λν΄ λ°λ³΅μ μΈ μμ μ μνν λ λ§€μ° μ μ©νκ² μ¬μ©λ©λλ€.
map() ν¨μμ νΉμ§κ³Ό μ₯μ
- λΆλ³μ± μ μ§: map() ν¨μλ μλ³Έ λ°°μ΄μ λ³κ²½νμ§ μκ³ , μλ‘μ΄ λ°°μ΄μ λ°νν©λλ€. μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°μ λΆλ³μ±μ μ μ§ν μ μμΌλ©°, λ²κ·Έ λ°μ κ°λ₯μ±μ μ€μ¬μ€λλ€.
- ν¨μν νλ‘κ·Έλλ°: map() ν¨μλ μμ ν¨μμ νΉμ±μ νμ©νμ¬ μ¬μ΄λ μ΄ννΈλ₯Ό μ΅μνν©λλ€. μ΄λ‘ μΈν΄ μ½λλ₯Ό λ³΄λ€ μμΈ‘ κ°λ₯νκ³ ν μ€νΈνκΈ° μ½κ² λ§λ€μ΄ μ€λλ€.
- κ°λ μ± ν₯μ: λ°λ³΅λ¬Έ(for, while λ±)λ³΄λ€ κ°κ²°νκ³ μ½κΈ° μ¬μ΄ λ¬Έλ²μ μ 곡νμ¬, μ½λμ κ°λ μ±μ λμ¬μ€λλ€.
- 체μ΄λ(Chaining) μ§μ: filter(), reduce()μ κ°μ λ€λ₯Έ λ°°μ΄ λ΄μ₯ λ©μλμ ν¨κ» 체μ΄λνμ¬ λ³΅μ‘ν λ°μ΄ν° μ²λ¦¬ λ‘μ§μ κ°κ²°νκ² ννν μ μμ΅λλ€.
μ΄λ¬ν μ΄μ λ€λ‘ μΈν΄, map() ν¨μλ λ°μ΄ν° κ°κ³΅ λ° λ³ν μμ μμ λ§€μ° μ μ©ν λκ΅¬λ‘ μ리 μ‘μμ΅λλ€.
JSON κ°μ²΄μ ν€ κ° μΆμΆ λ°©λ²
JSONμ λ°μ΄ν° κ΅ν ν¬λ§·μΌλ‘, μλ°μ€ν¬λ¦½νΈ κ°μ²΄ νκΈ°λ²μ κΈ°λ°μΌλ‘ ν©λλ€. JSON κ°μ²΄ λ΄μ κ° νλ‘νΌν°λ ν€(key)μ κ°(value)μ μμΌλ‘ ꡬμ±λλ©°, μ΄λ₯Ό νμ©ν΄ νμν λ°μ΄ν°λ₯Ό μ½κ² μΆμΆν μ μμ΅λλ€. μλ°μ€ν¬λ¦½νΈμμλ JSON κ°μ²΄μμ ν€ κ°μ μΆμΆνκΈ° μν΄ Object.keys() λ©μλλ₯Ό μ¬μ©ν©λλ€.
μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ JSON κ°μ²΄κ° μλ€κ³ κ°μ ν΄λ΄ μλ€.
const userInfo = {
name: "νκΈΈλ",
age: 30,
city: "μμΈ"
};
const keys = Object.keys(userInfo);
console.log(keys); // μΆλ ₯ κ²°κ³Ό: ["name", "age", "city"]
Object.keys() λ©μλλ μ£Όμ΄μ§ κ°μ²΄μ μ΄κ±° κ°λ₯ν νλ‘νΌν° μ΄λ¦μ λ°°μ΄λ‘ λ°νν©λλ€. μ΄λ₯Ό ν΅ν΄ κ°μ²΄μ ν¬ν¨λ λͺ¨λ ν€ κ°μ μμ½κ² μ»μ μ μμ΅λλ€.
μΆκ°λ‘, Object.values()λ κ°μ²΄μ κ°λ€μ λ°°μ΄λ‘ λ°ννλ©°, Object.entries()λ ν€μ κ°μ μμΌλ‘ μ΄λ£¨μ΄μ§ λ°°μ΄μ λ°νν©λλ€. μ΄λ€ λ©μλλ₯Ό νμ©νλ©΄, κ°μ²΄ λ΄λΆμ λ°μ΄ν°λ₯Ό λ€μν λ°©μμΌλ‘ κ°κ³΅ν μ μμ΅λλ€.
map() ν¨μμ Object.keys()μ κ²°ν©
map() ν¨μμ Object.keys()λ₯Ό κ²°ν©νλ©΄, κ°μ²΄μ κ° ν€μ λν΄ μνλ μμ μ μνν μ μμ΅λλ€. μλ₯Ό λ€μ΄, JSON κ°μ²΄ λ΄μ λͺ¨λ ν€μ κ·Έμ λμνλ κ°μ λ¬Έμμ΄ ννλ‘ λ³ννμ¬ λ°°μ΄λ‘ μ μ₯ν μ μμ΅λλ€.
const userInfo = {
name: "νκΈΈλ",
age: 30,
city: "μμΈ"
};
const keyValuePairs = Object.keys(userInfo).map(key => {
return `${key}: ${userInfo[key]}`;
});
console.log(keyValuePairs);
// μΆλ ₯ κ²°κ³Ό: ["name: νκΈΈλ", "age: 30", "city: μμΈ"]
μ΄μ κ°μ΄ map() ν¨μλ₯Ό νμ©νλ©΄, κ°μ²΄μ ν€ κ°λ€μ λν΄ μΌκ΄μ μΈ λ³ν μμ μ μμ½κ² μ μ©ν μ μμ΅λλ€.
HTML μΊλ²μ€μμ μ°κ³ μμ
μΉ νμ΄μ§μμ λ°μ΄ν°λ₯Ό μκ°μ μΌλ‘ ννν λ HTML5μ μΊλ²μ€(Canvas) μμλ₯Ό νμ©νλ κ²½μ°κ° λ§μ΅λλ€. μ΄λ² μΉμ μμλ JSON κ°μ²΄μ λ°μ΄ν°λ₯Ό μ΄μ©νμ¬ μΊλ²μ€μ κ·Έλν½ μμλ₯Ό 그리λ μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
λ€μ μμ λ JSON λ°μ΄ν°λ₯Ό νμ©νμ¬ μΊλ²μ€μ μμ 그리λ μ½λμ λλ€.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>μΊλ²μ€μ μ 그리기</title>
<style>
body { font-family: Arial, sans-serif; }
#myCanvas { border: 1px solid #ccc; }
</style>
</head>
<body>
<canvas id="myCanvas" width="300" height="300"></canvas>
<script>
// μΊλ²μ€ μμ λ° 2D 컨ν
μ€νΈ κ°μ Έμ€κΈ°
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
// μμ 그리기 μν JSON λ°μ΄ν°
const circleData = {
x: 150,
y: 150,
radius: 50,
color: "blue"
};
// Object.keys()μ map()μ νμ©νμ¬ JSON λ°μ΄ν°μ ν€λ₯Ό λ°°μ΄λ‘ λ³ν
const dataKeys = Object.keys(circleData).map(key => key);
console.log("μ λ°μ΄ν°μ ν€ κ°:", dataKeys);
// μΊλ²μ€μ μ 그리기
ctx.beginPath();
ctx.arc(circleData.x, circleData.y, circleData.radius, 0, Math.PI * 2, false);
ctx.fillStyle = circleData.color;
ctx.fill();
ctx.stroke();
// μΆκ°μ μΌλ‘ μΊλ²μ€μ ν
μ€νΈλ‘ ν€ κ°μ μΆλ ₯ν΄λ³΄λ μμ
ctx.font = "14px Arial";
ctx.fillStyle = "black";
dataKeys.forEach((key, index) => {
const text = `${key}: ${circleData[key]}`;
ctx.fillText(text, 10, 20 + index * 20);
});
</script>
</body>
</html>
μ μμ μμλ λ¨Όμ μΊλ²μ€ μμλ₯Ό μ νν ν, 2D 컨ν μ€νΈλ₯Ό μ΄μ©νμ¬ μμ 그리λ μμ μ μνν©λλ€. circleDataλΌλ JSON κ°μ²΄μ μμ 그리기 μν μ’ν, λ°μ§λ¦, μμ μ λ³΄κ° ν¬ν¨λμ΄ μμΌλ©°, Object.keys()μ map() ν¨μλ₯Ό ν΅ν΄ μ΄ κ°μ²΄μ ν€ κ°μ λ°°μ΄λ‘ μΆμΆν ν, ν΄λΉ μ 보λ₯Ό μΊλ²μ€ μμ ν μ€νΈλ‘λ νμν©λλ€. μ΄λ₯Ό ν΅ν΄ μλ°μ€ν¬λ¦½νΈμ λ°μ΄ν° μ²λ¦¬ κΈ°λ₯κ³Ό HTML μΊλ²μ€μ μκ°μ νν κΈ°λ₯μ λμμ νμ©νλ λ°©λ²μ νμΈν μ μμ΅λλ€.
μ€λ¬΄μμμ νμ© ν
- λ°μ΄ν° λ³ν λ° νν°λ§: map() ν¨μλ λ¨μν λ³ν μμ λΏλ§ μλλΌ, filter()λ reduce()μ ν¨κ» μ¬μ©λμ΄ λ³΅μ‘ν λ°μ΄ν° μ²λ¦¬λ₯Ό κ°κ²°νκ² ννν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ¬μ©μ λͺ©λ‘μμ νΉμ 쑰건μ λ§λ λ°μ΄ν°λ₯Ό μΆμΆν ν, κ·Έ κ²°κ³Όλ₯Ό κ°κ³΅ν λ λ§€μ° μ μ©ν©λλ€.
- λΉλκΈ° μ²λ¦¬μ κ²°ν©: λΉλκΈ° ν¨μλ API νΈμΆ κ²°κ³Όλ₯Ό λ°°μ΄ ννλ‘ λ°μ κ²½μ°, map() ν¨μλ₯Ό νμ©νμ¬ κ° μμμ λν΄ μΆκ° μ²λ¦¬λ₯Ό ν μ μμ΅λλ€. μ΄λ Promise.all()κ³Ό κ²°ν©νλ©΄ λΉλκΈ° μ²λ¦¬λ₯Ό λμ± ν¨κ³Όμ μΌλ‘ κ΄λ¦¬ν μ μμ΅λλ€.
- μ½λ κ°λ μ± λ° μ μ§λ³΄μμ±: λ°λ³΅λ¬Έμ μ¬μ©ν μ½λλ³΄λ€ map() ν¨μλ₯Ό μ¬μ©νλ©΄ λ‘μ§μ΄ λͺ νν΄μ§κ³ , νμ λ€λ₯Έ κ°λ°μκ° μ½λλ₯Ό μ΄ν΄νκΈ° μ½μ΅λλ€. λν, ν¨μν νλ‘κ·Έλλ° λ°©μμ μ μ©ν¨μΌλ‘μ¨ λ²κ·Έ λ°μ κ°λ₯μ±μ μ€μΌ μ μμ΅λλ€.
- κ°μ²΄ λ°μ΄ν° μ²λ¦¬: JSON κ°μ²΄μμ λ°μ΄ν°λ₯Ό μΆμΆν λ, Object.keys(), Object.values(), Object.entries()λ₯Ό μ μ ν νμ©νμ¬ λ€μν λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό κ°κ³΅ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, κ°μ²΄ λ΄λΆμ κ°μ λν ν΅κ³λ μ§κ³λ₯Ό μ§νν λ μ΄λ¬ν λ©μλλ€μ΄ ν° λμμ΄ λ©λλ€.
κ²°λ‘
μ΄λ² ν¬μ€ν μμλ μλ°μ€ν¬λ¦½νΈμ map() ν¨μμ JSON κ°μ²΄μ ν€ κ°μ μΆμΆνλ λ°©λ²μ λν΄ μμΈνκ² μ΄ν΄λ³΄μμ΅λλ€. map() ν¨μλ λ°°μ΄μ κ° μμλ₯Ό μννλ©° μνλ λ‘μ§μ μ μ©ν΄ μλ‘μ΄ λ°°μ΄μ λ°ννλ κ°λ ₯ν λꡬλ‘, λ°μ΄ν° λ³ν λ° κ°κ³΅ μμ μμ νμμ μΈ μν μ μνν©λλ€. λν, Object.keys()μ κ°μ λ©μλλ₯Ό νμ©νλ©΄ JSON κ°μ²΄ λ΄μ λ°μ΄ν°λ₯Ό μμ½κ² μ²λ¦¬ν μ μμΌλ©°, μ΄λ₯Ό HTML μΊλ²μ€μ κ°μ μκ°μ μμμ κ²°ν©νλ©΄ λμ± νλΆν μΉ μ ν리μΌμ΄μ μ ꡬνν μ μμ΅λλ€.
μ€λ¬΄μμλ μ΄ λ κ°μ§ κΈ°λ₯μ μ μ ν μ‘°ν©νμ¬ λ³΅μ‘ν λ°μ΄ν° μ²λ¦¬ λ° μκ°ν μμ μ ν¨μ¨μ μΌλ‘ μνν μ μμ΅λλ€. μ½λ μμ λ₯Ό ν΅ν΄ μ΄ν΄λ³Έ κ²μ²λΌ, map() ν¨μμ Objectμ λ΄μ₯ λ©μλλ€μ κ°λ°μμ μμ°μ±μ λμ΄κ³ , μ½λμ κ°λ μ±μ ν₯μμν€λ©°, μ μ§λ³΄μμ±μ κ°ννλ λ° ν° μν μ ν©λλ€. μμΌλ‘ λ€μν νλ‘μ νΈμμ μ΄λ¬ν κΈ°λ₯λ€μ μ κ·Ή νμ©νμ¬ λμ± κΉλνκ³ ν¨μ¨μ μΈ μ½λλ₯Ό μμ±νμκΈΈ λ°λλλ€.
μλ°μ€ν¬λ¦½νΈμ κΈ°μ΄λΆν° κ³ κΈ λ°μ΄ν° μ²λ¦¬ κΈ°λ²κΉμ§ μ΄ν΄νλ κ²μ μΉ κ°λ°μ μμ΄ νμμ μΈ μμμ λλ€. μ΄λ² ν¬μ€ν μ΄ μ¬λ¬λΆμ κ°λ° μλ κ°νμ λμμ΄ λκΈ°λ₯Ό λ°λΌλ©°, μμΌλ‘λ μ΅μ μλ°μ€ν¬λ¦½νΈ κΈ°λ₯κ³Ό νμ© μ¬λ‘λ₯Ό κΎΈμ€ν νκ΅¬ν΄ λ³΄μκΈΈ μΆμ²λ립λλ€.
λκΈ