โœ๏ธ TIL

์œ ๋ฐ๋ฏธ ์ทจ์—…๋ถ€ํŠธ์บ ํ”„ - ํ”„๋ก ํŠธ์—”๋“œ&๋ฐฑ์—”๋“œ : 8์ผ์ฐจ TIL

Yuuuki 2023. 12. 22. 17:23

์˜ค๋Š˜ ๋“œ๋””์–ด ๊ธธ๊ณ  ๊ธธ์—ˆ๋˜ CSS ํ•™์Šต์„ ๋งˆ์น˜๊ณ , 

javascript์— ๋Œ€ํ•ด ํ•™์Šตํ•˜์˜€์Šต๋‹ˆ๋‹ค! ๐Ÿ™‚

 


 

 

 

์–ด์ œ ๋ฐฐ์šด Form ํ•™์Šต์„ ๊ธฐ๋ฐ˜์œผ๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋Š” ์ฑŒ๋ฆฐ์ง€๋ฅผ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

๐Ÿค”

 

 

์˜ค๋Š˜์˜ ์ฑŒ๋ฆฐ์ง€๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ CSS์—์„œ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๋˜ ๋ถ€๋ถ„์ด๋‹ค.

radio , checkbox์˜ ํํŠธ๋Ÿฌ์ง„ ์ •๋ ฌ์„ ์œ„ํ•ด, flex box๋กœ ๋งŒ๋“ค๊ณ , ์ˆ˜์ง์ •๋ ฌ์„ ๋งž์ถ”๋ฉด ๋˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š”, input์š”์†Œ๊ฐ€ label ์•ž์ด ์•„๋‹Œ ๋’ค๋กœ ์ด๋™ํ•ด๋ฒ„๋ฆฌ๋Š” ๋ฌธ์ œ์˜€๋‹ค..

 

๐Ÿ’ก

.inline-control {
  display: flex;
}

.inline-control input {
  width: auto;
}

.inline-control label {
  margin: 0;
  margin-left: 0.5rem;
}

 

์•ž์„œ, input์š”์†Œ๋“ค์€ ๋ชจ๋‘ width๋ฅผ 100%๋กœ ์ง€์ •ํ•ด๋†“์•˜๊ธฐ ๋•Œ๋ฌธ์—, radio์™€ checkbox๊ฐ€ ํ•œ์ค„์„ ๋‹ค ์ฐจ์ง€ํ•˜๋ ค๊ณ  ํ•˜๊ณ , ์ค„๋ฐ”๊ฟˆ์ด ์ผ์–ด๋‚˜ ์ •๋ ฌ์ด ํํŠธ๋Ÿฌ์ ธ๋ฒ„๋ฆฐ๊ฒƒ์ด์˜€๋‹ค. 

 

→ input์˜ width:100%๋ฅผ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•ด, auto๋กœ ๋ณ€๊ฒฝํ•ด์ค˜์•ผํ•œ๋‹ค.

 

button inline

label inline

inputinline-block

 

์•„์ง๋„, ํ—ท๊ฐˆ๋ฆฐ๋‹ค..๐Ÿ˜ต‍๐Ÿ’ซ

๊ธฐ์–ตํ•ด๋‘์ž!

 

 


 

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ, HTML๊ณผ CSS๋ฅผ ํ†ตํ•ด์„œ๋„ ํ™”๋ฉด์— ๋ Œ๋”๋ง ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, 

ํ™”๋ฉด์„ ์กฐ์ž‘, ์—…๋ฐ์ดํŠธ ๋“ฑ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„ , javascript๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค! 

 

โ—๏ธJavaScript์˜ convention

์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ, ์ผ๊ด€์„ฑ, ํ˜‘์—…์˜ ํŽธ์˜์„ฑ์„ ์ฆ์ง„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ทœ์น™๊ณผ ๊ด€๋ก€๋กœ์จ, 

 

  • ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜๋ช…: ์นด๋ฉœ ์ผ€์ด์Šค ์‚ฌ์šฉ (์˜ˆ: myVariable, calculateTotal()).
  • ์ƒ์ˆ˜ (const): ๋Œ€๋ฌธ์ž ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค ์‚ฌ์šฉ (์˜ˆ: MAX_SIZE).
  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜: ํŒŒ์Šค์นผ ์ผ€์ด์Šค ์‚ฌ์šฉ (์˜ˆ: MyConstructor)

 

โœ“ ๋ณ€์ˆ˜ let, const   vs   var

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐฐ์šธ ๋•Œ, var ๋ณ€์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด ์ง€์–‘ํ•ด์•ผํ•œ๋‹ค๊ณ  ๋ฐฐ์šด๋‹ค.

์ด์œ ๋ฅผ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

 

let

  • ๋ณ€์ˆ˜ ์ค‘๋ณต ๋ถˆ๊ฐ€๋Šฅ
  • ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„
  • ๋ณ€์ˆ˜ Hoisting์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘
  • window ์ „์—ญ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐX

const

  • ๋ณ€์ˆ˜ ์ค‘๋ณต ๋ถˆ๊ฐ€๋Šฅ
  • ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„
  • ๋ณ€์ˆ˜ Hoisting์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘
  • window ์ „์—ญ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐX
  • ์„ ์–ธ&์ดˆ๊ธฐํ™”๋ฅผ ๋™์‹œ์— ์ž‘์„ฑํ•ด์•ผ ํ•จ (์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ)
  • ์žฌํ• ๋‹น ๋ถˆ๊ฐ€๋Šฅ

TypeError ๋ฐœ์ƒ

 

์‚ฌ์ง„๊ณผ ๊ฐ™์ด.. ์žฌํ• ๋‹น์„ ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. 

๊ทธ๋Ÿผ const๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€? ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ!

ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ๋ฒ•์œผ๋กœ ํ• ๋‹นํ•˜๋ฉด ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

 

'์žฌํ• ๋‹น๋งŒ ์•ˆ๋˜๋Š”๊ตฌ๋‚˜' ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹๋‹ค!

 

 

โ—๏ธvar์˜ ๋ฌธ์ œ์ 

  • ์ค‘๋ณต ์„ ์–ธ์ด ํ—ˆ์šฉ
  • ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„
  • window ์ „์—ญ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐO
  • ๋ณ€์ˆ˜ Hositing ๋ฐœ์ƒ

์ด๋Ÿฌํ•œ ์ด์œ ๋“ค๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐฐ์šฐ๋ฉด์„œ var๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ณธ์ ์ด ์—†๋‹ค.

 

 

var์„ ์‚ฌ์šฉํ•˜์˜€์„๋•Œ, ๋งˆ์ง€๋ง‰ console์ด '์ง€์—ญ'์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์œ ๋Š” ๋ฐ”๋กœ, var๋Š” ํ•จ์ˆ˜ ๋‹จ์œ„ ์Šค์ฝ”ํ”„์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

if๋Š” ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ถ„๊ธฐ๋ฌธ์ด๊ธฐ ๋•Œ๋ฌธ์—, '์ง€์—ญ'์œผ๋กœ global๋ณ€์ˆ˜๋ฅผ ์žฌํ• ๋‹น ํ•˜๋ฉด ์ „์—ญ ๋ถ€๋ถ„๊นŒ์ง€ ์˜ค์—ผ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

โœ“ โญ๏ธ Hoisiting

๊ณ„์† ํ˜ธ์ด์ŠคํŒ…์— ๋Œ€ํ•œ ์–ธ๊ธ‰์ด ๋‚˜์˜ค๋Š”๋ฐ, ์ค‘์š”ํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋‹ค!

ํ˜ธ์ด์ŠคํŒ…(Hoisting)์€ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜ ์„ ์–ธ์ด ์ฝ”๋“œ์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€๋Š” ๋™์ž‘์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ ์‹คํ–‰ ์ „์— JavaScript ์—”์ง„์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๊ณ  ์ดˆ๊ธฐํ™”๋˜๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

๋ณ€์ˆ˜ ์„ ์–ธ์€ ํ˜ธ์ด์ŠคํŒ…์— ์˜ํ•ด ์„ ์–ธ ๋‹จ๊ณ„์™€ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด์ง€๋Š”๋ฐ,

๋ณ€์ˆ˜๋Š” ์„ ์–ธ ๋‹จ๊ณ„์—์„œ ๋ฉ”๋ชจ๋ฆฌ์— ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์ง€๋งŒ, ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ ์‹ค์ œ ๊ฐ’์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

 

var

console.log(myVar); // undefined
var myVar = 'I am hoisted';
console.log(myVar); // ์ถœ๋ ฅ: I am hoisted

 

myVar์˜ ์„ ์–ธ ์ „์—, console์„ ์ถœ๋ ฅํ•˜๋ฉด ์•„์ง ์„ ์–ธ๋„ ์•ˆํ–ˆ์œผ๋‹ˆ๊นŒ Reference Error๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ?!

ํ˜ธ์ด์ŠคํŒ…์— ์˜ํ•ด ์„ ์–ธ ๋‹จ๊ณ„์—์„œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜์–ด undefined๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

let / const

let๊ณผ const๋„ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•˜์ง€๋งŒ, var์™€๋Š” ๋™์ž‘ ๋ฐฉ์‹์ด ์•ฝ๊ฐ„ ๋‹ค๋ฅด๋‹ค!

๋ณ€์ˆ˜๊ฐ€ ํ˜ธ์ด์ŠคํŒ… ๋˜๊ธดํ•˜์ง€๋งŒ, ์ดˆ๊ธฐํ™” ์ „๊นŒ์ง€ ์ผ์‹œ์  ์‚ฌ๊ฐ์ง€๋Œ€(Temporal Dead Zone, TDZ)์— ๋†“์ธ๋‹ค.

 

let,const๋Š” ์„ ์–ธ์€ ๋˜์ง€๋งŒ, ์ดˆ๊ธฐํ™” ๊ณผ์ •์„ ๊ฑฐ์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ดˆ๊ธฐํ™” ์ „์— ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋ฉด TDZ ์ƒํƒœ๊ฐ€ ๋˜์–ด Reference Error๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค!

 

console.log(myVar); // ์˜ค๋ฅ˜: Cannot access 'myVar' before initialization
let myVar = 'I am declared with let';

 

→ var: ์„ ์–ธ+์ดˆ๊ธฐํ™”  ,   let/const : ์„ ์–ธ (by Hoisting)

 

 

ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

ํ•จ์ˆ˜ ์„ ์–ธ๋„ ํ˜ธ์ด์ŠคํŒ…์— ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ์ „์ฒด๊ฐ€ ํ˜ธ์ด์ŠคํŒ…๋˜์ง€๋งŒ, ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ๋ณ€์ˆ˜๋งŒ์ด ํ˜ธ์ด์ŠคํŒ…๋œ๋‹ค.

 

 

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ

sayHello(); // ์ถœ๋ ฅ: Hello
function sayHello() {
  console.log('Hello');
}

ํ•จ์ˆ˜ ์ „์ฒด๊ฐ€ ํ˜ธ์ด์ŠคํŒ… ๋˜์–ด, ํ•จ์ˆ˜๊ฐ’์ด ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

ํ•จ์ˆ˜ ํ‘œํ˜„์‹ โญ๏ธ

sayHi(); // ์˜ค๋ฅ˜: sayHi is not a function
var sayHi = function() {
  console.log('Hi');
};

ํ‘œํ˜„์‹์€ ๋ณ€์ˆ˜(var sayHi)๋งŒ์ด hosting๋˜๊ธฐ ๋•Œ๋ฌธ์—, TypeError๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค!

 

 

โœ“ ๋ณ€์ˆ˜ ์„€๋„์ž‰(Variable Shadowing)

๋‘ ๊ฐœ ์ด์ƒ์˜ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ณ€์ˆ˜๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์Šค์ฝ”ํ”„์—์„œ ์„ ์–ธ๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ

๋‚ด๋ถ€ ์Šค์ฝ”ํ”„์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๊ฐ€ ์™ธ๋ถ€ ์Šค์ฝ”ํ”„์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. (๋‚ด๋ถ€→์™ธ๋ถ€)

 

 

์™ธ๋ถ€ ๋ณ€์ˆ˜๋Š” ์ˆ˜์ •์ด๋‚˜ ์‚ญ์ œ ์—†์ด! ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋™๋ช…์˜ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์„€๋„์ž‰์€ ์ตœ์†Œํ•œ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

โœ“ ์ „์—ญ ๋ณ€์ˆ˜ vs ์ง€์—ญ ๋ณ€์ˆ˜ 

์ด ๋‘˜์€ ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์œ„์น˜์™€ ์Šค์ฝ”ํ”„(scope)์— ๋”ฐ๋ผ ๊ตฌ๋ถ„๋œ๋‹ค.

 

์ „์—ญ ๋ณ€์ˆ˜ (Global Variable)

์ „์—ญ ๋ณ€์ˆ˜๋Š” ์–ด๋””์—์„œ๋“  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜๋กœ, ์ „์—ญ ์Šค์ฝ”ํ”„(Global Scope)์—์„œ ์„ ์–ธ๋˜๋ฉฐ, ๋ณดํ†ต ์ตœ์ƒ์œ„์—์„œ ์„ ์–ธ๋ฉ๋‹ˆ๋‹ค.

์ง€์—ญ ๋ณ€์ˆ˜ (Local Variable)

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

 

 

์ „์—ญ์€ ์–ด๋””์„œ๋‚˜ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์˜ˆ๋ฅผ ๋“ค๋ฉด ํŒŒ์ผ์„ ๋”ฐ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์Šค์ฝ”ํ”„๋ฅผ ๋ถ„๋ฆฌํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ?! ์ „์—ญ์œผ๋กœ ๋ถ„๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ์œ„ํ—˜์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ „์—ญ๋ณ€์ˆ˜๋ณด๋‹จ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ์ข‹๋‹ค.