๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ฆฌ์ œ

[javascript] 1. JS๊ฐœ์š”์™€ ์‹คํ–‰ ํ™˜๊ฒฝ /๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ(Method Overloading) ๋ณธ๋ฌธ

๊ฐœ๋ฐœ์ž ํ˜ธ์†Œ์ธ/Front

[javascript] 1. JS๊ฐœ์š”์™€ ์‹คํ–‰ ํ™˜๊ฒฝ /๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ(Method Overloading)

๋ฆฌ์ œ๐Ÿซง 2026. 6. 24. 14:32

 

ํฌ๋ฆฝํŠธ ์–ธ์–ด์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ž€?

  • ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์ˆ˜ํ–‰๋˜๋„๋ก ํ•ด์ฃผ๋Š” ์šฉ๋„
  • ๋น„๊ต์  ์œ ์—ฐํ•˜๊ฒŒ ๋™์ž‘ํ•˜์—ฌ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€

  • ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์˜ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด
  • ๋ธŒ๋ผ์šฐ์ €์— ์—”์ง„(V8)์ด ํƒ‘์žฌ๋˜์–ด ์žˆ์–ด ๋ณ„๋„์˜ ์ปดํŒŒ์ผ ์—†์ด ๋™์ž‘
  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹: ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ์ฝ์–ด๊ฐ€๋ฉฐ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹
    • ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ…์ŠคํŠธ๋ฅผ ๋ถ„์„ํ•ด์„œ ์‹คํ–‰ → ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์•Œ๋ ค์คŒ

์›น์˜ 3์š”์†Œ์—์„œ JS์˜ ์—ญํ• 

  • HTML: ์›น ๋ฌธ์„œ์˜ ํฐ ํ‹€์„ ์žก์„ ๋•Œ ์‚ฌ์šฉ (DOM Tree ๊ตฌ์„ฑ)
  • CSS: HTML๋กœ ๊ตฌ์„ฑ๋œ DOM์— ๋‹ค์–‘ํ•œ ์Šคํƒ€์ผ ์†์„ฑ์„ ๋ถ€์—ฌ
  • JS: ์›น ๋ฌธ์„œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ๊ธฐ๋Šฅ์„ ์ •์˜ → HTML๋กœ ๊ตฌ์„ฑ๋œ DOM์„ ํŽธ์ง‘

js๋ฅผ ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. inline(์ธ๋ผ์ธ): ํƒœ๊ทธ ๋‚ด์—์„œ ๊ฐ„๋‹จํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ์‹คํ–‰๋˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. internal(๋‚ด๋ถ€): HTML ๋ฌธ์„œ ๋‚ด์— ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ์‹คํ–‰๋˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•
  3. external(์™ธ๋ถ€): ๋ณ„๋„์˜ .js ํŒŒ์ผ๋กœ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์‹คํ–‰๋˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•

inline

  • ํ‘œํ˜„๋ฒ•: <ํƒœ๊ทธ on์ด๋ฒคํŠธ๋ช…="ํ•ด๋‹น ์š”์†Œ์˜ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ์‹คํ–‰ํ•  ์ฝ”๋“œ">

 

 

internal

  • <script> ํƒœ๊ทธ ์˜์—ญ ์•ˆ์— ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ
  • <script> ํƒœ๊ทธ๋Š” head, body ์–ด๋””์—์„œ๊ฑด ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

 

 

 

external

  • ์™ธ๋ถ€์˜ .js ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์„œ ๋”ฐ๋กœ js ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ
  • head ์˜์—ญ์—์„œ <script src="./sample.js"></script>๋กœ ์—ฐ๊ฒฐ


 

๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ(Method Overloading)์€

์ž๋ฐ”์™€ ๊ฐ™์€ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์—์„œ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ.

๋‹จ์ˆœํžˆ ์ด๋ฆ„๋งŒ ๊ฐ™๋‹ค๊ณ  ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฐ˜๋“œ์‹œ ์•„๋ž˜์˜ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ด์•ผ ํ•œ๋‹ค.

๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ์˜ ํ•„์ˆ˜ ์กฐ๊ฑด

๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ์ด ์„ฑ๋ฆฝํ•˜๋ ค๋ฉด ๋ฉ”์„œ๋“œ ์ด๋ฆ„์€ ๊ฐ™์•„์•ผ ํ•˜๋ฉฐ, ํŒŒ๋ผ๋ฏธํ„ฐ(๋งค๊ฐœ๋ณ€์ˆ˜)์˜ ๊ตฌ์„ฑ์ด ๋‹ฌ๋ผ์•ผํ•œ๋‹ค.

  1. ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค.
  2. ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํƒ€์ž…(์ž๋ฃŒํ˜•)์ด ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค.
  3. ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ˆœ์„œ๊ฐ€ ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค.

์ฃผ์˜: ๋ฆฌํ„ด ํƒ€์ž…(๋ฐ˜ํ™˜ํ˜•)๋งŒ ๋‹ค๋ฅธ ๊ฒƒ์€ ์˜ค๋ฒ„๋กœ๋”ฉ ์กฐ๊ฑด์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ฆฌํ„ด ํƒ€์ž…์€ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ


ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์Šค์ฝ”ํ”„(Scope)๋ž€

'๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„'๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด, "์–ด๋””์„œ ์ด ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋Š”๊ฐ€?"๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์˜์—ญ

์Šค์ฝ”ํ”„๋ฅผ ์ดํ•ดํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ ์•ˆ์—์„œ ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ๊ฒน์ณ๋„ ์„œ๋กœ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

1. ์ „์—ญ ์Šค์ฝ”ํ”„ (Global Scope)

์ฝ”๋“œ์˜ ๊ฐ€์žฅ ๋ฐ”๊นฅ์ชฝ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜. ํŒŒ์ผ ์ „์ฒด ์–ด๋””์„œ๋“  ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

JavaScript
 
let globalName = "์ „์—ญ ๋ณ€์ˆ˜";

function print() {
    console.log(globalName); // ํ•จ์ˆ˜ ์•ˆ์—์„œ๋„ ์ž˜ ๋™์ž‘ํ•จ
}

2. ์ง€์—ญ ์Šค์ฝ”ํ”„ (Local/Block Scope)

ํŠน์ • ์ฝ”๋“œ ๋ธ”๋ก({ }) ์•ˆ์—์„œ๋งŒ ์œ ํšจํ•œ ๋ณ€์ˆ˜. ๋ธ”๋ก ๋ฐ–์—์„œ๋Š” ์ด ๋ณ€์ˆ˜๋ฅผ ์ ˆ๋Œ€ ๋ถ€๋ฅผ ์ˆ˜ ์—†๋‹ค.

JavaScript
 
function localFunction() {
    let localName = "์ง€์—ญ ๋ณ€์ˆ˜";
    console.log(localName); // ํ•จ์ˆ˜ ์•ˆ์—์„œ๋Š” ๊ฐ€๋Šฅ
}

// console.log(localName); // ์—๋Ÿฌ! ํ•จ์ˆ˜ ๋ฐ–์—์„œ๋Š” ์ ‘๊ทผ ๋ถˆ๊ฐ€

์Šค์ฝ”ํ”„์˜ ํ•ต์‹ฌ ๊ทœ์น™

  1. ์•ˆ์ชฝ์—์„œ ๋ฐ”๊นฅ์ชฝ์œผ๋กœ: ์•ˆ์ชฝ ์Šค์ฝ”ํ”„๋Š” ๋ฐ”๊นฅ์ชฝ ์Šค์ฝ”ํ”„์˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ˜๋Œ€๋กœ, ๋ฐ”๊นฅ์ชฝ ์Šค์ฝ”ํ”„์—์„œ๋Š” ์•ˆ์ชฝ ์Šค์ฝ”ํ”„์˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  2. ๊ฐ€๊นŒ์šด ๊ฒƒ์ด ์šฐ์„ : ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ๊ฒน์นœ๋‹ค๋ฉด, ํ˜„์žฌ ๋‚ด๊ฐ€ ์žˆ๋Š” ๊ณณ์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์Šค์ฝ”ํ”„์— ์ •์˜๋œ ๋ณ€์ˆ˜๋ฅผ ๋จผ์ € ์‚ฌ์šฉํ•œ๋‹ค.
JavaScript
 
let name = "๋ฐ”๊นฅ์ชฝ";

function outer() {
    let name = "์•ˆ์ชฝ"; // ๋ฐ”๊นฅ์ชฝ name์„ ๊ฐ€๋ฆผ (Shadowing)
    console.log(name); // "์•ˆ์ชฝ" ์ถœ๋ ฅ
}

์™œ ์Šค์ฝ”ํ”„๊ฐ€ ์ค‘์š”ํ•œ๊ฐ€์š”?

  • ์ด๋ฆ„ ์ถฉ๋Œ ๋ฐฉ์ง€: ์Šค์ฝ”ํ”„๊ฐ€ ์—†๋‹ค๋ฉด ๋ชจ๋“  ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋‹ค ๋‹ค๋ฅด๊ฒŒ ์ง€์–ด์•ผ ํ•ด์„œ ์ฝ”๋”ฉ์ด ๋งค์šฐ ํž˜๋“ค์–ด์ง
  • ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ: ์‚ฌ์šฉ์ด ๋๋‚œ ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ์Šค์ฝ”ํ”„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์ˆœ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋  ์ˆ˜ ์žˆ์–ด ํšจ์œจ์ 
  • ๋ณด์•ˆ: ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•˜๋ฉด ์•ˆ ๋˜๋Š” ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ์Šค์ฝ”ํ”„ ์•ˆ์— ๊ฐ€๋‘์–ด ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋””/

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•™์Šต ์ค‘์— let๊ณผ const๊ฐ€ ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„(์ค‘๊ด„ํ˜ธ { } ๋‹จ์œ„)๋ฅผ ๋”ฐ๋ฅธ๋‹ค๋Š” ์ ์€ ๋งค์šฐ ์ค‘์š”. ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์ค‘๊ด„ํ˜ธ ๋ฐ–์œผ๋กœ๋Š” ๋‚˜๊ฐˆ ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.