๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Web/JavaScript

JavaScript ๊ธฐ๋ณธ ๋ฐ ์‚ฌ์šฉํ•˜๊ธฐ

๐Ÿ“’ ์™œ? (์‚ฌ์šฉ ์ด์œ )

โ—ผ JavaScript๋ฅผ ์“ฐ๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” HTML ์กฐ์ž‘์ด ๋ชฉ์ ์ด๋‹ค.

โ—ผ ๊ทธ ์™ธ๋กœ, ์„œ๋ฒ„์™€ ํ†ต์‹  ๊ฐ€๋Šฅ, ํด๋ฆญ ๋ฐ ํƒ€์ดํ•‘ ๊ฐ์ง€, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ, ์ž๋ฃŒ ๋‹ค๋ฃจ๊ธฐ ๋“ฑ์˜ ๋ชฉ์ ์œผ๋กœ๋„ ์‚ฌ์šฉ๋œ๋‹ค.


๐Ÿ“’ JavaScript

โ—ผ JavaScript๋Š” Call Stack์ด ํ•˜๋‚˜๋กœ, single thread๋กœ ๋™์ž‘ํ•œ๋‹ค.

โ—ผ event loop๋ฅผ ์ด์šฉํ•ด์„œ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋™์‹œ์„ฑ์„ ์ง€์›ํ•˜๋Š”๋ฐ, ์ด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์—์„œ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋ธŒ๋ผ์šฐ์ €๋‚˜ node.js์—์„œ ์ง€์›๋œ๋‹ค.

 

โœ” JavaScript ๊ตฌ์กฐ

โ—ผ Heap & Call Stack: V8๊ณผ ๊ฐ™์€ JavaScript ์—”์ง„์˜ ๊ตฌ์„ฑ์š”์†Œ์ด๋‹ค.

   โ— Heap: JavaScript์˜ ๊ฐ์ฒด์˜ ์ฃผ์†Œ ๊ฐ’, ๊ตฌ์กฐํ™”๋˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์Œ“์ธ๋‹ค.

   โ— Call Stack: ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋“ค์ด ์Œ“์ธ๋‹ค.

โ—ผ Web API: ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณต๋˜๋Š” API, ๋น„๋™๊ธฐ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ Task Queue๋กœ ๋„˜๊ฒจ์ค€๋‹ค.

โ—ผ Task Queue: Call Stack์ด ๋น„์–ด ์žˆ์–ด์•ผ ์‹คํ–‰๋˜๋ฉฐ, ๊ทธ ์ „๊นŒ์ง€๋Š” Event Loop๋ฅผ ๋ˆ๋‹ค.

 

โœ” JavaScript ๋™์ž‘ ๊ณผ์ •

setTimeout(() => console.log(20), 1000);
console.log(30);

โ—ผ ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๋•Œ, ์‹คํ–‰ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

โ—ผ setTimeout function์ด Call Stack์— ๋“ค์–ด๊ฐ”๋‹ค๊ฐ€, Web API๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค.

โ—ผ 1์ดˆ ํ›„, Web API์—์„œ ์ฝœ๋ฐฑ๋˜์–ด Task Queue์—์„œ ๋ฐ›๋Š”๋‹ค.

โ—ผ console.log(30);์ด Call Stack์— ๋“ค์–ด๊ฐ€์„œ ์‹คํ–‰๋œ๋‹ค.

โ—ผ Call Stack์ด ๋น„์–ด Task Queue์˜ console.log(20)์ด ์‹คํ–‰๋œ๋‹ค.


๐Ÿ“’ JavaScript ๋ฌธ๋ฒ•

โœ” ๋ณ€์ˆ˜

โ— var ํ‚ค์›Œ๋“œ

var a = 10;
var a = 100;
function test() {
  var b = 10;
}
console.log(a); // 100
console.log(b); // undefined

โ—ผ var ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ var ํ‚ค์›Œ๋“œ๋Š” ์ค‘๋ณต ์‚ฌ์šฉ์„ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š์•„์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ var ํ‚ค์›Œ๋“œ์˜ ์Šค์ฝ”ํ”„๋Š” ํ•จ์ˆ˜์˜ ์ฝ”๋“œ ๋ธ”๋ก์œผ๋กœ, ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์„ ์–ธ ์‹œ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์„ค์ •๋œ๋‹ค.

 

โ— let ํ‚ค์›Œ๋“œ

โ—ผ let ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ let ํ‚ค์›Œ๋“œ๋Š” ์ค‘๋ณต ์‚ฌ์šฉ์„ ๊ฒ€์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋™์ผํ•œ ๋ณ€์ˆ˜๋ช…์œผ๋กœ ์‚ฌ์šฉ ์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

โ—ผ let ํ‚ค์›Œ๋“œ์˜ ์Šค์ฝ”ํ”„๋Š” ๋ธ”๋ก ๋ ˆ๋ฒจ์ด๋‹ค.

โ—ผ var ํ‚ค์›Œ๋“œ๋ณด๋‹ค let ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

โ— const ํ‚ค์›Œ๋“œ

โ—ผ const ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ ๋ณ€์ˆ˜์˜ ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

โ—ผ const ํ‚ค์›Œ๋“œ์˜ ์Šค์ฝ”ํ”„๋Š” ๋ธ”๋ก ๋ ˆ๋ฒจ์ด๋‹ค.

โœ” ํ˜ธ์ด์ŠคํŒ…

console.log(foo); // undefined
var foo = 10;
console.log(foo); // 10

console.log(bar); // ReferenceError
let bar = 10;

โ—ผ var ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋‚˜ function์„ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ•ด๋‹น ์Šค์ฝ”ํ”„ ์„ ๋‘๋กœ ์˜ฎ๊ธด ๊ฒƒ ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ํŠน์„ฑ์„ ๋งํ•œ๋‹ค.

โ—ผ var ํ‚ค์›Œ๋“œ์˜ ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”(undefined)๊ฐ€ console.log(foo) ์ด์ „์— ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ€์ˆ˜ ์„ ์–ธ ์ „ undefined๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , let ํ‚ค์›Œ๋“œ๋Š” ํ˜ธ์ด์ŠคํŒ…์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•„ RferenceError๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

โœ” function

function {์ด๋ฆ„}() {
}

โ—ผ ๊ธด ์ฝ”๋“œ๋ฅผ ์งง์€ ๋‹จ์–ด๋กœ ์ถ•์•ฝํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ {์ด๋ฆ„}()์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋Š˜์–ด๋‚œ๋‹ค.

โ—ผ function ์ž‘๋ช…์€ ๊ตฌ์ฒด์  + ์˜์–ด + ์‹œ์ž‘์€ ์†Œ๋ฌธ์ž + camelCase๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

โœ” if-else

โ—ผ ์กฐ๊ฑด๋ฌธ

 

โœ” for

for (let i = 0; i < ํšŸ์ˆ˜; i++) {
}

โ—ผ ๋ฐ˜๋ณต๋ฌธ

 

โœ” ์ค‘์š”ํ•œ ๋น„๊ต ์—ฐ์‚ฐ์ž

1 == '1' // true
1 === '1' // false

โ—ผ == (๋Š์Šจํ•œ ๋น„๊ต, ๊ฐ’๋งŒ ๊ฐ™์œผ๋ฉด ๋œ๋‹ค.)

โ—ผ === (์—„๊ฒฉํ•œ ๋น„๊ต, ํƒ€์ž…๊ณผ ๊ฐ’์ด ๊ฐ™์•„์•ผ ํ•œ๋‹ค.)

 

โœ” ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ธฐ

console.log("abc".includes("a")); // true
console.log("abc".includes("ab")); // true

โ—ผ includes ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ฌธ์ž, ๋ฌธ์ž์—ด์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ ํ•œ๊ธ€์ด ์กด์žฌํ•˜๋Š”์ง€, ์˜์–ด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ๋“ฑ์˜ ์„ธ๋ถ€์ ์ธ ๊ฒ€์‚ฌ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

 

โœ” ์ •๊ทœ์‹ ๊ฒ€์‚ฌ

console.log(/a/.test("abcd")); // true

// ๋ฒ”์œ„ ์ง€์ •
console.log(/[a-z]/.test("abcd")); // a๋ถ€ํ„ฐ z๊นŒ์ง€ 1๊ฐœ๊ฐ€ ํฌํ•จ๋˜์–ด ๊ฒ€์‚ฌ (true)
console.log(/[a-zA-Z]/.test("abcd")); // ์•„๋ฌด ์•ŒํŒŒ๋ฒณ์ด๋‚˜ 1๊ฐœ๊ฐ€ ํฌํ•จ๋˜์–ด ๊ฒ€์‚ฌ (true)
console.log(/[ใ„ฑ-ใ…Ž๊ฐ€-ํžฃ]/.test("abcd")); // ์•„๋ฌด ํ•œ๊ธ€์ด๋‚˜ 1๊ฐœ๊ฐ€ ํฌํ•จ๋˜์–ด ๊ฒ€์‚ฌ (false)

// ํ‘œํ˜„์‹
console.log(/\S/.test("abcd")); // ์•„๋ฌด ๋ฌธ์ž๋‚˜ 1๊ฐœ๊ฐ€ ํฌํ•จ๋˜์–ด ๊ฒ€์‚ฌ (true)
console.log(/^a/.test("abcd")); // a๋กœ ์‹œ์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์‚ฌ (true)
console.log(/a|b/.test("abcd")); // a ๋˜๋Š” b๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์‚ฌ (true)

// ์ด๋ฉ”์ผ ๊ฒ€์‚ฌ ์ •๊ทœ์‹
/[a-zA-Z]+@[a-zA-Z]+\.[a-zA-Z]+/.test("aasdasd@casehc.com") // true

โ—ผ /{์ •๊ทœ์‹}/.test({๊ฒ€์‚ฌํ•  ๋ฌธ์ž/๋ฌธ์ž์—ด})์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ ์ด๋ฉ”์ผ ๊ฒ€์‚ฌ ์ •๊ทœ์‹์—์„œ \S๋Š” ํ•œ ๊ธ€์ž๋งŒ ๊ฒ€์‚ฌํ•˜๋ฏ€๋กœ +๋ฅผ ๋ถ™์—ฌ์„œ ๋ฐ˜๋ณต ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  .์€ ์ •๊ทœ์‹ ๋ฌธ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์— \๋ฅผ ์•ž์— ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

โœ” ๋ฐ˜์˜ฌ๋ฆผ ํ•˜๊ธฐ

console.log((5555 * 1.1).toFixed(2)); // 6110.50

โ—ผ toFixed({๋ฐ˜์˜ฌ๋ฆผ์ด ์ ์šฉ๋˜์–ด ๋‚จ์€ ์†Œ์ˆ˜์  ์ž๋ฆฌ ์ˆ˜})๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜์˜ฌ๋ฆผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ” ์—ฐ์‚ฐ์ž ํŠน์ง•

console.log('1' + 1) // '11'

โ—ผ ์ˆซ์ž 1๊ณผ ๋ฌธ์ž 1์„ ๋”ํ•˜๋ฉด "11" ๋ฌธ์ž์—ด์ด ๋œ๋‹ค.

 

โœ” Array

let carName = "์†Œ๋‚˜ํƒ€";
let price = 50000;
let carColor = "white";

// Array ์‚ฌ์šฉํ•˜๊ธฐ
let car = ["์†Œ๋‚˜ํƒ€", 50000, "white"];

โ—ผ Array๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ž๋ฃŒ๋ฅผ ๋ณ€์ˆ˜ ํ•˜๋‚˜์— ์ €์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค.

โ—ผ ์ž๋ฃŒํ˜•์€ string, number ์ƒ๊ด€ ์—†์ด ํ•œ ๋ฒˆ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

โ—ผ car[0]์€"์†Œ๋‚˜ํƒ€", car[1]์€ 50000, car[2]์€ "white"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

โ—ผ Array์— ์ž๋ฃŒ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ car[3] = {์›ํ•˜๋Š” ๊ฐ’}

โ—ผ Array์—์„œ ์ž๋ฃŒ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ car[2] = "black"

โ—ผ ์ˆœ์„œ๊ฐ€ ์กด์žฌํ•˜์—ฌ, car.sort()๋กœ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•˜๊ณ  car.slice({์‹œ์ž‘ Idx}, {์ข…๋ฃŒ Idx})๋กœ ์ค‘๊ฐ„์— ๋ฐฐ์—ด์„ ์ž๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

 

โœ” Object

let carName = "์†Œ๋‚˜ํƒ€";
let price = 50000;
let carColor = "white";

// Object ์‚ฌ์šฉํ•˜๊ธฐ
let car = {
  name: "์†Œ๋‚˜ํƒ€",
  price: 50000,
  color: "white",
};

โ—ผ Object์— ๊ฐ’์„ ๋„ฃ๊ธฐ ์œ„ํ•ด์„œ๋Š” {}์„ ์‚ฌ์šฉํ•˜๊ณ , {key}: {value}๋กœ ๊ฐ’์„ ๊ธฐ์ž…ํ•œ๋‹ค.

โ—ผ car.name์€ "์†Œ๋‚˜ํƒ€", car.price๋Š” 50000, car.color๋Š” "white"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

โ—ผ car์˜ ์ƒ‰๊น”์„ "black"์œผ๋กœ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” car.color = "black"์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ car.{key} = {value}๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

โœ” ์ •๋ ฌํ•˜๊ธฐ

let arr = [7, 4, 6, 30, 20];
arr.sort() // 20, 30, 4, 6, 7

โ—ผ arr.sort()์˜ ๊ฒฐ๊ณผ๋กœ 4, 6, 7, 20, 30์„ ๊ธฐ๋Œ€ํ–ˆ์ง€๋งŒ, 20, 30, 4, 6, 7 ์ˆœ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š”๋ฐ, ์ด๋Š” sort() ์‚ฌ์šฉ ์‹œ string ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

let arr = [7, 4, 6, 30, 20];
arr.sort((a, b) => {
  return a - b;
}); // 4, 6, 7, 20, 30

โ—ผ compareFunction์„ ์ •์˜ํ•ด์„œ ์ˆซ์ž ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง€๋„๋ก ํ•œ๋‹ค.

 

// ๋ฌธ์ž์—ด ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ 
// 1๋ฒˆ
let strs = ["b", "a", "c"];
strs.sort().reverse();
console.log(strs) // "c", "b", "a"

// 2๋ฒˆ
let strs = ["b", "a", "c"];
strs.sort((a, b) => {
  if (a < b) {
    return 1;
  } else if (a > b) {
    return -1;
  } else {
    return 0;
  }
});
console.log(strs);

โ—ผ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์€ ์œ„์™€ ๊ฐ™์ด 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.


๐Ÿ“’ Web Browser API ์‚ฌ์šฉํ•˜๊ธฐ

โœ” ์›ํ•˜๋Š” ํƒœ๊ทธ ์ฐพ๊ธฐ

โ—ผ document.getElementById("{Id ๊ฐ’}"): Id ๊ฐ’์œผ๋กœ ํ•ด๋‹นํ•˜๋Š” ํƒœ๊ทธ ์ฐพ๊ธฐ, Id ๊ฐ’์€ ๊ณ ์œ ํ•˜๋ฏ€๋กœ id ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ํƒœ๊ทธ 1๊ฐœ ๋ฐ˜ํ™˜

โ—ผ document.getElementsByClassName("{Class ๊ฐ’}"): Class ๊ฐ’์œผ๋กœ ํ•ด๋‹นํ•˜๋Š” ํƒœ๊ทธ ์ฐพ๊ธฐ, ๋™์ผํ•œ Class ๊ฐ’์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์–ด ๋’ค์— [{์ธ๋ฑ์Šค ๊ฐ’}]์„ ๋ถ™์—ฌ HTML ๋งจ ์œ„์—์„œ๋ถ€ํ„ฐ ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ document.querySelector("#{Id ๊ฐ’}"): Id ๊ฐ’์œผ๋กœ ํ•ด๋‹นํ•˜๋Š” ํƒœ๊ทธ ์ฐพ๊ธฐ, HTML ๋งจ ์œ„์—์„œ๋ถ€ํ„ฐ ์ฒซ ๋ฒˆ์งธ ํƒœ๊ทธ๋ฅผ ์ฐพ๋Š”๋‹ค.

โ—ผ document.querySelector(".{Class ๊ฐ’}"): Class ๊ฐ’์œผ๋กœ ํ•ด๋‹นํ•˜๋Š” ํƒœ๊ทธ ์ฐพ๊ธฐ, HTML ๋งจ ์œ„์—์„œ๋ถ€ํ„ฐ ์ฒซ ๋ฒˆ์งธ ํƒœ๊ทธ๋ฅผ ์ฐพ๋Š”๋‹ค.

โ—ผ document.querySelectorAll(".{Class ๊ฐ’}"): Class ๊ฐ’์œผ๋กœ ํ•ด๋‹นํ•˜๋Š” ํƒœ๊ทธ ์ฐพ๊ธฐ, ๋’ค์— [{์ธ๋ฑ์Šค ๊ฐ’}]์„ ๋ถ™์—ฌ HTML ๋งจ ์œ„์—์„œ๋ถ€ํ„ฐ ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ ๊ทธ๋ƒฅ ๊ฐ’์€ ํƒœ๊ทธ, # ->  id, . -> class๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

โœ” Timeout

setTimeout(() => {
  document.getElementById("5-alert").style.display = "none";
}, 5000);

โ—ผ setTimeout({handler}, {milliSec})์„ ์‚ฌ์šฉํ•˜์—ฌ, milliSec ํ›„ ์‹คํ–‰ํ•  handler๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ "5-alert"๋ผ๋Š” Id๋ฅผ ๊ฐ€์ง„ ํƒœ๊ทธ์˜ Css์— 5์ดˆ ํ›„, display: none์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

 

โœ” Interval

setInterval(() => {
  console.log("์•ˆ๋…•");
}, 1000);

โ—ผ setInterval({handler}, {milliSec})์„ ์‚ฌ์šฉํ•˜์—ฌ, milliSec ๋งˆ๋‹ค ์‹คํ–‰ํ•  handler๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ 1์ดˆ๋งˆ๋‹ค "์•ˆ๋…•"์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

โœ” alert

โ—ผ alert({message})๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์•Œ๋ฆผ์ฐฝ์„ ๋„์šธ ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“’ JavaScript๋กœ UI ๋งŒ๋“ค๊ธฐ

1.  HTML/CSS๋กœ ๋ฏธ๋ฆฌ ๋””์ž์ธํ•œ๋‹ค.

2. ํ•„์š”ํ•  ๋•Œ ๋ณด์—ฌ์ฃผ๋Š” JavaScript ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.


๐Ÿ“’ HTML ์•ˆ์—์„œ JavaScript ์‚ฌ์šฉํ•˜๊ธฐ

โœ” ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

<body>
  <h1 id="hello">์•ˆ๋…•ํ•˜์„ธ์š”</h1>

  <script>
    document.getElementById("hello").innerHTML = "์•ˆ๋…•";
    document.getElementById("hello").style.fontSize = "50px";
  </script>
</body>

โ—ผ script ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

โ—ผ h1 ํƒœ๊ทธ์˜ "์•ˆ๋…•ํ•˜์„ธ์š”"๋ฅผ "์•ˆ๋…•"์œผ๋กœ ๋ฐ”๊พธ๊ณ  ํฐํŠธ ํฌ๊ธฐ๋ฅผ 50px๋กœ ๋ฐ”๊พผ๋‹ค.

๐Ÿ’ฅ script ํƒœ๊ทธ๋Š” ์•„๋ž˜์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. (HTML ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ, ์œ„์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— HTML ํƒœ๊ทธ๋ฅผ ๋ฏธ๋ฆฌ ์ฝ์–ด๋†”์•ผ JavaScript๊ฐ€ ์ž˜ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)

โœ” eventListener ์‚ฌ์šฉํ•˜๊ธฐ

/* addEventListener ์‚ฌ์šฉ ์ „ */
<button
  class="alter-btn"
  onclick="alterBnt('none')"
>

/* addEventListener ์‚ฌ์šฉ ํ›„ */
<button
  id="close"
>
<script>
  document
  .getElementById("close")
  .addEventListener(
    "click",
    () => (document.getElementById("alter").style.display = "none")
  );
</script>

โ—ผ addEventListener({type}, {function})๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋‹ค. event์— ๋Œ€ํ•œ ๊ฐ์‹œ์ž ์—ญํ• ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

โ—ผ event๋Š” ํด๋ฆญ, ํ‚ค์ž…๋ ฅ, ์Šคํฌ๋กค, ๋“œ๋ž˜๊ทธ  ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์˜๋ฏธํ•œ๋‹ค. (click, keydown, scroll, mouseover...)

โ—ผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ 2๊ฐœ ์ž…๋ ฅํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. ('type', 'function')

โ—ผ type์ด "click"์ผ ๊ฒฝ์šฐ, ํ•ด๋‹น ํƒœ๊ทธ๋ฅผ ํด๋ฆญํ•˜๋ฉด event๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

โ—ผ type์ด "input"์ผ ๊ฒฝ์šฐ, input ํƒœ๊ทธ์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด event๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

โ—ผ type์ด "chabge"์ผ ๊ฒฝ์šฐ, input ํƒœ๊ทธ์— ๊ฐ’์„ ์ž…๋ ฅํ•˜๋‹ค๊ฐ€ mouse๋กœ ๋‹ค๋ฅธ ๊ณณ์„ ํด๋ฆญํ•˜๋ฉด event๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

โ—ผ ์ฐพ์€ ํƒœ๊ทธ๊ฐ€ img ์ด๊ฑฐ๋‚˜, window์ผ ๊ฒฝ์šฐ์ด๋ฉด์„œ, type์ด "load"์ผ ๊ฒฝ์šฐ, DOM์ด ์ƒ์„ฑ๋˜์—ˆ์œผ๋ฉด์„œ, ์ด๋ฏธ์ง€, css, js ํŒŒ์ผ์ด ๋กœ๋“œ ๋˜์—ˆ๋Š”์ง€ ์ฒดํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.  -> image๊ฐ€ load ๋˜์—ˆ์„ ๋•Œ, ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ’ฅ addEventListener()์˜ function์„ ์ž…๋ ฅํ•  ๋•Œ, ๋žŒ๋‹ค์‹์„ ๋„ฃ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์ด๋ฏธ ์ž‘์„ฑํ•œ function()์„ ๋„ฃ์œผ๋ฉด ํ•ด๋‹น function์ด ์ดˆ๊ธฐ์— ํ•œ ๋ฒˆ ์‹คํ–‰๋œ๋‹ค. 

๐Ÿ’ฅ addEventListener๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค Ram ์šฉ๋Ÿ‰์„ ์ฐจ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์•„๋‹Œ 1๊ฐœ๋งŒ ์“ฐ๋„๋ก ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

โœ” HTML class ์†์„ฑ์— ์ƒˆ๋กœ์šด ์š”์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ

<script>
  document
    .getElementById("sub-menu-button")
    .addEventListener("click", () => {
      document
        .getElementById("sub-menu-list")
        .classList.toggle("nav-sub-menu-show");
    });
</script>

โ—ผ document.getElementById("{id ๊ฐ’}"): HTML ๋ฌธ์„œ์—์„œ id ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ํƒœ๊ทธ ๊ฐ€์ ธ์˜ค๊ธฐ

โ—ผ .classList: ํ•ด๋‹น ํƒœ๊ทธ์˜ class ์†์„ฑ์˜ ์š”์†Œ ๋ฆฌ์ŠคํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ

โ—ผ .toggle("{class ์ด๋ฆ„}"): class ์ด๋ฆ„์ด ์ด๋ฏธ ์žˆ์œผ๋ฉด ์ œ๊ฑฐํ•˜๊ณ  ์—†์œผ๋ฉด ์ถ”๊ฐ€ํ•˜๊ธฐ

 

โœ” Scroll ์‚ฌ์šฉํ•˜๊ธฐ

โ—ผ Window๋Š” Document๋ณด๋‹ค ๋” ํฐ ๋ฒ”์œ„์ด๋‹ค.

โ—ผ window.addEventListener("scroll", {function})๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋กค์„ ์กฐ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

โ—ผ window.scrollY๋ฅผ ํ†ตํ•ด ์œ ์ €๊ฐ€ ์Šคํฌ๋กค์„ ์–ด๋Š์ •๋„ ๋‚ด๋ ธ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ window.scrollTo({x ์ขŒํ‘œ}, {y ์ขŒํ‘œ})๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ์ขŒํ‘œ๋กœ ์Šคํฌ๋กค์„ ๊ฐ•์ œ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

โ—ผ window.scrollBy({x ์ขŒํ‘œ}, {y ์ขŒํ‘œ})๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ์ขŒํ‘œ๋กœ ํ˜„์žฌ ์œ„์น˜์— ๋”ํ•ด์„œ ๊ฐ•์ œ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

โ—ผ window.scrollTop({y ์ขŒํ‘œ})๋ฅผ ํ†ตํ•ด Y ์ขŒํ‘œ๋กœ ์Šคํฌ๋กค์„ ๊ฐ•์ œ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

โ—ผ document.getElementById({Id ๊ฐ’}).scrollTop์„ ํ†ตํ•ด ํƒœ๊ทธ์—์„œ ์–ด๋Š์ •๋„ ์Šคํฌ๋กค ํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

โ—ผ document.getElementById({Id ๊ฐ’}).scrollHeight๋ฅผ ํ†ตํ•ด ํƒœ๊ทธ์˜ ์Šคํฌ๋กค ์ด Height์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

โ—ผ scrollTop๊ณผ scrollHeight๋Š” ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ์ฐจ์ด๊ฐ€ ์žˆ์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋กคํ•œ ์œ„์น˜์™€ ์Šคํฌ๋กค์˜ ์ด ๊ธธ์ด๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” div์˜ height ๋งŒํผ scrollTop์— ๋”ํ•˜๊ณ  ์˜ค์ฐจ๋ฅผ ์ƒ๊ฐํ•ด์„œ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค.

โ—ผ document.getElementById({Id ๊ฐ’}).clientHeight์„ ํ†ตํ•ด div์˜ height์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ฅ Scroll EventListener๋Š” 1์ดˆ์— 60๋ฒˆ ์ด์ƒ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

๐Ÿ’ฅ ์ค‘๋ณต ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ค‘๋ณต ๋ฐฉ์ง€ ์ฝ”๋“œ๋„ ํ•„์š”ํ•˜๋‹ค.

 

โœ” JavaScript ์ฝ”๋“œ import ํ•˜๊ธฐ

<script src={javaScript ๊ฒฝ๋กœ}></script>

โ—ผ src ์†์„ฑ์— javaScript ๊ฒฝ๋กœ๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด import ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ” JavaScript ๋กœ HTML์— ์š”์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ

let pTag = document.createElement("p");
pTag.innerHTML = "Test!";
document.querySelector("#test").appendChild(pTag);

โ—ผ document.createElement("{ํƒœ๊ทธ}")๋กœ ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

โ—ผ ์›ํ•˜๋Š” ํƒœ๊ทธ๋ฅผ ์ฐพ๊ณ  .appendChild({๋งŒ๋“ค์–ด์ง„ ํƒœ๊ทธ})๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์›ํ•˜๋Š” ํƒœ๊ทธ์˜ ์ž์‹์œผ๋กœ ์‚ฝ์ž…๋œ๋‹ค.

 

let tag = "<p> ์•ˆ๋…• </p>";
document.querySelector("#test").insertAdjacentHTML("beforeend", tag);

โ—ผ ๋„ฃ๊ณ ์ž ํ•˜๋Š” ํƒœ๊ทธ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ž‘์„ฑํ•˜๊ณ  .insertAdjacentHTML("{position}", "{ํƒœ๊ทธ}")๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›ํ•˜๋Š” ํƒœ๊ทธ์— ์ž์‹์œผ๋กœ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ฅ createElement()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์ƒ ๋” ์ข‹๋‹ค. (๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ์€ ๊ฑฐ์˜ ๋ฌด์‹œํ•ด๋„ ์ข‹์„ ์ •๋„์ด๋‹ค.)


๐Ÿ“’ jQuery ์‚ฌ์šฉํ•˜๊ธฐ

โœ” ์™œ? (์‚ฌ์šฉ ์ด์œ )

โ—ผ JavaScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTML์„ ์กฐ์ž‘ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

โ—ผ jQuery๋Š” HTML ์กฐ์ž‘ ๋ฌธ๋ฒ•์„ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

 

โœ” jQuery ์„ค์น˜ํ•˜๊ธฐ

1. jQuery CDN์„ ๊ฒ€์ƒ‰ํ•œ ํ›„, ํ•ด๋‹น ์‚ฌ์ดํŠธ์—์„œ ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์˜ minified๋ฅผ ์„ ํƒํ•˜์—ฌ script๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค.

https://releases.jquery.com/

 

jQuery CDN

The integrity and crossorigin attributes are used for Subresource Integrity (SRI) checking. This allows browsers to ensure that resources hosted on third-party servers have not been tampered with. Use of SRI is recommended as a best-practice, whenever libr

releases.jquery.com

2. ๋ณต์‚ฌํ•œ script๋ฅผ header ํƒœ๊ทธ์— ๋ถ™์—ฌ ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

โœ” jQuery ๋ฌธ๋ฒ•

/* JavaScript ์‚ฌ์šฉ */
document.querySelector(".navbar-button").addEventListener("click", () => {
    document
      .getElementById("sub-menu-list")
      .classList.toggle("nav-sub-menu-show");
  });
    
/* JQuery ์‚ฌ์šฉ */
$(".navbar-button").click(() => {
    $(".list-group").toggleClass("nav-sub-menu-show");
  });

โ—ผ document.querySelector()๋ฅผ $๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ addEventListener()๋ฅผ on()์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ addEventListener('click', {function})์„ .click()์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ .classList.toggle()์„ .toggleClass()๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

$("#hello").html("๋ฐ”๋ณด").css("color", "red");

โ—ผ hello๋ผ๋Š” id๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” HTML ๋ฌธ์„œ ์ค‘ ๋งจ ์ฒ˜์Œ ํƒœ๊ทธ์˜ ๊ฐ’์„ "๋ฐ”๋ณด"๋กœ, ์ƒ‰์ƒ์„ red๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

 

$(".hello").html("๋ฐ”๋ณด").css("color", "red");

โ—ผ hello class๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” HTML ๋ฌธ์„œ ์ค‘ ๋งจ ์ฒ˜์Œ ํƒœ๊ทธ์˜ ๊ฐ’์„ "๋ฐ”๋ณด"๋กœ, ์ƒ‰์ƒ์„ red๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

 

$("#id1").hide();
$("#id1").fadeOut();
$("#id1").slideUp();

โ—ผ hide(): display: none๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.

โ—ผ fadeOut() ๊ฐ™์ด ๊ฐ„๋‹จํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

โ—ผ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ JavaScript๋กœ ์ฃผ๋ฉด ์„ฑ๋Šฅ์ƒ ์•ˆ ์ข‹๊ธฐ ๋•Œ๋ฌธ์—, CSS๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

๐Ÿ’ฅ ์ฃผ์˜: $("์…€๋ ‰ํ„ฐ")๋กœ ์ฐพ์œผ๋ฉด jQuery ํ•จ์ˆ˜๋งŒ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“’ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด๋ž€?

๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ html(์š”์†Œ)๋กœ ํผ์ง€๋Š” ํ˜„์ƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๋‹ค๋ฅด๊ฒŒ ๋งํ•˜๋ฉด, ์ƒ์œ„ ์š”์†Œ๋ฅผ ํด๋ฆญํ•ด๋„ ํ•˜์œ„ ์š”์†Œ๋ฅผ ํด๋ฆญํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

โœ” ์ƒํ™ฉ

<body>
  <div id="modal" class="black-bg">
    <div class="white-bg">
      <h4>๋กœ๊ทธ์ธํ•˜์„ธ์š”</h4>
      <form id="login-form" action="form-success.html">
        <div>
          <input id="username" type="text" />
        </div>
        <div>
          <input id="password" type="password" />
        </div>
        <button type="submit">์ „์†ก</button>
        <button type="button" onclick="clickModalCloseBtn()">๋‹ซ๊ธฐ</button>
      </form>
    </div>
  </div>
</body>

<script>
document.getElementById("modal").addEventListener("click", () => {
  document.getElementById("modal").classList.remove("show-modal");
});
</script>

โ—ผ ๊ฒ€์€์ƒ‰ ๋ฐฐ๊ฒฝ์„ ํด๋ฆญํ•˜๋ฉด ๋ชจ๋‹ฌ์ฐฝ์ด ์‚ฌ๋ผ์ง€๋„๋ก javaScript ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

โ—ผ ์œ„ ์ฝ”๋“œ์—์„œ, "modal"์ด๋ผ๋Š” Id ๊ฐ’์„ ๊ฐ€์ง„ ํƒœ๊ทธ(๊ฒ€์€์ƒ‰ ๋ฐฐ๊ฒฝ)๋ฅผ ํด๋ฆญํ•˜๋ฉด, show-modal ํด๋ž˜์Šค๋ฅผ ์—†์• ์„œ ๋ชจ๋‹ฌ์ฐฝ์„ ์ข…๋ฃŒํ•œ๋‹ค.

โ—ผ ์‹ค์ œ๋กœ ๋™์ž‘ํ•ด๋ณด๋ฉด, ํ•˜์–€์ƒ‰ ๋ถ€๋ถ„์„ ํด๋ฆญํ•ด๋„ ๋ชจ๋‹ฌ์ฐฝ์ด ์ข…๋ฃŒ๋œ๋‹ค.

โ—ผ ์ด๋Š” "white-bg" class๋ฅผ ๊ฐ€์ง„ div ํƒœ๊ทธ๊ฐ€ "mode" id๋ฅผ ๊ฐ€์ง„ ํƒœ๊ทธ ์ž์‹์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ๊ณ , ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์— ์˜ํ•ด ์ž์‹์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๊ฐ€ ๋ถ€๋ชจ์—๊ฒŒ ์ „ํŒŒ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•˜์–€์ƒ‰ ๋ฐฐ๊ฒฝ์„ ํด๋ฆญํ•ด๋„ ๋ชจ๋‹ฌ์ฐฝ์ด ์ข…๋ฃŒ๋œ๋‹ค.

 

โœ” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

.addEventListener("click", (event) => {
  event.target;
  event.currentTarget;
  event.preventDefault();
  event.stopPropagation();
}

โ—ผ ์œ ์šฉํ•œ ์ด๋ฒคํŠธ ๊ด€๋ จ ํ•จ์ˆ˜๋“ค์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐํ•œ๋‹ค.

โ—ผ event.target: ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ณณ, ์œ ์ €๊ฐ€ ์‹ค์ œ๋กœ ๋ˆ„๋ฅธ ํƒœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

โ—ผ event.currentTarget: ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋‹ฌ๋ฆฐ ๊ณณ, .addEventListener ์•ž์˜ ํƒœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

โ—ผ event.preventDefault(): ์ด๋ฒคํŠธ ๊ธฐ๋ณธ ๋™์ž‘์„ ๋ง‰์•„์ค€๋‹ค. addEventListener์˜ type(์—ฌ๊ธฐ์„œ๋Š” "click")์— ํ•ด๋‹นํ•˜๋Š” ๋™์ž‘์ด ์•ˆ ๋ˆŒ๋ ธ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ํ–‰๋™ํ•œ๋‹ค.

โ—ผ event.stopPropagation(): ๋‚ด ์ƒ์œ„ ์š”์†Œ๋กœ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง๋˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์ค€๋‹ค.

 

๋”ฐ๋ผ์„œ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ๊ฒ€์€์ƒ‰ ๋ฐฐ๊ฒฝ์„ ํด๋ฆญํ–ˆ์„ ๊ฒฝ์šฐ์—๋งŒ ๋ชจ๋‹ฌ์ฐฝ์„ ๋‹ซ๋Š”๋‹ค.

<script>
  document.getElementById("modal").addEventListener("click", (event) => {
    if (event.target === event.currentTarget) {
      document.getElementById("modal").classList.remove("show-modal");
    }
  });
</script>

๐Ÿ“’ SSR / CSR

โœ” SSR

server-side-rendering์œผ๋กœ ์„œ๋ฒ„๊ฐ€ html์„ ๋‹ค ๋งŒ๋“ค์–ด์„œ ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„์— ์ œ๊ณตํ•œ๋‹ค.

โœ” CSR

client-side-rendering์œผ๋กœ ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ „์†กํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„ ์ธก์—์„œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์ง„ํ–‰ํ•œ๋‹ค.

๐Ÿ’ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์ด๋ž€, ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ HTML ํƒœ๊ทธ์— ๊ฐ’์„ ๋„ฃ๋Š” ์ž‘์—…

 

๐Ÿ“’ fetch

โ—ผ ES6๋ถ€ํ„ฐ JavaScript ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋“ค์–ด์˜จ ํ•จ์ˆ˜๋กœ, Promise ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ์œ ๋ฆฌํ•˜๋‹ค.

โ—ผ ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋Š” ์žฅ์ ์œผ๋กœ ์ธํ•ด ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•˜๋ฉฐ, ์ฝ”๋“œ ์—ญ์‹œ ๊ฐ„๋‹จํ•œ๋‹ค.

โœ” GET ์š”์ฒญ ๋ณด๋‚ด๊ธฐ

fetch("{url}")
  .then((res) => res.json())
  .then((data) => {
    console.log(data);
  })
  .catch(() => {
    console.log("์‹คํŒจ");
  });

โ—ผ fetch() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ GET ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

โ—ผ then()์œผ๋กœ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ catch()๋กœ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ” POST ์š”์ฒญ ๋ณด๋‚ด๊ธฐ

const url = "{url}"
const option ={
   method:'POST',
   header:{
     'Accept':'application/json',
     'Content-Type':'application/json';charset=UTP-8'
  },
  body:JSON.stringify({
  	name:'test',
    age: 10
  })

fetch(url, options)
  .then(res => console.log(res))

โ—ผ fetch(url, {method, headers, body})๋กœ POST ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

โ—ผ Http Method, Http Header, Http Body๋ฅผ ์ •ํ•ด ์š”์ฒญ์— ํ•จ๊ป˜ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“’ AJax

โ—ผ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด GET, POST ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ

โ—ผ form ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ GET, POST ์š”์ฒญ ์‹œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ๋œ๋‹ค.

โœ” ์ˆœ์ˆ˜ AJax ์‚ฌ์šฉํ•˜๊ธฐ

let req = new XMLHttpRequest();
let serverAddress = "{url}";

req.addEventListener("load", (res) => {
  console.log(res.currentTarget.response);
});
req.open("GET", serverAddress);
req.send();

โ—ผ XMLHttpRequest()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , eventListener๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

โœ” JQuery๋กœ AJax ์‚ฌ์šฉํ•˜๊ธฐ

<script>
  $.get("{url}").done((res) => {
    console.log(res);
  })
  .fail(() => {
    console.log("์‹คํŒจ");
  });
  
  $.post("{url}", {๋ฐ์ดํ„ฐ}).done((res) => {
    console.log(res);
  })
  .fail(() => {
    console.log("์‹คํŒจ");
  });
</script>

โ—ผ JQuery์™€ AJax๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ $.get()์œผ๋กœ GET ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ $.post()๋กœ POST ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ done({callback})์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์ด ์„ฑ๊ณตํ–ˆ์„ ๋•Œ, ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ fail({callback})์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์ด ์‹คํŒจํ–ˆ์„ ๋•Œ, ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“’ LocalStorage / SesstionStorge

โ—ผ .js ํŒŒ์ผ์ด๋‚˜, script ํƒœ๊ทธ ์•ˆ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ์‚ฌ๋ผ์ง„๋‹ค.

โ—ผ LocalStorage / SesstionStorge ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜์˜๊ตฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ key : value ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ ์šฉ๋Ÿ‰์€ 5MB, ๋ฌธ์ž / ์ˆซ์ž๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ LocalStorage๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์žฌ์ ‘์†ํ•ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋˜์ง€๋งŒ, SesstionStorage๋Š” ์‚ฌ์ดํŠธ๋ฅผ ๋‚˜๊ฐ€๋ฉด ์ž๋™์œผ๋กœ ์‚ญ์ œ๋œ๋‹ค.

โœ” LocalStorage ์‚ฌ์šฉํ•˜๊ธฐ

localStorage.setItem("{key}", "{value}")
localStorage.getItem("{key}")
localStorage.removeItem("{key}");

// Array, Object ์ €์žฅํ•˜๊ธฐ
let testArray = [1, 2, 3];
let testObject = {
  name: "test",
  age: 10,
};
localStorage.setItem("Array", JSON.stringify(testArray));
localStorage.setItem("Object", JSON.stringify(testObject));

// Array, Object ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•˜๊ธฐ
let localStorageArray = localStorage.getItem("Array");
console.log(JSON.parse(localStorageArray));

โ—ผ localStorage.setItem()์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ localStorage.getItem()์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

โ—ผ localStorage.removeItem()์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—ผ ๋ฐฐ์—ด์„ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด JSON.stringify()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JSON์œผ๋กœ ๋ณ€๊ฒฝ ํ›„ ์ €์žฅํ•œ๋‹ค.

โ—ผ JSON์„ ๊ฐ€์ ธ์™€์„œ ์›๋ž˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, JSON.parse()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

โœ” SessionStorage ์‚ฌ์šฉํ•˜๊ธฐ

sessionStorage.setItem("{key}", "{value}")
sessionStorage.getItem("{key}")
sessionStorage.removeItem("{key}");

// Array, Object ์ €์žฅํ•˜๊ธฐ
let testArray = [1, 2, 3];
let testObject = {
  name: "test",
  age: 10,
};
sessionStorage.setItem("Array", JSON.stringify(testArray));
sessionStorage.setItem("Object", JSON.stringify(testObject));

// Array, Object ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•˜๊ธฐ
let sessionStorageArray = sessionStorage.getItem("Array");
console.log(JSON.parse(sessionStorageArray));

โ—ผ LocalStorage์™€ ์‚ฌ์šฉ๋ฒ•์ด ๋™์ผํ•˜๊ณ , sessionStorage๋ฅผ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

'Web > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

JavaScript ES6 & ๊ฐ์ฒด ์ง€ํ–ฅ ๋ฌธ๋ฒ•  (1) 2023.04.25
[JavaScript] this ํ‚ค์›Œ๋“œ ์•Œ์•„๋ณด๊ธฐ  (0) 2023.04.24