๋ฐ˜์‘ํ˜•

React์™€ Vite ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘์„ ์œ„ํ•œ ์…‹ํŒ…ํ•˜๊ธฐ

 

1.  React + Vite ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

npm create vite@latest ํ”„๋กœ์ ํŠธ๋ช… --template react


* * React + Typescript + Vite ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

npm create vite@latest ํ”„๋กœ์ ํŠธ๋ช… --template react-ts

 

2. ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™

 
cd ํ”„๋กœ์ ํŠธ๋ช…

 

3. ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜

npm install

 

4. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰

npm run dev

 

 

๐ŸŽˆ Vite๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ 

Vite๋ฅผ ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Vite๋Š” ํŠนํžˆ ์ดˆ๊ธฐ ๋กœ๋”ฉ๊ณผ ์‹ค์‹œ๊ฐ„ ๊ฐœ๋ฐœ์—์„œ ํƒ์›”ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ด๋ฉฐ, ์ด๋Ÿฌํ•œ ์žฅ์ ์ด ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์„  ์›ํ™œํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ์—์„œ Vite๋ฅผ ์„ ํƒํ–ˆ๋‹ค.

  1. ๋น ๋ฅธ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹œ์ž‘: Vite๋Š” ๋ชจ๋“ˆ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ๋กœ๋”ฉํ•˜๋ฏ€๋กœ, ๊ฐœ๋ฐœ ์„œ๋ฒ„๊ฐ€ ์ฆ‰์‹œ ์‹œ์ž‘๋œ๋‹ค. ํŠนํžˆ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ด๋Ÿฌํ•œ ๋น ๋ฅธ ๋กœ๋”ฉ ์†๋„๋Š” ํฐ ์ฐจ์ด๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ฐœ๋ฐœ ์ดˆ๊ธฐ๋ถ€ํ„ฐ ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ํ–ฅ์ƒ๋œ๋‹ค.
  2. ํšจ์œจ์ ์ธ Hot Module Replacement (HMR): Vite๋Š” ๋ณ€๊ฒฝ๋œ ๋ชจ๋“ˆ๋งŒ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ์‹์˜ HMR์„ ์ง€์›ํ•˜์—ฌ, ์ฝ”๋“œ ์ˆ˜์ • ํ›„ ์ฆ‰๊ฐ์ ์œผ๋กœ ํ™”๋ฉด์— ๋ฐ˜์˜๋œ๋‹ค. ์ด๋กœ ์ธํ•ด ์ฝ”๋“œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•˜๋ฉฐ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์–ด ์ž‘์—… ํšจ์œจ์„ฑ์ด ๋†’์•„์ง„๋‹ค.
  3. ์ตœ์ ํ™”๋œ ๋นŒ๋“œ: Vite๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ๊ฐ๊ฐ ์ตœ์ ํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์—๋Š” ESM(ES ๋ชจ๋“ˆ)์„ ์‚ฌ์šฉํ•˜๊ณ , ์ตœ์ข… ๋นŒ๋“œ ์‹œ์—๋Š” Rollup์„ ํ†ตํ•ด ๋ฒˆ๋“ค๋ง์„ ์ตœ์ ํ™”ํ•˜์—ฌ ์„ฑ๋Šฅ ์ข‹์€ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  4. ์„ค์ •์˜ ๊ฐ„๋‹จํ•จ๊ณผ ์œ ์—ฐ์„ฑ: Vite๋Š” ์„ค์ •์ด ๊ฐ„๋‹จํ•ด ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค. vite.config.js๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ์„ค์ •์„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, React์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์™€๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋˜์–ด ์ถ”๊ฐ€ ์„ค์ • ์—†์ด๋„ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ Vite๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ง€์›ํ•˜๋ฉฐ, ์ดˆ๊ธฐ ๋กœ๋”ฉ๋ถ€ํ„ฐ ๋นŒ๋“œ๊นŒ์ง€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ์„ฑ๋Šฅ๊ณผ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค. Vite๋ฅผ ํ†ตํ•ด ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ณ  ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ฃผ์š” ๋ชฉ์ ์ด์—ˆ๋‹ค.

 

 

๐ŸŽˆ ๊ธฐํƒ€ ๋‹ค๋ฅธ ๋ฒˆ๋“ค๋Ÿฌ ๋„๊ตฌ๋“ค

  1. Webpack:
    • ์„ค๋ช…: JavaScript ์ƒํƒœ๊ณ„์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ฒˆ๋“ค๋Ÿฌ๋กœ, ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ์„ค์ • ์˜ต์…˜์„ ์ œ๊ณตํ•ด ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์šฉ์ดํ•˜๋‹ค.
    • ์žฅ์ : ๋ฐฉ๋Œ€ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„, ๋†’์€ ํ˜ธํ™˜์„ฑ, ์œ ์—ฐํ•œ ์„ค์ •. ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•˜๋‹ค.
    • ๋‹จ์ : ์„ค์ •์ด ๋ณต์žกํ•˜๊ณ , ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋ฉฐ, HMR ์†๋„๊ฐ€ Vite๋ณด๋‹ค ๋‹ค์†Œ ๋Š๋ฆด ์ˆ˜ ์žˆ๋‹ค.
    • ์ถ”์ฒœ ์ƒํ™ฉ: ์ปค์Šคํ…€ ์„ค์ •์ด ๋ณต์žกํ•˜๊ฒŒ ํ•„์š”ํ•œ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์œ ๋ฆฌํ•˜๋‹ค.
  2. Parcel:
    • ์„ค๋ช…: Parcel์€ ์„ค์ •์ด ๊ฑฐ์˜ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฒˆ๋“ค๋Ÿฌ๋กœ, ‘์ œ๋กœ ์„ค์ •’์„ ๊ฐ•์กฐํ•˜๋ฉฐ ์ž๋™ ์ตœ์ ํ™” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
    • ์žฅ์ : ์ดˆ๋ณด์ž๋„ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋น ๋ฅธ ๋นŒ๋“œ ๋ฐ HMR์„ ์ง€์›ํ•ด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ธ๋‹ค.
    • ๋‹จ์ : ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ์„ค์ • ๋ฉด์—์„œ๋Š” Webpack์ด๋‚˜ Vite์— ๋น„ํ•ด ํ•œ๊ณ„๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
    • ์ถ”์ฒœ ์ƒํ™ฉ: ์„ค์ • ์—†์ด ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•œ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•˜๋‹ค.
  3. Snowpack:
    • ์„ค๋ช…: Snowpack์€ Vite์™€ ์œ ์‚ฌํ•˜๊ฒŒ ESM์„ ํ™œ์šฉํ•ด ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ ๋กœ๋“œํ•˜์—ฌ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์ธ๋‹ค.
    • ์žฅ์ : ๋น ๋ฅธ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹œ์ž‘ ๋ฐ HMR, ๋ชจ๋“ˆ ์บ์‹ฑ ๊ธฐ๋Šฅ์ด ๋›ฐ์–ด๋‚˜๋‹ค. Vite์™€ ๋น„์Šทํ•œ ๋ชจ๋“ˆ ๊ธฐ๋ฐ˜ ๋ฐฉ์‹์ด๋ผ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
    • ๋‹จ์ : ์ตœ๊ทผ ์—…๋ฐ์ดํŠธ ๋นˆ๋„๊ฐ€ ์ค„์–ด๋“ค๋ฉด์„œ Vite๋งŒํผ ํ™œ๋ฐœํžˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํŽธ์ด๋‹ค.
    • ์ถ”์ฒœ ์ƒํ™ฉ: Vite์˜ ๋Œ€์ฒด๋กœ ๊ณ ๋ คํ•  ๋งŒํ•˜์ง€๋งŒ, ์ƒํƒœ๊ณ„์™€ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ™œ๋ฐœํ•œ ์ตœ์‹  ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Vite๊ฐ€ ๋” ๋‚˜์€ ์„ ํƒ์ผ ์ˆ˜ ์žˆ๋‹ค.
  4. esbuild:
    • ์„ค๋ช…: esbuild๋Š” ์ดˆ๊ณ ์† JavaScript ๋ฒˆ๋“ค๋Ÿฌ๋กœ, Go ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์–ด ๋งค์šฐ ๋น ๋ฅธ ๋นŒ๋“œ ์†๋„๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
    • ์žฅ์ : ๋นŒ๋“œ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋ฉฐ, ๋งŽ์€ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฏธ๋“ค์›จ์–ด๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
    • ๋‹จ์ : ๊ธฐ๋Šฅ์ด ๊ธฐ๋ณธ์ ์ธ ๋ฒˆ๋“ค๋ง์— ์ง‘์ค‘๋˜์–ด ์žˆ์–ด, ๋ณต์žกํ•œ ์„ค์ •์„ ๋‹ค๋ฃจ๊ธฐ์—๋Š” ๋‹ค์†Œ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.
    • ์ถ”์ฒœ ์ƒํ™ฉ: ๋นŒ๋“œ ์†๋„๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ, ๋ฒˆ๋“ค๋ง ๋ฐ ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง๋งŒ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.

์ด์™ธ์—๋„ ํ”„๋กœ์ ํŠธ์˜ ํŠน์„ฑ๊ณผ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ Rollup๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

ํ•จ์ˆ˜ (Functions)

1. ํ•จ์ˆ˜ ์ •์˜ (Defining a Function)

ํ•จ์ˆ˜๋Š” ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. def ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉฐ, ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ๊ด„ํ˜ธ ์•ˆ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ๋˜์—ˆ์„ ๋•Œ์—๋งŒ ์‹คํ–‰๋œ๋‹ค.

def greet(name):
    print(f"์•ˆ๋…•ํ•˜์„ธ์š”, {name}๋‹˜!")

greet("์ฒ ์ˆ˜")  # ์ถœ๋ ฅ: ์•ˆ๋…•ํ•˜์„ธ์š”, ์ฒ ์ˆ˜๋‹˜!

2. ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ž (Parameters and Arguments)

ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์™ธ๋ถ€์—์„œ ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ „๋‹ฌ๋˜๋Š” ๊ฐ’์„ ์ธ์ž๋ผ๊ณ  ํ•œ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.

def add(a, b):
    return a + b

result = add(3, 4)
print(result)  # ์ถœ๋ ฅ: 7

3. ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜ (Default Parameters)

ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ํ•ด๋‹น ์ธ์ž๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์ด ์‚ฌ์šฉ๋œ๋‹ค.

๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋ฉฐ, ๊ธฐ๋ณธ๊ฐ’์ด ์—†๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ณด๋‹ค ๋’ค์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค.

def greet(name="์นœ๊ตฌ"):
    print(f"์•ˆ๋…•ํ•˜์„ธ์š”, {name}๋‹˜!")

greet()  # ์ถœ๋ ฅ: ์•ˆ๋…•ํ•˜์„ธ์š”, ์นœ๊ตฌ๋‹˜!
greet("์˜ํฌ")  # ์ถœ๋ ฅ: ์•ˆ๋…•ํ•˜์„ธ์š”, ์˜ํฌ๋‹˜!

1. ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ •์˜ ๋ฐ ๊ทœ์น™

๊ธฐ๋ณธ๊ฐ’์ด ์—†๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋จผ์ € ์ž‘์„ฑ๋˜๊ณ , ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋’ค์— ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์ด ์—†๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ณด๋‹ค ์•ž์— ์œ„์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

def add(a, b=3):
    return a + b
    
# a ๊ฐ’๋งŒ ์ „๋‹ฌํ•˜๋ฉด b๋Š” ๊ธฐ๋ณธ๊ฐ’ 3์„ ์‚ฌ์šฉ
print(add(2))  # ์ถœ๋ ฅ: 5

์ด ํ•จ์ˆ˜๋Š” a๋Š” ํ•„์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๊ณ , b๋Š” ๊ธฐ๋ณธ๊ฐ’ 3์„ ๊ฐ€์ง„๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ b ๊ฐ’์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

์ž˜๋ชป๋œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์‹œ:: ๊ธฐ๋ณธ๊ฐ’์ด ์—†๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ณด๋‹ค ์•ž์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค.

def add(a=1, b):
    return a + b

print(add(b=3))  
# ์˜ค๋ฅ˜ ๋ฐœ์ƒ: ๊ธฐ๋ณธ๊ฐ’์ด ์—†๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ b๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ a ๋’ค์— ์œ„์น˜ํ•ด ์žˆ์–ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ.
# ๊ธฐ๋ณธ๊ฐ’์ด ์—†๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ b๋Š” ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ a ์•ž์— ์œ„์น˜ํ•ด์•ผ ํ•จ.

# ์ˆ˜์ •๋œ ํ•จ์ˆ˜
def add(b, a=1):
    return a + b

print(add(b=3))  # ์ถœ๋ ฅ: 4

 

4. ๋ฐ˜ํ™˜๊ฐ’ (Return Value)

ํ•จ์ˆ˜๋Š” return ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. return์„ ๋งŒ๋‚˜๋ฉด ํ•จ์ˆ˜๋Š” ์‹คํ–‰์„ ์ข…๋ฃŒํ•˜๊ณ , ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฐ˜ํ™˜๋œ ๊ฐ’์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๋ณ€์ˆ˜์— ์ €์žฅ๋˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ณ„์‚ฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

def multiply(a, b):
    return a * b

result = multiply(5, 6)
print(result)  # ์ถœ๋ ฅ: 30

5. ๊ฐ€๋ณ€ ์ธ์ž (Variable-length Arguments)

 

๊ฐ€๋ณ€ ์ธ์ž๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›์„์ง€ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์—†์„ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

*args๋Š” ์œ„์น˜ ๊ธฐ๋ฐ˜์˜ ๊ฐ€๋ณ€ ์ธ์ž๋ฅผ, **kwargs๋Š” ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜์˜ ๊ฐ€๋ณ€ ์ธ์ž๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

*args

  • *args๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์œ„์น˜ ์ธ์ž๋ฅผ ํ•˜๋‚˜์˜ ํŠœํ”Œ๋กœ ๋ฐ›๋Š”๋‹ค.
  • ์ธ์ž ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
def sum_all(*args):
    return sum(args)

result = sum_all(1, 2, 3, 4, 5)
print(result)  # ์ถœ๋ ฅ: 15

 

**kwargs

  • **kwargs๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ‚ค์›Œ๋“œ ์ธ์ž๋ฅผ ํ•˜๋‚˜์˜ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋ฐ›๋Š”๋‹ค.
  • kwargs.items()๋Š” ๋”•์…”๋„ˆ๋ฆฌ์˜ ํ‚ค์™€ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="์˜ํฌ", age=30)  
# ์ถœ๋ ฅ:
# name: ์˜ํฌ
# age: 30

 

+) JavaScript์—์„œ๋„ ์œ ์‚ฌํ•˜๊ฒŒ ๊ฐ€๋ณ€ ์ธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž(...)๋Š” Python์˜ *args์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋ฉฐ, ๊ฐ์ฒด๋กœ ๋ฐ›์€ ์ธ์ž๋Š” kwargs์™€ ๋น„์Šทํ•˜๋‹ค.

// JavaScript์—์„œ ๊ฐ€๋ณ€ ์ธ์ž
function sumAll(...args) {
    return args.reduce((acc, cur) => acc + cur, 0);
}

console.log(sumAll(1, 2, 3, 4, 5));  // ์ถœ๋ ฅ: 15

// JavaScript์—์„œ ๊ฐ์ฒด ํ‚ค-๊ฐ’ ๋ฐ›๊ธฐ
function printInfo(obj) {
    for (let key in obj) {
        console.log(`${key}: ${obj[key]}`);
    }
}

printInfo({ name: "์˜ํฌ", age: 30 });
// ์ถœ๋ ฅ:// name: ์˜ํฌ// age: 30

6. ๋žŒ๋‹ค ํ•จ์ˆ˜ (Lambda Functions)

๋žŒ๋‹ค ํ•จ์ˆ˜๋Š” ์ต๋ช… ํ•จ์ˆ˜๋กœ, ์ด๋ฆ„ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜์ด๋‹ค. ์ฃผ๋กœ ์ผํšŒ์„ฑ ํ•จ์ˆ˜๋‚˜ ์ฝ”๋“œ๊ฐ€ ์งง์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. lambda ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฐ˜ํ™˜๊ฐ’์„ ๊ฐ„๋‹จํžˆ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

# ๋žŒ๋‹ค ํ•จ์ˆ˜ ์˜ˆ์‹œ
square = lambda x: x ** 2
print(square(5))  # ์ถœ๋ ฅ: 25

# ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ์ž‘์„ฑํ•œ ๊ฒฝ์šฐ
def square_fn(x):
    return x ** 2

print(square_fn(5))  # ์ถœ๋ ฅ: 25
  • lambda x : x๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜. ํ•จ์ˆ˜์˜ ์ธ์ž๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • x ** 2 : **๋Š” ์ œ๊ณฑ ์—ฐ์‚ฐ์ž๋กœ, x์˜ ์ œ๊ณฑ์„ ๊ณ„์‚ฐํ•œ๋‹ค. ๋”ฐ๋ผ์„œ x๊ฐ€ 5๋ผ๋ฉด x ** 2๋Š” 5 ** 2๊ฐ€ ๋˜์–ด 25๊ฐ€ ๋œ๋‹ค.
  • x ** 3์€ x์˜ ์„ธ์ œ๊ณฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, x๋ฅผ 3๋ฒˆ ๊ณฑํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. x**3์€ 125(5์˜ ์„ธ์ œ๊ณฑ)๊ฐ€ ๋œ๋‹ค.
๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

1. If๋ฌธ

if๋ฌธ์€ ์ฃผ์–ด์ง„ ์กฐ๊ฑด์ด ์ฐธ์ผ ๊ฒฝ์šฐ์—๋งŒ ์ฝ”๋“œ ๋ธ”๋ก์„ ์‹คํ–‰ํ•œ๋‹ค. ์กฐ๊ฑด์ด True์ผ ๋•Œ๋งŒ ๋“ค์—ฌ์“ฐ๊ธฐ๋œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

x = 10
if x > 5:
    print("x๋Š” 5๋ณด๋‹ค ํฝ๋‹ˆ๋‹ค.")  # ์ถœ๋ ฅ: x๋Š” 5๋ณด๋‹ค ํฝ๋‹ˆ๋‹ค.
else:
    print("x๋Š” 5 ์ดํ•˜์ž…๋‹ˆ๋‹ค.")

 

2. For๋ฌธ

for๋ฌธ์€ ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ, ๋”•์…”๋„ˆ๋ฆฌ, ๋ฌธ์ž์—ด ๋“ฑ ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์‹œํ€€์Šค์˜ ๊ฐ ํ•ญ๋ชฉ์„ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

fruits = ["์‚ฌ๊ณผ", "๋ฐ”๋‚˜๋‚˜", "์ฒด๋ฆฌ"]
for fruit in fruits:
    print(fruit)  # ์ถœ๋ ฅ: ์‚ฌ๊ณผ, ๋ฐ”๋‚˜๋‚˜, ์ฒด๋ฆฌ
# range()๋ฅผ ์‚ฌ์šฉํ•ด ์ˆซ์ž ์‹œํ€€์Šค๋ฅผ ๋ฐ˜๋ณต
for i in range(3):
    print(i)  # ์ถœ๋ ฅ: 0, 1, 2

3. While๋ฌธ 

while๋ฌธ์€ ์กฐ๊ฑด์ด ์ฐธ์ธ ๋™์•ˆ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณต ์‹คํ–‰ํ•œ๋‹ค. ์กฐ๊ฑด์ด False๊ฐ€ ๋˜๊ฑฐ๋‚˜ break๋ฅผ ๋งŒ๋‚˜๋ฉด ๋ฐ˜๋ณต์ด ์ข…๋ฃŒ๋œ๋‹ค.

x = 0
while x < 5:
    print(x)  # ์ถœ๋ ฅ: 0, 1, 2, 3, 4
    x += 1
import random

target = random.randint(1, 10)  # 1๋ถ€ํ„ฐ 10 ์‚ฌ์ด์˜ ๋žœ๋ค ์ˆซ์ž๋ฅผ ์ƒ์„ฑ

while True:
    guess = int(input("1-10 ์‚ฌ์ด์˜ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: "))  # ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›์Œ
    if guess == target:
        print("์ •๋‹ต๐Ÿ˜†")
        break  # ์ •๋‹ต์„ ๋งž์ท„์œผ๋ฏ€๋กœ ๋ฐ˜๋ณต ์ข…๋ฃŒ
    elif guess < target:
        print("up๐Ÿ˜‰") # ์ž…๋ ฅํ•œ ์ˆซ์ž๊ฐ€ ๋ชฉํ‘œ ์ˆซ์ž๋ณด๋‹ค ์ž‘์„ ๋•Œ
    elif guess > target:
        print("down๐Ÿ˜‰") # ์ž…๋ ฅํ•œ ์ˆซ์ž๊ฐ€ ๋ชฉํ‘œ ์ˆซ์ž๋ณด๋‹ค ํด ๋•Œ
๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

1. ๋ฌธ์ž์—ด (String)

  • ๋ฌธ์ž์—ด์€ ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ž๋ฃŒํ˜•.
  • ํฐ๋”ฐ์˜ดํ‘œ(") ๋˜๋Š” ์ž‘์€๋”ฐ์˜ดํ‘œ(')๋กœ ๋ฌธ์ž์—ด์„ ์ •์˜ํ•œ๋‹ค.
  • ๋ฌธ์ž์—ด์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฉฐ(immutable), ์ธ๋ฑ์‹ฑ๊ณผ ์Šฌ๋ผ์ด์‹ฑ์„ ํ†ตํ•ด ๋ฌธ์ž์—ด์˜ ๊ฐœ๋ณ„ ๋ฌธ์ž์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
text = "Hello, World!"
print(text)  # ์ถœ๋ ฅ: Hello, World!

# ์ธ๋ฑ์‹ฑ์„ ํ†ตํ•ด ๋ฌธ์ž ์ ‘๊ทผ
print(text[0])  # ์ถœ๋ ฅ: H

# ์Šฌ๋ผ์ด์‹ฑ์„ ํ†ตํ•ด ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ ‘๊ทผ
print(text[0:5])  # ์ถœ๋ ฅ: Hello

2. ์ˆซ์ž (Number)

  •  ์ˆซ์ž๊ฐ€ ์ •์ˆ˜(int)์™€ ์†Œ์ˆ˜(float)๋กœ ๋‚˜๋‰œ๋‹ค.
  • cf) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ์šฐ ์ •์ˆ˜์™€ ์†Œ์ˆ˜ ๋ชจ๋‘ number ํƒ€์ž…์œผ๋กœ ๊ตฌ๋ถ„์ด ์—†๋‹ค.
num = 10  # ์ •์ˆ˜
pi = 3.14  # ์†Œ์ˆ˜
print(num, pi)  # ์ถœ๋ ฅ: 10 3.14

# ์‚ฐ์ˆ  ์—ฐ์‚ฐ
result = num + pi
print(result)  # ์ถœ๋ ฅ: 13.14

3. ๋ถˆ๋ฆฐ (Boolean)

  • ๋ถˆ๋ฆฐ์€ True ๋˜๋Š” False ๋‘ ๊ฐ€์ง€ ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‹ค.
  • ์ฃผ๋กœ ์กฐ๊ฑด๋ฌธ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
  • Python์—์„œ๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ๋ฐ˜๋“œ์‹œ True, False๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
is_active = True
print(is_active)  # ์ถœ๋ ฅ: True

# ์กฐ๊ฑด๋ฌธ์—์„œ ์‚ฌ์šฉ
if is_active:
    print("ํ™œ์„ฑ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.")  # ์ถœ๋ ฅ: ํ™œ์„ฑ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

4. ๋ฆฌ์ŠคํŠธ (List) :: [ ]

  • ๋ฆฌ์ŠคํŠธ๋Š” ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ, ์ค‘๋ณต๋œ ๊ฐ’์„ ํ—ˆ์šฉํ•œ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ๋Š” ๋Œ€๊ด„ํ˜ธ[ ]๋กœ ์ •์˜๋œ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ธ๋ฑ์‹ฑ๊ณผ ์Šฌ๋ผ์ด์‹ฑ์„ ํ†ตํ•ด ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ  ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • JavaScript์˜ ๋ฐฐ์—ด๊ณผ ์œ ์‚ฌ
fruits = ["์‚ฌ๊ณผ", "๋ฐ”๋‚˜๋‚˜", "์ฒด๋ฆฌ"]
print(fruits)  # ์ถœ๋ ฅ: ['์‚ฌ๊ณผ', '๋ฐ”๋‚˜๋‚˜', '์ฒด๋ฆฌ']

# ๊ฐ’์„ ๋ณ€๊ฒฝ
fruits[1] = "๋”ธ๊ธฐ"
print(fruits)  # ์ถœ๋ ฅ: ['์‚ฌ๊ณผ', '๋”ธ๊ธฐ', '์ฒด๋ฆฌ']

# ๊ฐ’์„ ์ถ”๊ฐ€
fruits.append("ํฌ๋„")
print(fruits)  # ์ถœ๋ ฅ: ['์‚ฌ๊ณผ', '๋”ธ๊ธฐ', '์ฒด๋ฆฌ', 'ํฌ๋„']

5. ํŠœํ”Œ (Tuple) :: ( ) 

  • ํŠœํ”Œ์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š”(immutable) ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‹ค.
  • ์†Œ๊ด„ํ˜ธ( )๋กœ ์ •์˜๋˜๋ฉฐ, ์ค‘๋ณต๋œ ๊ฐ’์„ ํ—ˆ์šฉํ•œ๋‹ค.
  • ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ ํŠœํ”Œ์˜ ๊ฐ’์€ ์ˆ˜์ •, ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค.
coordinates = (10, 20)
print(coordinates)  # ์ถœ๋ ฅ: (10, 20)

# ์ธ๋ฑ์‹ฑ์„ ํ†ตํ•ด ์š”์†Œ ์ ‘๊ทผ
print(coordinates[0])  # ์ถœ๋ ฅ: 10

# ํŠœํ”Œ์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋‹ค์Œ ์ค„์€ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
# coordinates[0] = 30  # TypeError

6. ์ง‘ํ•ฉ (Set) :: { }

  • ์ง‘ํ•ฉ์€ ์ค‘๋ณต๋œ ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”, ์ˆœ์„œ๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‹ค.
  • ์ค‘๊ด„ํ˜ธ{ )๋กœ ์ •์˜๋˜๋ฉฐ, ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ง‘ํ•ฉ์˜ ์š”์†Œ๋Š” ์ˆœ์„œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์‹ฑ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
numbers = {1, 2, 3, 4, 5, 1, 2}
print(numbers)  # ์ถœ๋ ฅ: {1, 2, 3, 4, 5} (์ค‘๋ณต ๊ฐ’์€ ์ œ๊ฑฐ๋จ)

# ๊ฐ’์„ ์ถ”๊ฐ€
numbers.add(6)
print(numbers)  # ์ถœ๋ ฅ: {1, 2, 3, 4, 5, 6}

7. ๋”•์…”๋„ˆ๋ฆฌ (Dictionary) :: { }

  • ๋”•์…”๋„ˆ๋ฆฌ๋Š” ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‹ค.
  • ์ค‘๊ด„ํ˜ธ{ }๋กœ ์ •์˜๋˜๋ฉฐ, ํ‚ค๋ฅผ ํ†ตํ•ด ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ค‘๋ณต๋œ ํ‚ค๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์ง€๋งŒ, ๊ฐ’์€ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • JavaScript์˜ ๊ฐ์ฒด์™€ ์œ ์‚ฌ

 

person = {"name": "Alice", "age": 25}
print(person)  # ์ถœ๋ ฅ: {'name': 'Alice', 'age': 25}

# ํ‚ค๋ฅผ ํ†ตํ•ด ๊ฐ’ ์ ‘๊ทผ
print(person["name"])  # ์ถœ๋ ฅ: Alice

# ๊ฐ’์„ ์ˆ˜์ •
person["age"] = 26
print(person)  # ์ถœ๋ ฅ: {'name': 'Alice', 'age': 26}

 

 

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

์ •์ฒ˜๊ธฐ ์ค€๋น„ํ•  ๋•Œ ์ •๋ฆฌํ•ด๋’€๋˜ ํŒŒ์ด์ฌ ์ž๋ฃŒํ˜• 4๊ฐœ ๋น„๊ต!

 

๋‹ค์‹œ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์˜ˆ์ „์— ์ •๋ฆฌํ•ด๋’€๋˜ ์ž๋ฃŒ ์ฐพ์•˜๋Š”๋ฐ ๋ณ„ ๋‚ด์šฉ์ด ์—†...๋„ค...ใ…Žใ…Žใ…Žใ…Ž

์‚ฌ์‹ค ๋ฒผ๋ ฅ์น˜๊ธฐ๋กœ ์…ค๊ณต๋ถ€ ํ•  ๋•Œ๋Š” ๋‚ด๋ฉ‹๋Œ€๋กœ array, object!! ํ•˜๋ฉด์„œ ํ’€๋‹ค๊ฐ€ (1,2,3) ์ด๋ ‡๊ฒŒ ์ƒ๊ธด ํŠœํ”Œ๋ณด๊ณ  ๋‡Œ์ •์ง€ ์™”์—ˆ์Œ..ํ—ฟ

 

๋˜‘๋ฐ”๋กœ ์ •๋ฆฌํ•ด๋‘๊ณ  ์ œ๋Œ€๋กœ ๊ณต๋ถ€ํ•ด๋ณด์ž~~~~~~~~~~~~~~~~~~~~~~~

โœ… ํŒŒ์ด์ฌ ์ž๋ฃŒํ˜•(list, tuple, set, dict)

[list] ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์˜ ๋ชจ์Œ. ์ค‘๋ณต ํ—ˆ์šฉ [1, 2.5, 'hello', True ]
(tuple) ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์˜ ๋ชจ์Œ (1, 2.5, 'hello', True)
{set} ์ˆœ์„œ๊ฐ€ ์—†๊ณ  ์ค‘๋ณต ์—†๋Š” ๊ฐ์ฒด์˜ ๋ชจ์Œ {1, 2.5, 'hello', True}
{dictionary} ์ˆœ์„œ๊ฐ€ ์—†๋Š” key:value ํ˜•ํƒœ์˜ ๋ชจ์Œ {'a':1, 'b':2, 'c':3 }

 

โœ… ์ž๋ฃŒํ˜• ๋ณ„ ๊ฐ’ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ

๐Ÿ”ฅ ํŠœํ”Œ์€ ๋ถˆ๋ณ€ ๊ฐ์ฒด!!!! ๊ฐ’ ์ˆ˜์ • / ์ถ”๊ฐ€ / ์‚ญ์ œ ๋ถˆ๊ฐ€

list
[ ]
์ˆ˜์ • my_list = [1, 2, 3]
my_list[1] = 4  # [1, 4, 3]
์ถ”๊ฐ€ // append(value)๋Š” ๋ฆฌ์ŠคํŠธ ๋์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ณ , insert(index, value)๋Š” ํŠน์ • ์ธ๋ฑ์Šค์— ๊ฐ’์„ ์ถ”๊ฐ€
my_list = [1, 2, 3]
my_list.append(4)   # [1, 2, 3, 4]
my_list.insert(1, 5)   # [1, 5, 2, 3, 4]
my_list.extend([6, 7])   # [1, 5, 2, 3, 4, 6, 7]
์‚ญ์ œ my_list = [1, 2, 3, 4]
my_list.remove(3)   # [1, 2, 4]
my_list.pop(1)   # [1, 4]
del my_list[0]   # [4]
my_list.clear()   # []
set
{ }
์ˆ˜์ • ๋ถˆ๊ฐ€!!!!
์ถ”๊ฐ€ my_set = {1, 2, 3}
my_set.add(4)   # {1, 2, 3, 4}
my_set.update([5, 6])   # {1, 2, 3, 4, 5, 6}
์‚ญ์ œ my_set = {1, 2, 3, 4}
my_set.remove(3)   # {1, 2, 4}
my_set.discard(2)   # {1, 4}
my_set.pop()   # ์ž„์˜์˜ ์š”์†Œ ์ œ๊ฑฐ, ์˜ˆ: {2, 3, 4} ๋˜๋Š” {1, 3, 4}
my_set.clear()   # set()
dictionary
{ key:value }
์ˆ˜์ • my_dict = {'a': 1, 'b': 2}
my_dict['a'] = 3   # {'a': 3, 'b': 2}
์ถ”๊ฐ€ my_dict = {'a': 1, 'b': 2}
my_dict['c'] = 3     # {'a': 1, 'b': 2, 'c': 3}
my_dict.update({'d': 4})   # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
์‚ญ์ œ my_dict = {'a': 1, 'b': 2, 'c': 3}
del my_dict['b']   # {'a': 1, 'c': 3}
my_dict.pop('a')   # {'c': 3}
my_dict.clear()   # {}

 

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

์šฐ์„  ํŒŒ์ด์ฌ ์„ค์น˜ ๋ฐฉ๋ฒ•์—๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

ํŒŒ์ด์ฌ ๊ณตํ™ˆ ๋‹ค์šด๋กœ๋“œ / ์•„๋‚˜์ฝ˜๋‹ค ๋‹ค์šด๋กœ๋“œ / ๋ฏธ๋‹ˆ์ฝ˜๋‹ค ๋‹ค์šด๋กœ๋“œ

 

• ํŒŒ์ด์ฌ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ :: https://www.python.org

 

Welcome to Python.org

The official home of the Python Programming Language

www.python.org

 

 • anaconda  :: https://www.anaconda.com 

 

Anaconda | The Operating System for AI

Democratize AI innovation with the world’s most trusted open ecosystem for data science and AI development.

www.anaconda.com

 

• miniconda ::  https://docs.anaconda.com/miniconda/

 

Miniconda — Anaconda documentation

These three commands quickly and quietly download the latest 64-bit Windows installer, rename it to a shorter file name, silently install, and then delete the installer: curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe -o minic

docs.anaconda.com

 

ํŒŒ์ด์ฌ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ํŒŒ์ด์ฌ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด, ๊ธฐ๋ณธ์ ์ธ ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ์„ค์น˜๋œ๋‹ค.

๋ฐ˜๋ฉด, Anaconda๋‚˜ Miniconda๋Š” ํŒŒ์ด์ฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(conda)๋„ ํฌํ•จ๋˜์–ด ์žˆ์–ด, ๋ฐ์ดํ„ฐ ๊ณผํ•™ ๋ฐ ๋จธ์‹  ๋Ÿฌ๋‹์— ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค :)

 

Anaconda

  • ์ „์ฒด ํŒจํ‚ค์ง€: Anaconda๋Š” ๋งŽ์€ ํŒจํ‚ค์ง€๋ฅผ ํฌํ•จํ•˜์—ฌ ์ œ๊ณตํ•˜๋Š” ๋ฐฐํฌํŒ์œผ๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ 1,500๊ฐœ ์ด์ƒ์˜ ํŒจํ‚ค์ง€๊ฐ€ ์‚ฌ์ „ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์นœํ™”์ : GUI(Anaconda Navigator)๋ฅผ ์ œ๊ณตํ•˜์—ฌ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์™€ ํ™˜๊ฒฝ ๊ด€๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€๊ทœ๋ชจ: ์„ค์น˜ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ , ๋งŽ์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

Miniconda

  • ๊ฒฝ๋Ÿ‰ ๋ฐฐํฌํŒ: Miniconda๋Š” Anaconda์˜ ๊ฒฝ๋Ÿ‰ ๋ฒ„์ „์œผ๋กœ, ๊ธฐ๋ณธ์ ์œผ๋กœ Python๊ณผ conda ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋งŒ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์ง์ ‘ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค.
  • ์œ ์—ฐ์„ฑ: ํ•„์š”์— ๋”ฐ๋ผ ์›ํ•˜๋Š” ํŒจํ‚ค์ง€๋งŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์–ด ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋น ๋ฅธ ์„ค์น˜: ๊ธฐ๋ณธ ์„ค์น˜๊ฐ€ ์ž‘๊ณ  ๊ฐ„๋‹จํ•˜์—ฌ, ์‹ ์†ํ•˜๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ์˜ npm์ด๋‚˜ yarn๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์šฐ์„  ๋ฏธ๋‹ˆ์ฝ˜๋‹ค๋ฅผ ์„ค์น˜ํ•ด๋ณด๊ธฐ๋กœ!

 

 https://docs.anaconda.com/miniconda/ ์ ‘์†ํ•˜์—ฌ ์Šคํฌ๋กค์„ ์ญ‰- ๋‚ด๋ ค ์šด์˜์ฒด์ œ์— ๋งž๋Š” ๊ฑธ๋กœ ๋‹ค์šด๋กœ๋“œ.

์œˆ๋„์šฐ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งจ ์ฒ˜์Œ๊ฑธ๋กœ ํด๋ฆญํด๋ฆญ

 

์ญ‰์ญ‰ ๊ณ„์† next ํด๋ฆญํ•˜๋‹ค๋ณด๋ฉด ์„ค์น˜ ์™„๋ฃŒ!

 

๋ฏธ๋ฃจ๊ณ  ๋ฏธ๋ฃจ๊ณ  ๋ฏธ๋ค„์™”๋˜ ํŒŒ์ด์ฌ 

๊ฐ‘์ž‘์Šค๋Ÿฝ๊ฒŒ ๋ƒ…๋‹ค ์„ค์น˜ํ•ด๋ถ€๋ €๋‹ค. ์‹œ์ž‘์ด ๋ฐ˜์ด๋žฌ์œผ๋‹ˆ๊นŒ ๐Ÿ‘ป  ์šฐํ•˜ํ•˜ํ•ณ

์ •์ฒ˜๊ธฐ ๋ฌธํ’€๋กœ๋งŒ ์ ‘ํ•œ๊ฒŒ ๋‹ค์ง€๋งŒ.. ์ผ๋‹จ ๋ง›๋ณด๊ธฐ๋ผ๋„ ํ•ด๋ณด์žฃ!! 10์›” ํŒŒ์ด์ฌ ๊ณ ๊ณ ์”ฝ '~'

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

๋‹ค ๊นŒ๋จน์–ด๋ฒ„๋ฆฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์‹œ ๋ณต๊ธฐ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‹œ์ž‘ํ•œ ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ!

๋งŒ๋“ค๋‹ค ๋ณด๋‹ˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฒ˜์Œ ๋ฐฐ์šธ ๋•Œ ์จ๋‚ด๋ ค๊ฐ”๋˜ ์ฝ”๋“œ์™€ ๋ณ„๋ฐ˜ ์ฐจ์ด๊ฐ€ ์—†๋‹ค..

 

์ฒ˜์Œ์ด๋ž‘ ๋˜‘๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ๋‹จ์ˆœ ๋ณต์Šต ๋‹จ์ˆœ ๋…ธ๊ฐ€๋‹ค์ผ๋ฟ..!!!!

๋ญ๋ผ๋„ ๋ฐœ์ „๋œ๊ฒŒ ์žˆ์–ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ.......???????????๋ž€ ์ƒ๊ฐ์—

 

๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค!


๐Ÿ‘ป ์ด์ „ ์ฝ”๋“œ

์ „์—๋Š” ๋ƒ…๋‹ค ํ•„์š”ํ•œ ์š”์†Œ๋“ค ๋Š์ž„์—†์ด ์ƒ์„ฑ ํ›„

      const wrapper = document.createElement("div");
      const header = document.createElement("header");
      const inputContainer = document.createElement("div");
      const todoContainer = document.createElement("div");

 

๋ƒ…๋‹ค ๋ถ™์—ฌ๋ฒ„๋ฆฌ๊ธฐ..

      document.body.appendChild(wrapper);
      wrapper.appendChild(header);
      wrapper.appendChild(inputContainer);
      wrapper.appendChild(todoContainer);

 

๋ถ€๋ชจ์š”์†Œ ์ƒ์„ฑ, ์ž์‹์š”์†Œ ์ƒ์„ฑ, ์ž์‹์š”์†Œ ๋ถ€๋ชจ์š”์†Œ์— ๋ถ™์ด๊ธฐ..

์ž๊พธ ๋Š˜์–ด๋งŒ ๊ฐ€๋Š” createElement, appendChild......์ง€๊ธ‹์ง€๊ธ‹ํ–..


โœจ ๋ฆฌํŒฉํ† ๋ง

function createElement({
  tagName,
  properties,
  parent,
  children,
  count = 1,
}) {
  function create() {
    const element = document.createElement(tagName);  // ํƒœ๊ทธ ์ƒ์„ฑ
    Object.assign(element, properties);               // ์†์„ฑ ํ• ๋‹น
    parent?.appendChild(element);                     // ๋ถ€๋ชจ์— ์ถ”๊ฐ€

    // ์ž์‹ ์š”์†Œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์žฌ๊ท€์ ์œผ๋กœ ์ž์‹ ์ƒ์„ฑ
    children?.map((child) => {
      child.parent = element;   // ํ˜„์žฌ ์ƒ์„ฑ๋œ ์š”์†Œ๋ฅผ ๋ถ€๋ชจ๋กœ ์„ค์ •
      createElement(child);     // ์ž์‹ ์š”์†Œ๋ฅผ ์œ„ํ•œ createElement ์žฌ๊ท€ ํ˜ธ์ถœ
    });

    return element;
  }

  if (count > 1) {
    const results = [];
    for (let i = 0; i < count; i++) {
      results.push(create());
    }
    return results;
  } else {
    return create();
  }
}
  • createElement์™€ appendChild๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ createElement ํ•จ์ˆ˜๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์˜€๋‹ค.
  • createElement ํ•จ์ˆ˜๋Š” ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ํ•œ ๋ฒˆ์— ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก count ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ๋™์ ์œผ๋กœ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„์˜ DOM ๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด children ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด๋กœ์จ ๋ถ€๋ชจ ์š”์†Œ๊ฐ€ ์ž์‹ ์š”์†Œ๋ฅผ ๊ฐ–๋Š” ๋ณต์žกํ•œ DOM ํŠธ๋ฆฌ๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Object.assign์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ์— ์†์„ฑ๋“ค์„ ์œ ์—ฐํ•˜๊ฒŒ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์†์„ฑ์„ ํ•œ ๋ฒˆ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ์ถ”๊ฐ€์ ์ธ ์†์„ฑ์ด ์ƒ๊ธฐ๋”๋ผ๋„ ํ•จ์ˆ˜ ์ˆ˜์ • ์—†์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
Object.assign()์€ ๊ฐ์ฒด์˜ ์†์„ฑ๋“ค์„ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋ณต์‚ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ๋Š” properties ๊ฐ์ฒด์˜ ์†์„ฑ๋“ค์„ ์ƒ์„ฑ๋œ ํƒœ๊ทธ(element)์— ๋ณต์‚ฌํ•˜์—ฌ, ํƒœ๊ทธ์˜ ์†์„ฑ์„ ์„ค์ •ํ•œ๋‹ค.

 

 

โœจ ๋ฆฌํŒฉํ† ๋งํ•œ createElement ์‚ฌ์šฉํ•˜๊ธฐ

children ์š”์†Œ๊ฐ€ ๋Š์ž„ ์—†์ด ์ƒ๊ฒจ ๋ฌดํ•œ ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ๋ฐœ์ƒ..

๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด header, inputContainer, itemContainer์˜ ํฐ ๋ฉ์–ด๋ฆฌ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ƒ์„ฑํ•ด์ฃผ์—ˆ๋‹ค.

      const app = createElement({
        tagName: "div",
        properties: { id: "app" },
        parent: document.body,
      });

      const header = createElement({
        tagName: "header",
        properties: { id: "header" },
        parent: app,
        children: [
          {
            tagName: "div",
            properties: { className: "counter" },
            children: [
              {
                tagName: "span",
                properties: { textContent: "total" },
              },
              {
                tagName: "span",
                properties: { textContent: "0" },
              },
              {
                tagName: "span",
                properties: { textContent: "completed" },
              },
              {
                tagName: "span",
                properties: { textContent: "0" },
              },
            ],
          },
          {
            tagName: "h1",
            properties: { textContent: "T๐ŸŒž D๐ŸŽฏ LIST", className: "title" },
          },

          {
            tagName: "span",
            properties: { textContent: "ํ•  ์ผ์„ ๊ธฐ๋กํ•˜์„ธ์š”๐ŸŒฑ" },
          },
        ],
      });
      
      // ์ดํ›„ ์ƒ๋žต..

 


์ฐธ๊ณ ๐Ÿง

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

 

Object.assign() - JavaScript | MDN

Object.assign() ๋ฉ”์„œ๋“œ๋Š” ์ถœ์ฒ˜ ๊ฐ์ฒด๋“ค์˜ ๋ชจ๋“  ์—ด๊ฑฐ ๊ฐ€๋Šฅํ•œ ์ž์ฒด ์†์„ฑ์„ ๋ณต์‚ฌํ•ด ๋Œ€์ƒ ๊ฐ์ฒด์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„ ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

developer.mozilla.org

 

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

๋ฆฌ์•กํŠธ๋งŒ ํ•˜๋‹ค๋ณด๋‹ˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ง€์‹์ด ๋ชจ๋‘ ์ฆ๋ฐœํ•ด๋ฒ„๋ฆฐ ๋Š๋‚Œ....

๋ฉ”์„œ๋“œ๋ช…๋“ค์„ ์ฃ„๋‹ค ๊นŒ๋จน์–ด๋ฒ„๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค. ๊ธ‰ํ•˜๊ฒŒ ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋ฉฐ ๊ธฐ์–ตํ•ด๋‚ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

DOM์„ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•ด์•ผ ํ•  ์ง€ ๊ณ ๋ฏผ์ด ๋˜์—ˆ๋‹ค.

๋งค๋ฒˆ ๊นŒ๋จน์–ด์„œ ๋งค๋ฒˆ ๊ณ ๋ฏผํ•˜๊ณ  ๋งค๋ฒˆ ๊ฒ€์ƒ‰ํ•˜๊ณ !!! ์ง€๊ฒจ์›Œ... ์ด๋ฒˆ์—” ์ •๋ฆฌํ•ด๋†”์•ผ์ง€.


ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ ๋ฅผ ๋‹ค๋ฃจ๊ธฐ:  innerText,textContent

๐Ÿ“š innerText

  • ์š”์†Œ์˜ ๋ Œ๋”๋ง๋œ ํ…์ŠคํŠธ๋งŒ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ ํ›„์˜ ํ…์ŠคํŠธ๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค.
  • display: none์ด๋‚˜ visibility: hidden์œผ๋กœ ์ˆจ๊ฒจ์ง„ ์š”์†Œ์˜ ํ…์ŠคํŠธ๋„ textContent๋กœ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, innerText๋Š” ์ˆจ๊ฒจ์ง„ ์š”์†Œ์˜ ํ…์ŠคํŠธ๋ฅผ ๋ฌด์‹œํ•œ๋‹ค.
  • textContent๋ณด๋‹ค ๋ Œ๋”๋ง ๊ฒฐ๊ณผ์— ์˜์กดํ•˜๋ฏ€๋กœ ๋ณต์žกํ•œ ๊ตฌ์กฐ์—์„œ๋Š” ์กฐ๊ธˆ ๋” ๊นŒ๋‹ค๋กœ์šธ ์ˆ˜ ์žˆ๋‹ค.
  • innerText๋Š” DOM์˜ ์Šคํƒ€์ผ์„ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ textContent๋ณด๋‹ค ์•ฝ๊ฐ„ ๋Š๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ๋Š” ํฐ ์ฐจ์ด๊ฐ€ ์—†๋‹ค.

๐Ÿ“š textContent

  •  ์š”์†Œ์˜ ํ…์ŠคํŠธ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ฐ€์ ธ์˜จ๋‹ค. HTML ํƒœ๊ทธ๋Š” ํ…์ŠคํŠธ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ํƒœ๊ทธ๊ฐ€ ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋”ฐ๋ผ์„œ ํƒœ๊ทธ ์—†์ด ์ˆœ์ˆ˜ํ•œ ํ…์ŠคํŠธ๋งŒ ๋‹ค๋ฃฐ ๋•Œ ์ ํ•ฉํ•˜๋‹ค.
  • ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ๋งค์šฐ ๋น ๋ฅด๋ฉฐ, DOM์„ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๊ณ  ํ…์ŠคํŠธ๋งŒ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค.
  • ํ…์ŠคํŠธ๋งŒ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— HTML ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ•  ํ•„์š”๊ฐ€ ์—†์–ด ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์‰ฝ๋‹ค.

HTML ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ฝ์ž…: innerHTML, appendChild, insertAdjacentHTML

๐Ÿ“š innerHTML 

  • ์š”์†Œ ๋‚ด๋ถ€์˜ HTML์ด๋‚˜ XML ๋งˆํฌ์—…์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์„ค์ •ํ•œ๋‹ค.
  • HTML ๋งˆํฌ์—…์„ ํฌํ•จํ•œ ๋ฌธ์ž์—ด์„ ์‰ฝ๊ฒŒ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,  ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…(XSS) ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•˜๋‹ค.
    • ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ HTML์„ ์‚ฝ์ž…ํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” insertAdjacentHTML() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ํ•ฉํ•˜๋‹ค.
      ..Why๐Ÿง?
      innerHTML์€ ์š”์†Œ์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ , ๊ธฐ์กด์˜ ์ž์‹ ์š”์†Œ๊ฐ€ ์†์ƒ๋  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด, insertAdjacentHTML()์€ ๊ธฐ์กด์˜ DOM ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด HTML์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์–ด ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ ๋ฉด์—์„œ ์œ ๋ฆฌํ•˜๋‹ค.

๐Ÿ“š  insertAdjacentHTML() 

  • element.insertAdjacentHTML(position, text)
  • ๊ธฐ์กด ์š”์†Œ๋ฅผ ์œ ์ง€ํ•œ ์ฑ„๋กœ ์ง€์ •๋œ ์œ„์น˜(position)์— HTML ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•˜์—ฌ ์š”์†Œ๋กœ ์‚ฝ์ž…ํ•œ๋‹ค.
  • insertAdjacentHTML์€ ์š”์†Œ๋ฅผ ๋‹ค์‹œ ํŒŒ์‹ฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ•ด๋‹น ์š”์†Œ ์•ˆ์˜ ๊ธฐ์กด ์ž์‹ ์š”์†Œ๋ฅผ ์†์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.
  • HTML์„ ํ•œ ๋ฒˆ์— ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ด ๋น ๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ณด์•ˆ ๋ฌธ์ œ(XSS: Cross-site scripting)๋กœ ์ธํ•ด ์™ธ๋ถ€ ์ž…๋ ฅ์„ ์‚ฝ์ž…ํ•  ๋•Œ๋Š” ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
const el = document.getElementById('el')
el.insertAdjacentHTML('beforebegin', '<span>Before Begin</span>');// el ์ด์ „์— ์‚ฝ์ž…
el.insertAdjacentHTML('afterbegin', '<span>After Begin</span>'); // el์˜ ์ฒซ ๋ฒˆ์งธ ์ž์‹ ์ด์ „์— ์‚ฝ์ž…
el.insertAdjacentHTML('beforeend', '<span>Before End</span>'); // el์˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ์ดํ›„์— ์‚ฝ์ž… 
el.insertAdjacentHTML('afterend', '<span>After End</span>'); // el ์ดํ›„์— ์‚ฝ์ž…
<span> --A-- </span>
<span>Before Begin</span> 
<span id="el"> 
	<span>After Begin</span> 
    <span> --B-- </span>
    --C-- 
    <span> --D-- </span> 
    <span>Before End</span> 
 </span> 
 <span>After End</span> 
 <span> --E-- </span>

 

๐Ÿ“š appendChild()

  • ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์š”์†Œ๋ฅผ ๊ธฐ์กด DOM์˜ ์ž์‹์œผ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ์ฝ”๋“œ๊ฐ€ ๋ช…ํ™•ํ•˜๊ณ  ์ง๊ด€์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€ ๋ณด์ˆ˜์™€ ๊ฐ€๋…์„ฑ์ด ๋›ฐ์–ด๋‚˜๋‹ค.
  • ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ํ•œ ๋ฒˆ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ ์•ฝ๊ฐ„์˜ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ์„ฑ๋Šฅ์ด ์–‘ํ˜ธํ•˜๋‹ค.

โœจ ๊ฒฐ๋ก 

innerText vs textContent

innerText๋Š” ๋ Œ๋”๋ง๋œ ํ…์ŠคํŠธ๋งŒ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ€์ผ์— ์˜์กด์ ์ด๋‹ค. ๋˜ํ•œ ์ˆจ๊ฒจ์ง„ ์š”์†Œ์˜ ํ…์ŠคํŠธ๋Š” ๋ฌด์‹œ๋˜๋ฏ€๋กœ, ์ˆœ์ˆ˜ํ•œ ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ์—์„œ๋Š” textContent๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋”์šฑ ๋น ๋ฅด๊ณ  ๋‹จ์ˆœํ•˜๋‹ค. DOM ๊ตฌ์กฐ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๊ณ  ์ˆœ์ˆ˜ ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค. 

 

innerHTML vs insertAdjacentHTML vs appendChild

innerHTML์€ ๊ธฐ์กด์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ ๋ฎ์–ด์“ฐ๊ธฐ ๋•Œ๋ฌธ์—, ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค. insertAdjacentHTML์€ ๊ธฐ์กด ์š”์†Œ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด HTML์„ ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. (์ž์‹์š”์†Œ์˜ ํŒŒ์‹ฑ๊ณผ์ •์ด ์ƒ๋žต๋˜์–ด ๋” ๋น ๋ฅด๊ณ  ์„ฑ๋Šฅโฌ†)

 

ํ•˜์ง€๋งŒ insertAdjacentHTML๊ณผ innerHTML์€ XSS ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด appendChild๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€๋‹ค. ์„ฑ๋Šฅ ๋ฉด์—์„œ๋„ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์—์„œ๋Š” ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋œ๋‹ค.

 


๐Ÿง ์ฐธ๊ณ 
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText
https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent

https://developer.mozilla.org/ko/docs/Web/API/Element/innerHTML

https://developer.mozilla.org/ko/docs/Web/API/Element/insertAdjacentHTML

https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild

๋ฐ˜์‘ํ˜•

+ Recent posts