๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽจ Frontend

๐Ÿ“˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ๊ธฐ๋ณธ ๋‹ค์ง€๊ธฐ - Part 1

by hyebin (Helia) 2025. 4. 24.
๋ฐ˜์‘ํ˜•

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ๋ณ€์ˆ˜, ์Šค์ฝ”ํ”„, ํƒ€์ž…, ์กฐ๊ฑด๋ฌธ๊นŒ์ง€ ๊ธฐ์ดˆ ์™„์ „ ์ •๋ณต!


โœ… ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript, JS)๋Š” ์›นํŽ˜์ด์ง€์— ๋™์ ์ธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

HTML์ด ๊ตฌ์กฐ, CSS๊ฐ€ ์Šคํƒ€์ผ์„ ๋‹ด๋‹นํ•œ๋‹ค๋ฉด, JS๋Š” ๊ธฐ๋Šฅ๊ณผ ์ƒํ˜ธ์ž‘์šฉ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํŒ์—… ๋„์šฐ๊ธฐ
  • ๋กœ๊ทธ์ธ ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
  • ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ๋ฐ›์•„์™€ ํŽ˜์ด์ง€์— ๋ Œ๋”๋ง
  • ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ ๋“ฑ

ํ˜„์žฌ๋Š” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋„˜์–ด Node.js ํ™˜๊ฒฝ์—์„œ๋„ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ๊นŒ์ง€ ๊ฐ€๋Šฅํ•  ์ •๋„๋กœ ๋ฒ”์šฉ์„ฑ์ด ๋„“์–ด์š”.

// ๊ฐ„๋‹จํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ˆ์‹œ
console.log("Hello, World!");  // ์ฝ˜์†”์— ํ…์ŠคํŠธ ์ถœ๋ ฅ
document.getElementById("demo").innerHTML = "ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!";  // HTML ์š”์†Œ ๋‚ด์šฉ ๋ณ€๊ฒฝ

โœ… ๋ณ€์ˆ˜ ์„ ์–ธ (var, let, const)๊ณผ ์Šค์ฝ”ํ”„

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„์ด ๋ฐ”๋กœ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ var, let, const ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿ”น var (ES5 ์ด์ „ ๋ฐฉ์‹)

var name = 'Tom';
var name = 'Jane';  // ์žฌ์„ ์–ธ ๊ฐ€๋Šฅ
name = 'Mike';      // ์žฌํ• ๋‹น ๊ฐ€๋Šฅ
  • ์žฌ์„ ์–ธ ๊ฐ€๋Šฅ, ์žฌํ• ๋‹น ๊ฐ€๋Šฅ
  • ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„
  • ํ˜ธ์ด์ŠคํŒ… ๋ฐœ์ƒ (์ดˆ๊ธฐ๊ฐ’ ์—†์ด undefined)

๐Ÿ”น let (ES6 ์ดํ›„ ๊ถŒ์žฅ)

let age = 30;
// let age = 31;  // โŒ ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ
age = 31;        // โœ… ์žฌํ• ๋‹น ๊ฐ€๋Šฅ
  • ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€, ์žฌํ• ๋‹น ๊ฐ€๋Šฅ
  • ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„
  • ํ˜ธ์ด์ŠคํŒ…์€ ๋˜์ง€๋งŒ ์ดˆ๊ธฐํ™” ์ „ ์ ‘๊ทผ ์‹œ ์—๋Ÿฌ

๐Ÿ”น const (์ƒ์ˆ˜ ์„ ์–ธ)

const pi = 3.14;
// pi = 3.141592;  // โŒ ์žฌํ• ๋‹น ๋ถˆ๊ฐ€๋Šฅ

// ๊ฐ์ฒด์˜ ๋‚ด์šฉ์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
const person = { name: 'John' };
person.name = 'Jane';  // โœ… ๊ฐ€๋Šฅ
  • ์žฌ์„ ์–ธ, ์žฌํ• ๋‹น ๋ชจ๋‘ ๋ถˆ๊ฐ€
  • ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™” ํ•„์ˆ˜

๐Ÿ“Œ ์Šค์ฝ”ํ”„๋ž€?

๋ณ€์ˆ˜๊ฐ€ ์–ด๋””์„œ ์œ ํšจํ•œ๊ฐ€? ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์˜์—ญ

function example() {
  let local = 'hello';
}
console.log(local); // โŒ ์˜ค๋ฅ˜: local is not defined
์Šค์ฝ”ํ”„ ์œ ํ˜• ์„ค๋ช… ์˜ˆ์‹œ
๋ธ”๋ก ์Šค์ฝ”ํ”„ {} ์ค‘๊ด„ํ˜ธ ๋‚ด์—์„œ๋งŒ ์œ ํšจ let, const
ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์œ ํšจ var
์ „์—ญ ์Šค์ฝ”ํ”„ ์–ด๋””์„œ๋“  ์ ‘๊ทผ ๊ฐ€๋Šฅ ํ•จ์ˆ˜/๋ธ”๋ก ์™ธ๋ถ€์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜

โœ… ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ์—ฐ์‚ฐ์ž

๐Ÿ”น ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ฃผ์š” ๋ฐ์ดํ„ฐ ํƒ€์ž…

ํƒ€์ž… ์˜ˆ์‹œ ์„ค๋ช…
Number 1, 3.14, -100 ์ •์ˆ˜์™€ ์†Œ์ˆ˜์  ์ˆซ์ž
String "Hello", 'World' ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ
Boolean true, false ๋…ผ๋ฆฌ๊ฐ’
Null null ์˜๋„์ ์ธ ๋นˆ ๊ฐ’
Undefined undefined ์„ ์–ธ๋งŒ ํ•˜๊ณ  ๊ฐ’ ์—†์Œ
Object { key: "value" } ํ‚ค-๊ฐ’ ์Œ์˜ ์ง‘ํ•ฉ
Array [1, 2, 3] ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๊ฐ’์˜ ์ง‘ํ•ฉ
Function function() {} ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ๋ฌถ์Œ
Symbol Symbol('id') ES6+, ๊ณ ์œ ํ•˜๊ณ  ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’
BigInt 123n ES2020+, ํฐ ์ •์ˆ˜ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉ
let a = 10;
let b = "10";
console.log(a == b);  // true (๋А์Šจํ•œ ๋น„๊ต, ํƒ€์ž… ๋ณ€ํ™˜ ํ›„ ๋น„๊ต)
console.log(a === b); // false (์—„๊ฒฉํ•œ ๋น„๊ต, ํƒ€์ž…๊นŒ์ง€ ๋น„๊ต)

// ํƒ€์ž… ํ™•์ธํ•˜๊ธฐ
console.log(typeof 42);           // "number"
console.log(typeof "Hello");      // "string"
console.log(typeof true);         // "boolean"
console.log(typeof { age: 30 });  // "object"
console.log(typeof [1, 2, 3]);    // "object" (๋ฐฐ์—ด๋„ ๊ฐ์ฒด)

 

๐Ÿ”น ์—ฐ์‚ฐ์ž

์ข…๋ฅ˜ ์—ฐ์‚ฐ์ž ์˜ˆ์‹œ ์„ค๋ช…
์‚ฐ์ˆ  +, -, *, /, %, ** 5 + 2 → 7 ์‚ฌ์น™์—ฐ์‚ฐ
๋น„๊ต ==, ===, !=, !==, >, <, >=, <= 5 > 3 → true ๊ฐ’ ๋น„๊ต
๋…ผ๋ฆฌ &&, ||, ! true && false → false AND, OR, NOT
ํ• ๋‹น =, +=, -=, *=, /= x += 5 (x = x + 5) ๋ณ€์ˆ˜์— ๊ฐ’ ๋Œ€์ž…
์‚ผํ•ญ ์กฐ๊ฑด ? ์ฐธ๊ฐ’ : ๊ฑฐ์ง“๊ฐ’ age >= 18 ? '์„ฑ์ธ' : '๋ฏธ์„ฑ๋…„์ž' ์กฐ๊ฑด์— ๋”ฐ๋ฅธ ๊ฐ’ ๋ฐ˜ํ™˜
typeof typeof typeof "hello" ๋ฐ์ดํ„ฐ ํƒ€์ž… ํ™•์ธ
// ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž ์˜ˆ์‹œ
let sum = 10 + 5;      // 15
let power = 2 ** 3;    // 8 (2์˜ 3์Šน)

// ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž ์˜ˆ์‹œ
let isValid = (age > 18) && (country === 'Korea');  // ๋‘˜ ๋‹ค true๋ฉด true

// ์‚ผํ•ญ ์—ฐ์‚ฐ์ž ์˜ˆ์‹œ
let status = (score >= 60) ? 'ํ•ฉ๊ฒฉ' : '๋ถˆํ•ฉ๊ฒฉ';

โœ… ์กฐ๊ฑด๋ฌธ & ๋ฐ˜๋ณต๋ฌธ

๐Ÿ”น if / else ๋ฌธ

let age = 18;
if (age >= 20) {
  console.log('์„ฑ์ธ์ž…๋‹ˆ๋‹ค');
} else if (age >= 17) {
  console.log('๊ณ ๋“ฑํ•™์ƒ์ž…๋‹ˆ๋‹ค');
} else {
  console.log('๋ฏธ์„ฑ๋…„์ž์ž…๋‹ˆ๋‹ค');
}

 

๐Ÿ”น switch ๋ฌธ

let day = 2;
switch (day) {
  case 0: 
    console.log('์ผ์š”์ผ'); 
    break;
  case 1: 
    console.log('์›”์š”์ผ'); 
    break;
  case 2: 
    console.log('ํ™”์š”์ผ'); 
    break;
  default: 
    console.log('๊ธฐํƒ€');
}

 

๐Ÿ”น for ๋ฐ˜๋ณต๋ฌธ

// ๊ธฐ๋ณธ for ๋ฐ˜๋ณต๋ฌธ
for (let i = 0; i < 5; i++) {
  console.log(i); // 0, 1, 2, 3, 4 ์ถœ๋ ฅ
}

// ๋ฐฐ์—ด์˜ for...of ๋ฐ˜๋ณต๋ฌธ (ES6+)
const fruits = ['์‚ฌ๊ณผ', '๋ฐ”๋‚˜๋‚˜', '๋”ธ๊ธฐ'];
for (const fruit of fruits) {
  console.log(fruit); // ์‚ฌ๊ณผ, ๋ฐ”๋‚˜๋‚˜, ๋”ธ๊ธฐ ์ถœ๋ ฅ
}

// ๊ฐ์ฒด์˜ for...in ๋ฐ˜๋ณต๋ฌธ
const person = { name: 'John', age: 30, job: 'developer' };
for (const key in person) {
  console.log(`${key}: ${person[key]}`);
}

๐Ÿ”น while / do-while ๋ฐ˜๋ณต๋ฌธ

// while ๋ฐ˜๋ณต๋ฌธ
let i = 0;
while (i < 3) {
  console.log(i);  // 0, 1, 2 ์ถœ๋ ฅ
  i++;
}

// do-while ๋ฐ˜๋ณต๋ฌธ (์กฐ๊ฑด์ด ๊ฑฐ์ง“์ด์–ด๋„ ์ตœ์†Œ 1๋ฒˆ์€ ์‹คํ–‰)
let j = 0;
do {
  console.log(j);  // ์ตœ์†Œ ํ•œ ๋ฒˆ์€ ์ถœ๋ ฅ๋จ
  j++;
} while (j < 3);

โœจ ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ

ํ•ญ๋ชฉ ํ•ต์‹ฌ ์š”์•ฝ
๋ณ€์ˆ˜ ์„ ์–ธ var๋ณด๋‹ค let๊ณผ const๋ฅผ ์‚ฌ์šฉํ•˜์ž
์Šค์ฝ”ํ”„ let/const๋Š” ๋ธ”๋ก, var๋Š” ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„
๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ถˆ๋ฆฐ ๋“ฑ ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ ์ฐธ์กฐ ํƒ€์ž… ์ˆ™์ง€
ํƒ€์ž… ๋น„๊ต ==๋ณด๋‹ค ===๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ž…๊นŒ์ง€ ์ •ํ™•ํžˆ ๋น„๊ต
์กฐ๊ฑด๋ฌธ if, switch๋กœ ํ๋ฆ„ ์ œ์–ด
๋ฐ˜๋ณต๋ฌธ for, while, for...of, for...in์œผ๋กœ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌ

 

๋‹ค์Œ ๊ธ€ Part 2์—์„œ๋Š”

๐Ÿ‘‰ ํ•จ์ˆ˜ ์„ ์–ธ์‹๊ณผ ํ‘œํ˜„์‹, ๊ฐ์ฒด/๋ฐฐ์—ด ๋‹ค๋ฃจ๊ธฐ, DOM ์กฐ์ž‘, this์™€ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ, ํ˜ธ์ด์ŠคํŒ… ๋“ฑ

์‹ค๋ฌด์—์„œ ์ง„์งœ ๋งŽ์ด ์“ฐ์ด๋Š” ๋‚ด์šฉ๋“ค์„ ๋‹ค๋ฃฐ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค!

๋ฐ˜์‘ํ˜•