Hamutaro - Hamtaro 4

ETC.

[Svelte] Svelte๋ž€ ๋ฌด์—‡์ธ๊ฐ€

carsumin 2025. 8. 18. 21:36
Svelte ๋ž€?

 

  • ์ปดํŒŒ์ผ๋Ÿฌ ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ
    • ๋ฆฌ์•กํŠธ๋‚˜ ๋ทฐ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋™์ž‘ํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์‹ค์ œ ์‹คํ–‰ ์‹œ์ ์—์„œ Virtual DOM์„ ์ƒ์„ฑํ•จ
    • ๊ทธ์— ๋ฐ˜ํ•ด Svelte๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฏธ๋ฆฌ ์ตœ์ ํ™”๋œ ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•จ
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ Svelte๋Š” ๋ Œ๋”๋ง ์†๋„๊ฐ€ ๋น ๋ฆ„

 

๊ตฌ์กฐ์™€ ๋ฌธ๋ฒ•

 

<script>
  let count = 0;
  function increment() {
    count += 1;
  }
</script>

<style>
  button {
    font-size: 18px;
  }
</style>

<h1>Count: {count}</h1>
<button on:click={increment}>+</button>

 

  • <script> ์˜์—ญ : ์ปดํฌ๋„ŒํŠธ ๋กœ์ง
  • <style> ์˜์—ญ : ์ปดํฌ๋„ŒํŠธ ์ „์šฉ CSS (์ž๋™์œผ๋กœ ๋ฒ”์œ„ ํ•œ์ •๋จ, scoped ์ฒ˜๋ฆฌ)
  • ๋งˆํฌ์—… ์˜์—ญ : ์‹ค์ œ DOM ๊ตฌ์กฐ (HTML + Svelte ๋ฌธ๋ฒ•)

 

๋ฐ˜์‘ํ˜•(Reactivity) ๋ฌธ๋ฒ•
  • Svelte์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ๊ฐ„๋‹จํ•œ '๋ฐ˜์‘ํ˜•' ๋ฌธ๋ฒ•
// ๊ธฐ๋ณธ ๋ฐ˜์‘์„ฑ

let count = 0;

function increment() {
  count += 1; // count ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด UI ์ž๋™ ๊ฐฑ์‹ 
}

 

  • setState() ๊ฐ™์€ ๋ณ„๋„ ํ•จ์ˆ˜๊ฐ€ ํ•„์š”์—†์Œ, ๋ณ€์ˆ˜๋ฅผ ์žฌํ• ๋‹นํ•˜๋ฉด ์ž๋™์œผ๋กœ UI๊ฐ€ ์—…๋ฐ์ดํŠธ ๋จ
// ๋ฐ˜์‘ํ˜• ์„ ์–ธ๋ฌธ ($:)

let a = 1;
let b = 2;

$: sum = a + b; // a๋‚˜ b๊ฐ€ ๋ฐ”๋€Œ๋ฉด sum๋„ ์ž๋™ ์—…๋ฐ์ดํŠธ

 

 

๋ฐ์ดํ„ฐ ์ „๋‹ฌ (Props)
  • ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ๋„ ๊ฐ„๋‹จํ•จ
  • ๋ถ€๋ชจ -> ์ž์‹
<!-- Parent.svelte -->
<Child name="ํ™๊ธธ๋™" />
<!-- Child.svelte -->
<script>
  export let name;
</script>

<p>์•ˆ๋…•ํ•˜์„ธ์š”, {name}๋‹˜!</p>

 

 

์ƒํƒœ๊ด€๋ฆฌ
  • ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ ๊ฒฝ์šฐ Svelte store๋ฅผ ์‚ฌ์šฉ
// store.js
import { writable } from 'svelte/store';
export const count = writable(0);
<!-- App.svelte -->
<script>
  import { count } from './store.js';
</script>

<h1>{$count}</h1>
<button on:click={() => $count += 1}>+</button>

 

--> $count ๋ฌธ๋ฒ•์œผ๋กœ store์˜ ๊ฐ’์„ ์ž๋™์œผ๋กœ ๊ตฌ๋…/๊ฐฑ์‹ 

 

 

Svelte์˜ ์žฅ์ 
  • Virtual DOM ์—†์–ด์„œ ๋น ๋ฅธ ๋žœ๋”๋ง์ด ๊ฐ€๋Šฅํ•จ
  • ์ฝ”๋“œ๋Ÿ‰์ด ์ ๊ณ  ๊ฐ„๊ฒฐํ•จ
  • CSS๊ฐ€ ์ž๋™์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ๋ฒ”์œ„์— ํ•œ์ •๋จ
  • ๋นŒ๋“œ ํ›„ ์‹คํ–‰ํŒŒ์ผ์ด ๊ฐ€๋ฒผ์›€

 

Svelte์˜ ๋‹จ์ 
  • ์ƒํƒœ๊ณ„๊ฐ€ ๋ฆฌ์•กํŠธ๋‚˜ ๋ทฐ์— ๋น„ํ•ด์„œ ์ž‘์•„์„œ ๊ธฐ์—… ์ง€์› ๋„๊ตฌ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์ ์Œ

(์Šค๋ฒจํŠธ๊ฐ€ ๊ฐ€๋ณ๊ณ  ๋žœ๋”๋ง์ด ๋นจ๋ผ์„œ ์ข‹๊ธดํ•œ๋ฐ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์œผ๋กœ๋Š” ๊ตณ์ด ๋ฆฌ์•กํŠธ๋‚˜ ๋ทฐ ๋‘๊ณ  ์“ธ ํ•„์š”๋Š” ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค.)

  • ์ผ๋ถ€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธํ™˜์„ฑ ๋ถ€์กฑ