1/*
2 * JavaScript ๊ธฐ์ด ์์
3 * ๋ณ์, ๋ฐ์ดํฐ ํ์
, ์ฐ์ฐ์, ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ, ํจ์, ๋ฐฐ์ด, ๊ฐ์ฒด, ํด๋์ค
4 */
5
6// ์ถ๋ ฅ ํจ์
7function log(message) {
8 const output = document.getElementById('output');
9 output.textContent += message + '\n';
10 console.log(message);
11}
12
13function clearOutput() {
14 document.getElementById('output').textContent = '';
15}
16
17// ============================================
18// 1. ๋ณ์
19// ============================================
20function runVariables() {
21 clearOutput();
22 log('=== ๋ณ์ (var, let, const) ===\n');
23
24 // var - ํจ์ ์ค์ฝํ (๋น๊ถ์ฅ)
25 var oldVar = "I'm var";
26 log(`var oldVar = "${oldVar}"`);
27
28 // let - ๋ธ๋ก ์ค์ฝํ, ์ฌํ ๋น ๊ฐ๋ฅ
29 let count = 0;
30 log(`let count = ${count}`);
31 count = 1;
32 log(`count = ${count} (์ฌํ ๋น ๊ฐ๋ฅ)`);
33
34 // const - ๋ธ๋ก ์ค์ฝํ, ์ฌํ ๋น ๋ถ๊ฐ
35 const PI = 3.14159;
36 log(`\nconst PI = ${PI}`);
37 // PI = 3; // Error!
38
39 const person = { name: "ํ๊ธธ๋" };
40 log(`const person = { name: "${person.name}" }`);
41 person.name = "๊น์ฒ ์";
42 log(`person.name = "${person.name}" (๊ฐ์ฒด ์์ฑ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ)`);
43
44 // ์ค์ฝํ ์ฐจ์ด
45 log('\n--- ์ค์ฝํ ์ฐจ์ด ---');
46 if (true) {
47 var varInBlock = "var๋ ๋ธ๋ก ๋ฐ์์๋ ์ ๊ทผ ๊ฐ๋ฅ";
48 let letInBlock = "let์ ๋ธ๋ก ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅ";
49 }
50 log(`๋ธ๋ก ๋ฐ์์ var: ${varInBlock}`);
51 // log(letInBlock); // Error: not defined
52}
53
54// ============================================
55// 2. ๋ฐ์ดํฐ ํ์
56// ============================================
57function runDataTypes() {
58 clearOutput();
59 log('=== ๋ฐ์ดํฐ ํ์
===\n');
60
61 // ๊ธฐ๋ณธ ํ์
62 let str = "๋ฌธ์์ด";
63 let num = 42;
64 let float = 3.14;
65 let bool = true;
66 let empty = null;
67 let notDefined;
68 let sym = Symbol("id");
69 let big = 9007199254740991n;
70
71 log('--- ๊ธฐ๋ณธ ํ์
(Primitive) ---');
72 log(`String: "${str}" (typeof: ${typeof str})`);
73 log(`Number (์ ์): ${num} (typeof: ${typeof num})`);
74 log(`Number (์ค์): ${float} (typeof: ${typeof float})`);
75 log(`Boolean: ${bool} (typeof: ${typeof bool})`);
76 log(`Null: ${empty} (typeof: ${typeof empty})`); // ์ฃผ์: object๋ก ๋์ด
77 log(`Undefined: ${notDefined} (typeof: ${typeof notDefined})`);
78 log(`Symbol: ${String(sym)} (typeof: ${typeof sym})`);
79 log(`BigInt: ${big} (typeof: ${typeof big})`);
80
81 // ์ฐธ์กฐ ํ์
82 log('\n--- ์ฐธ์กฐ ํ์
(Reference) ---');
83 let obj = { key: "value" };
84 let arr = [1, 2, 3];
85 let func = function() {};
86
87 log(`Object: ${JSON.stringify(obj)} (typeof: ${typeof obj})`);
88 log(`Array: [${arr}] (typeof: ${typeof arr}, Array.isArray: ${Array.isArray(arr)})`);
89 log(`Function: ${func.toString()} (typeof: ${typeof func})`);
90
91 // ํ์
๋ณํ
92 log('\n--- ํ์
๋ณํ ---');
93 log(`String(123) = "${String(123)}"`);
94 log(`Number("42") = ${Number("42")}`);
95 log(`Boolean(0) = ${Boolean(0)}`);
96 log(`Boolean("") = ${Boolean("")}`);
97 log(`Boolean("hello") = ${Boolean("hello")}`);
98 log(`parseInt("42px") = ${parseInt("42px")}`);
99 log(`parseFloat("3.14abc") = ${parseFloat("3.14abc")}`);
100}
101
102// ============================================
103// 3. ์ฐ์ฐ์
104// ============================================
105function runOperators() {
106 clearOutput();
107 log('=== ์ฐ์ฐ์ ===\n');
108
109 let a = 10, b = 3;
110
111 // ์ฐ์ ์ฐ์ฐ์
112 log('--- ์ฐ์ ์ฐ์ฐ์ ---');
113 log(`${a} + ${b} = ${a + b}`);
114 log(`${a} - ${b} = ${a - b}`);
115 log(`${a} * ${b} = ${a * b}`);
116 log(`${a} / ${b} = ${a / b}`);
117 log(`${a} % ${b} = ${a % b} (๋๋จธ์ง)`);
118 log(`${a} ** ${b} = ${a ** b} (๊ฑฐ๋ญ์ ๊ณฑ)`);
119
120 // ๋น๊ต ์ฐ์ฐ์
121 log('\n--- ๋น๊ต ์ฐ์ฐ์ ---');
122 log(`5 == "5" : ${5 == "5"} (ํ์
๋ณํ ํ ๋น๊ต)`);
123 log(`5 === "5" : ${5 === "5"} (ํ์
๊น์ง ๋น๊ต)`);
124 log(`5 != "5" : ${5 != "5"}`);
125 log(`5 !== "5" : ${5 !== "5"}`);
126
127 // ๋
ผ๋ฆฌ ์ฐ์ฐ์
128 log('\n--- ๋
ผ๋ฆฌ ์ฐ์ฐ์ ---');
129 log(`true && false = ${true && false}`);
130 log(`true || false = ${true || false}`);
131 log(`!true = ${!true}`);
132
133 // ์ผํญ ์ฐ์ฐ์
134 log('\n--- ์ผํญ ์ฐ์ฐ์ ---');
135 let age = 20;
136 let status = age >= 18 ? "์ฑ์ธ" : "๋ฏธ์ฑ๋
์";
137 log(`๋์ด: ${age}, ์ํ: ${status}`);
138
139 // Nullish coalescing (??)
140 log('\n--- Nullish Coalescing (??) ---');
141 let value1 = null ?? "๊ธฐ๋ณธ๊ฐ";
142 let value2 = 0 ?? "๊ธฐ๋ณธ๊ฐ";
143 let value3 = "" ?? "๊ธฐ๋ณธ๊ฐ";
144 log(`null ?? "๊ธฐ๋ณธ๊ฐ" = "${value1}"`);
145 log(`0 ?? "๊ธฐ๋ณธ๊ฐ" = ${value2} (0์ null/undefined๊ฐ ์๋)`);
146 log(`"" ?? "๊ธฐ๋ณธ๊ฐ" = "${value3}" (๋น ๋ฌธ์์ด๋ ๊ฐ)`);
147
148 // || vs ?? ์ฐจ์ด
149 log('\n--- || vs ?? ---');
150 log(`0 || "default" = "${0 || "default"}" (0์ falsy)`);
151 log(`0 ?? "default" = ${0 ?? "default"} (0์ null์ด ์๋)`);
152
153 // Optional chaining (?.)
154 log('\n--- Optional Chaining (?.) ---');
155 let user = { profile: { name: "ํ๊ธธ๋" } };
156 let emptyUser = {};
157 log(`user?.profile?.name = "${user?.profile?.name}"`);
158 log(`emptyUser?.profile?.name = ${emptyUser?.profile?.name}`);
159}
160
161// ============================================
162// 4. ์กฐ๊ฑด๋ฌธ
163// ============================================
164function runConditions() {
165 clearOutput();
166 log('=== ์กฐ๊ฑด๋ฌธ ===\n');
167
168 // if-else
169 log('--- if-else ---');
170 let score = 85;
171 let grade;
172
173 if (score >= 90) {
174 grade = 'A';
175 } else if (score >= 80) {
176 grade = 'B';
177 } else if (score >= 70) {
178 grade = 'C';
179 } else {
180 grade = 'F';
181 }
182 log(`์ ์: ${score}, ํ์ : ${grade}`);
183
184 // switch
185 log('\n--- switch ---');
186 let day = new Date().getDay();
187 let dayName;
188
189 switch (day) {
190 case 0:
191 dayName = "์ผ์์ผ";
192 break;
193 case 1:
194 dayName = "์์์ผ";
195 break;
196 case 2:
197 dayName = "ํ์์ผ";
198 break;
199 case 3:
200 dayName = "์์์ผ";
201 break;
202 case 4:
203 dayName = "๋ชฉ์์ผ";
204 break;
205 case 5:
206 dayName = "๊ธ์์ผ";
207 break;
208 case 6:
209 dayName = "ํ ์์ผ";
210 break;
211 default:
212 dayName = "์ ์ ์์";
213 }
214 log(`์ค๋์ ${dayName}์
๋๋ค.`);
215
216 // Truthy์ Falsy
217 log('\n--- Truthy์ Falsy ---');
218 const falsyValues = [false, 0, -0, 0n, "", null, undefined, NaN];
219 log('Falsy ๊ฐ๋ค:');
220 falsyValues.forEach(v => {
221 log(` ${String(v)} (${typeof v}) => ${Boolean(v) ? 'truthy' : 'falsy'}`);
222 });
223
224 log('\n๋ชจ๋ ๋ค๋ฅธ ๊ฐ์ truthy์
๋๋ค:');
225 log(` "0" => ${Boolean("0") ? 'truthy' : 'falsy'}`);
226 log(` [] => ${Boolean([]) ? 'truthy' : 'falsy'}`);
227 log(` {} => ${Boolean({}) ? 'truthy' : 'falsy'}`);
228}
229
230// ============================================
231// 5. ๋ฐ๋ณต๋ฌธ
232// ============================================
233function runLoops() {
234 clearOutput();
235 log('=== ๋ฐ๋ณต๋ฌธ ===\n');
236
237 // for
238 log('--- for ๋ฌธ ---');
239 let sum = 0;
240 for (let i = 1; i <= 5; i++) {
241 sum += i;
242 }
243 log(`1๋ถํฐ 5๊น์ง์ ํฉ: ${sum}`);
244
245 // while
246 log('\n--- while ๋ฌธ ---');
247 let count = 0;
248 while (count < 3) {
249 log(`count: ${count}`);
250 count++;
251 }
252
253 // for...of (๋ฐฐ์ด ์ํ)
254 log('\n--- for...of (๋ฐฐ์ด ์ํ) ---');
255 const fruits = ["์ฌ๊ณผ", "๋ฐ๋๋", "์ค๋ ์ง"];
256 for (const fruit of fruits) {
257 log(`๊ณผ์ผ: ${fruit}`);
258 }
259
260 // for...in (๊ฐ์ฒด ํค ์ํ)
261 log('\n--- for...in (๊ฐ์ฒด ํค ์ํ) ---');
262 const person = { name: "ํ๊ธธ๋", age: 25, city: "์์ธ" };
263 for (const key in person) {
264 log(`${key}: ${person[key]}`);
265 }
266
267 // forEach
268 log('\n--- forEach ---');
269 fruits.forEach((fruit, index) => {
270 log(`[${index}] ${fruit}`);
271 });
272
273 // break์ continue
274 log('\n--- break์ continue ---');
275 log('continue๋ก 3 ๊ฑด๋๋ฐ๊ธฐ:');
276 for (let i = 1; i <= 5; i++) {
277 if (i === 3) continue;
278 log(` i = ${i}`);
279 }
280
281 log('break๋ก 3์์ ์ค๋จ:');
282 for (let i = 1; i <= 5; i++) {
283 if (i === 3) break;
284 log(` i = ${i}`);
285 }
286}
287
288// ============================================
289// 6. ํจ์
290// ============================================
291function runFunctions() {
292 clearOutput();
293 log('=== ํจ์ ===\n');
294
295 // ํจ์ ์ ์ธ์
296 log('--- ํจ์ ์ ์ธ์ ---');
297 function greet1(name) {
298 return `Hello, ${name}!`;
299 }
300 log(greet1("ํ๊ธธ๋"));
301
302 // ํจ์ ํํ์
303 log('\n--- ํจ์ ํํ์ ---');
304 const greet2 = function(name) {
305 return `Hi, ${name}!`;
306 };
307 log(greet2("๊น์ฒ ์"));
308
309 // ํ์ดํ ํจ์
310 log('\n--- ํ์ดํ ํจ์ ---');
311 const greet3 = (name) => `Hey, ${name}!`;
312 log(greet3("์ด์ํฌ"));
313
314 // ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์
315 log('\n--- ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์ ---');
316 const greet4 = (name = "Guest") => `Welcome, ${name}!`;
317 log(greet4());
318 log(greet4("๋ฐ์ง๋ฏผ"));
319
320 // Rest ํ๋ผ๋ฏธํฐ
321 log('\n--- Rest ํ๋ผ๋ฏธํฐ ---');
322 const sumAll = (...numbers) => {
323 return numbers.reduce((acc, num) => acc + num, 0);
324 };
325 log(`sumAll(1, 2, 3, 4, 5) = ${sumAll(1, 2, 3, 4, 5)}`);
326
327 // ๊ตฌ์กฐ ๋ถํด ๋งค๊ฐ๋ณ์
328 log('\n--- ๊ตฌ์กฐ ๋ถํด ๋งค๊ฐ๋ณ์ ---');
329 const printPerson = ({ name, age }) => {
330 return `${name}๋์ ${age}์ธ์
๋๋ค.`;
331 };
332 log(printPerson({ name: "ํ๊ธธ๋", age: 25 }));
333
334 // ์ฆ์ ์คํ ํจ์ (IIFE)
335 log('\n--- ์ฆ์ ์คํ ํจ์ (IIFE) ---');
336 const result = (function(x, y) {
337 return x + y;
338 })(3, 4);
339 log(`IIFE ๊ฒฐ๊ณผ: ${result}`);
340
341 // ํด๋ก์
342 log('\n--- ํด๋ก์ ---');
343 function createCounter() {
344 let count = 0;
345 return {
346 increment: () => ++count,
347 decrement: () => --count,
348 getCount: () => count
349 };
350 }
351 const counter = createCounter();
352 log(`count: ${counter.getCount()}`);
353 log(`increment: ${counter.increment()}`);
354 log(`increment: ${counter.increment()}`);
355 log(`decrement: ${counter.decrement()}`);
356}
357
358// ============================================
359// 7. ๋ฐฐ์ด
360// ============================================
361function runArrays() {
362 clearOutput();
363 log('=== ๋ฐฐ์ด ===\n');
364
365 // ๋ฐฐ์ด ์์ฑ
366 log('--- ๋ฐฐ์ด ์์ฑ ---');
367 const arr1 = [1, 2, 3];
368 const arr2 = new Array(3).fill(0);
369 const arr3 = Array.from({ length: 5 }, (_, i) => i + 1);
370 log(`๋ฆฌํฐ๋ด: [${arr1}]`);
371 log(`fill: [${arr2}]`);
372 log(`Array.from: [${arr3}]`);
373
374 // ๊ธฐ๋ณธ ๋ฉ์๋
375 log('\n--- ๊ธฐ๋ณธ ๋ฉ์๋ ---');
376 const fruits = ["์ฌ๊ณผ", "๋ฐ๋๋"];
377 log(`์๋ณธ: [${fruits}]`);
378
379 fruits.push("์ค๋ ์ง");
380 log(`push("์ค๋ ์ง"): [${fruits}]`);
381
382 fruits.pop();
383 log(`pop(): [${fruits}]`);
384
385 fruits.unshift("๋ธ๊ธฐ");
386 log(`unshift("๋ธ๊ธฐ"): [${fruits}]`);
387
388 fruits.shift();
389 log(`shift(): [${fruits}]`);
390
391 // ๋ฐฐ์ด ์กฐ์
392 log('\n--- ๋ฐฐ์ด ์กฐ์ ---');
393 const numbers = [1, 2, 3, 4, 5];
394 log(`์๋ณธ: [${numbers}]`);
395 log(`slice(1, 3): [${numbers.slice(1, 3)}]`);
396 log(`concat([6, 7]): [${numbers.concat([6, 7])}]`);
397 log(`indexOf(3): ${numbers.indexOf(3)}`);
398 log(`includes(3): ${numbers.includes(3)}`);
399 log(`join("-"): "${numbers.join("-")}"`);
400 log(`reverse(): [${[...numbers].reverse()}]`);
401
402 // ๊ณ ์ฐจ ํจ์
403 log('\n--- ๊ณ ์ฐจ ํจ์ ---');
404 const nums = [1, 2, 3, 4, 5];
405 log(`์๋ณธ: [${nums}]`);
406 log(`map(n => n * 2): [${nums.map(n => n * 2)}]`);
407 log(`filter(n => n > 2): [${nums.filter(n => n > 2)}]`);
408 log(`find(n => n > 2): ${nums.find(n => n > 2)}`);
409 log(`findIndex(n => n > 2): ${nums.findIndex(n => n > 2)}`);
410 log(`reduce((acc, n) => acc + n, 0): ${nums.reduce((acc, n) => acc + n, 0)}`);
411 log(`every(n => n > 0): ${nums.every(n => n > 0)}`);
412 log(`some(n => n > 4): ${nums.some(n => n > 4)}`);
413 log(`sort((a, b) => b - a): [${[...nums].sort((a, b) => b - a)}]`);
414
415 // ์คํ๋ ๋ ์ฐ์ฐ์
416 log('\n--- ์คํ๋ ๋ ์ฐ์ฐ์ ---');
417 const arr = [1, 2, 3];
418 const newArr = [...arr, 4, 5];
419 log(`[...arr, 4, 5]: [${newArr}]`);
420 log(`Math.max(...arr): ${Math.max(...arr)}`);
421
422 // ๊ตฌ์กฐ ๋ถํด
423 log('\n--- ๊ตฌ์กฐ ๋ถํด ---');
424 const [first, second, ...rest] = [1, 2, 3, 4, 5];
425 log(`[first, second, ...rest] = [1, 2, 3, 4, 5]`);
426 log(`first: ${first}, second: ${second}, rest: [${rest}]`);
427}
428
429// ============================================
430// 8. ๊ฐ์ฒด
431// ============================================
432function runObjects() {
433 clearOutput();
434 log('=== ๊ฐ์ฒด ===\n');
435
436 // ๊ฐ์ฒด ๋ฆฌํฐ๋ด
437 log('--- ๊ฐ์ฒด ๋ฆฌํฐ๋ด ---');
438 const person = {
439 name: "ํ๊ธธ๋",
440 age: 25,
441 city: "์์ธ",
442 greet() {
443 return `์๋
ํ์ธ์, ${this.name}์
๋๋ค.`;
444 }
445 };
446 log(`person: ${JSON.stringify(person, null, 2)}`);
447 log(`person.greet(): ${person.greet()}`);
448
449 // ์์ฑ ์ ๊ทผ
450 log('\n--- ์์ฑ ์ ๊ทผ ---');
451 log(`person.name: "${person.name}"`);
452 log(`person["age"]: ${person["age"]}`);
453
454 const key = "city";
455 log(`person[key] (key="city"): "${person[key]}"`);
456
457 // ์์ฑ ์ถ๊ฐ/์์ /์ญ์
458 log('\n--- ์์ฑ ์ถ๊ฐ/์์ /์ญ์ ---');
459 person.email = "hong@example.com";
460 log(`์ถ๊ฐ: person.email = "${person.email}"`);
461
462 person.age = 26;
463 log(`์์ : person.age = ${person.age}`);
464
465 delete person.city;
466 log(`์ญ์ ํ keys: [${Object.keys(person)}]`);
467
468 // ๊ตฌ์กฐ ๋ถํด ํ ๋น
469 log('\n--- ๊ตฌ์กฐ ๋ถํด ํ ๋น ---');
470 const { name, age, email = "์์" } = person;
471 log(`const { name, age, email = "์์" } = person`);
472 log(`name: "${name}", age: ${age}, email: "${email}"`);
473
474 // ๋ณ์นญ
475 const { name: userName } = person;
476 log(`const { name: userName } = person => userName: "${userName}"`);
477
478 // ์คํ๋ ๋ ์ฐ์ฐ์
479 log('\n--- ์คํ๋ ๋ ์ฐ์ฐ์ ---');
480 const newPerson = { ...person, city: "๋ถ์ฐ", country: "ํ๊ตญ" };
481 log(`{ ...person, city: "๋ถ์ฐ" }:`);
482 log(JSON.stringify(newPerson, null, 2));
483
484 // Object ๋ฉ์๋
485 log('\n--- Object ๋ฉ์๋ ---');
486 const obj = { a: 1, b: 2, c: 3 };
487 log(`Object.keys(obj): [${Object.keys(obj)}]`);
488 log(`Object.values(obj): [${Object.values(obj)}]`);
489 log(`Object.entries(obj): ${JSON.stringify(Object.entries(obj))}`);
490
491 // Object.assign
492 const merged = Object.assign({}, obj, { d: 4 });
493 log(`Object.assign({}, obj, { d: 4 }): ${JSON.stringify(merged)}`);
494
495 // ์์ฑ ์กด์ฌ ํ์ธ
496 log('\n--- ์์ฑ ์กด์ฌ ํ์ธ ---');
497 log(`"a" in obj: ${"a" in obj}`);
498 log(`obj.hasOwnProperty("a"): ${obj.hasOwnProperty("a")}`);
499}
500
501// ============================================
502// 9. ํด๋์ค
503// ============================================
504function runClasses() {
505 clearOutput();
506 log('=== ํด๋์ค (ES6) ===\n');
507
508 // ๊ธฐ๋ณธ ํด๋์ค
509 log('--- ๊ธฐ๋ณธ ํด๋์ค ---');
510 class Animal {
511 constructor(name) {
512 this.name = name;
513 }
514
515 speak() {
516 return `${this.name} makes a sound.`;
517 }
518 }
519
520 const animal = new Animal("๋๋ฌผ");
521 log(`new Animal("๋๋ฌผ")`);
522 log(`animal.speak(): "${animal.speak()}"`);
523
524 // ์์
525 log('\n--- ์์ ---');
526 class Dog extends Animal {
527 constructor(name, breed) {
528 super(name);
529 this.breed = breed;
530 }
531
532 speak() {
533 return `${this.name}(${this.breed})๊ฐ ๋ฉ๋ฉ ์ง์ต๋๋ค!`;
534 }
535
536 fetch() {
537 return `${this.name}๊ฐ ๊ณต์ ๊ฐ์ ธ์ต๋๋ค.`;
538 }
539 }
540
541 const dog = new Dog("๋ฉ๋ฉ์ด", "์ง๋๊ฐ");
542 log(`new Dog("๋ฉ๋ฉ์ด", "์ง๋๊ฐ")`);
543 log(`dog.speak(): "${dog.speak()}"`);
544 log(`dog.fetch(): "${dog.fetch()}"`);
545
546 // Getter์ Setter
547 log('\n--- Getter์ Setter ---');
548 class Circle {
549 constructor(radius) {
550 this._radius = radius;
551 }
552
553 get radius() {
554 return this._radius;
555 }
556
557 set radius(value) {
558 if (value > 0) {
559 this._radius = value;
560 }
561 }
562
563 get area() {
564 return Math.PI * this._radius ** 2;
565 }
566 }
567
568 const circle = new Circle(5);
569 log(`circle.radius: ${circle.radius}`);
570 log(`circle.area: ${circle.area.toFixed(2)}`);
571 circle.radius = 10;
572 log(`circle.radius = 10 ํ area: ${circle.area.toFixed(2)}`);
573
574 // Static ๋ฉ์๋
575 log('\n--- Static ๋ฉ์๋ ---');
576 class MathUtil {
577 static PI = 3.14159;
578
579 static add(a, b) {
580 return a + b;
581 }
582
583 static multiply(a, b) {
584 return a * b;
585 }
586 }
587
588 log(`MathUtil.PI: ${MathUtil.PI}`);
589 log(`MathUtil.add(3, 4): ${MathUtil.add(3, 4)}`);
590 log(`MathUtil.multiply(3, 4): ${MathUtil.multiply(3, 4)}`);
591
592 // Private ํ๋ (# ๋ฌธ๋ฒ, ES2022)
593 log('\n--- Private ํ๋ ---');
594 class BankAccount {
595 #balance = 0;
596
597 deposit(amount) {
598 this.#balance += amount;
599 return this.#balance;
600 }
601
602 getBalance() {
603 return this.#balance;
604 }
605 }
606
607 const account = new BankAccount();
608 log(`account.deposit(1000): ${account.deposit(1000)}`);
609 log(`account.deposit(500): ${account.deposit(500)}`);
610 log(`account.getBalance(): ${account.getBalance()}`);
611 // log(account.#balance); // Error: Private field
612}
613
614// ํ์ด์ง ๋ก๋ ์ ์๋ด ๋ฉ์์ง
615log('๋ฒํผ์ ํด๋ฆญํ์ฌ ๊ฐ ์น์
์ ์์ ๋ฅผ ์คํํ์ธ์.');