Coding Archive

๋…ธ๋งˆ๋“œ ์ฝ”๋” - ๋ฐ”๋‹๋ผ JS๋กœ ํฌ๋กฌ ์•ฑ ๋งŒ๋“ค๊ธฐ(8) ๋ณธ๋ฌธ

๐Ÿ–ฅ๏ธ Clone Coding

๋…ธ๋งˆ๋“œ ์ฝ”๋” - ๋ฐ”๋‹๋ผ JS๋กœ ํฌ๋กฌ ์•ฑ ๋งŒ๋“ค๊ธฐ(8)

์ฝ”๋“ฑ์–ด 2022. 6. 13. 15:24

#7 TO DO LIST

 

0. Setup

html

    <h1 id="greeting" class="hidden"></h1>
    <form id="todo-form">
      <input type="text" placeholder="Write a To Do and Press Enter" required>
    </form>
    <ul id="todo-list"></ul>

1) Todo-list๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด html์— form ํƒœ๊ทธ๋กœ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค. ๋‚˜์ค‘์— JavaScript์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ id๋Š” todo-form์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

 

2) form ์ž์ฒด๋Š” submit์ด๋ผ๋Š” ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ๋‚ด์žฅํ•œ ํ•˜๋‚˜์˜ ๋ฌถ์Œ์ผ ๋ฟ์ด๋‹ค. ์œ ์ €๊ฐ€ todo-list์— ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ธฐ์ž…ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— form ํƒœ๊ทธ ์•ˆ์— input ํƒœ๊ทธ๋ฅผ ๋„ฃ์–ด 'text'๋ฅผ ํƒ€์ดํ•‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

3) ๊ทธ ๋ฐ‘์— ul ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ todo-list์— ์ž‘์„ฑ๋œ text๊ฐ€ ์ €์žฅ ๋ฐ ๋‚˜์—ด๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

 

JavaScript

const toDoForm = document.getElementById("todo-form");
const toDoInput = document.querySelector("#todo-form input");
//const toDoInput = toDoForm.querySelector("input");
const toDoList = document.getElementById("todo-list");

function handleTodoSubmit(event) {
event.preventDefault();
const newTodo = toDoInput.value;
toDoInput.value = "";
}

toDoform.addEventListner("submit", handleTodoSubmit);

1) ์•ž์— html์—์„œ ๋งŒ๋“  ๊ตฌ์กฐ 3๊ฐ€์ง€ ('todo-form', 'todo-form ์•ˆ์˜ input', 'todo-list')๋ฅผ ๊ฐ๊ฐ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•œ๋‹ค.

 

2) ์ด์ „ greeting ๊ฐ•์˜์—์„œ form ํƒœ๊ทธ์—์„œ์˜ event๋Š” submit๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ , ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š” ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๊ฒŒ ๋œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, todo-list๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์ƒˆ๋กœ๊ณ ์นจ ๋œ๋‹ค๋ฉด ๋งค์šฐ ๋น„ํšจ์œจ์ ์ผ ๊ฒƒ์ด๋‹ค.

(todo-list๋ฅผ 1,000๋ฒˆ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด ๋ถˆํ•„์š”ํ•œ ์ƒˆ๋กœ๊ณ ์นจ์ด 1,000๋ฒˆ ๋ฐœ์ƒํ•˜๊ณ  1,000๋ฒˆ์˜ ๋žœ๋ค ํ•œ ์ด๋ฏธ์ง€๊ฐ€ ๋กœ๋“œ๋œ๋‹ค. → ๋ฐ์ดํ„ฐ์ ์œผ๋กœ ๋น„ํšจ์œจ์ , ์‹œ๊ฐ์ ์œผ๋กœ ๋ถˆํŽธ)

์ด๋ฅผ ๋ง‰๊ธฐ์œ„ํ•ด event.preventDefault()๋กœ ๊ธฐ๋ณธ๊ฐ’์„ ์—†์• ์ค€๋‹ค.

 

3) text ์ƒ์ž ์•ˆ์— ๊ธ€์„ ์ž‘์„ฑํ•˜๊ณ  enter๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ, ๊ทธ ๊ธ€์ด ์ดˆ๊ธฐํ™” ๋˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด toDoInput.value = ""; ์„ ํ†ตํ•ด value๋ฅผ ๋นˆ ํ…์ŠคํŠธ๋กœ ํ•œ๋‹ค.

 

4) text ์ƒ์ž๋ฅผ ๋น„๊ฒŒ ํ•˜๊ธฐ ์ „์— ์œ ์ €๊ฐ€ ์ž…๋ ฅํ•œ ํ…์ŠคํŠธ๋ฅผ ์ €์žฅํ•ด์•ผ ๋‚˜์ค‘์— ulํƒœ๊ทธ ์•ˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— toDoInput.value = ""; ๋กœ ๊ธฐ์ž…ํ•œ ํ…์ŠคํŠธ๊ฐ€ ์‚ฌ๋ผ์ง€๊ธฐ ์ด์ „์— const newTodo = toDoInput.value; ๋ฅผ ์ •์˜ํ•ด ๊ธฐ์ž…ํ•œ ํ…์ŠคํŠธ๊ฐ€ newTodo๋ผ๋Š” ๊ฐ’์— ์ €์žฅ๋˜๊ฒŒ ํ•œ๋‹ค.

 

5) ์•ž์˜ ์„ธ ๊ฐ€์ง€ ๋™์ž‘(๊ธฐ๋ณธ๊ฐ’ ๋ฐฉ์ง€, ํ…์ŠคํŠธ ์ €์žฅ, text ์ƒ์ž ๋น„์šฐ๊ธฐ)์€ ํ•œ ๋ฒˆ์— ์ด๋ฃจ์–ด์ง€๋Š” ์„ธํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์„ฑ ๋ฐ ํŽธ์˜๋ฅผ ์œ„ํ•ด handleTodoSubmit() ํ•จ์ˆ˜๋กœ ๋ฌถ์–ด์ค€๋‹ค.

 

6) todo-form ์•ˆ์—์„œ submit์ด ๋ฐœ์ƒํ•˜๋Š” ํŠน์ • ์ƒํ™ฉ์—์„œ handleTodoSubmmit ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด

toDoform.addEventListner("submit", handleTodoSubmit); ์„ ๊ธฐ์ž…ํ•œ๋‹ค.

(ํ•จ์ˆ˜ handleTodoSubmit์ด ํ•ญ์ƒ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด text ์ฐฝ์€ ํ•ญ์ƒ ๋น„์–ด์žˆ๋Š” ์ƒํƒœ ์ผ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—)

 

 

 

1. Adding ToDos

review

์ด์ „ ์˜์ƒ์—์„œ hadle.ToDoSubmit() ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ , 

event.preventDefault(); // ์ƒˆ๋กœ๊ณ ์นจ์„ ๋ง‰๊ณ 
const newTodo = toDoInput.value; // submitํ•˜๋Š” ํ…์ŠคํŠธ๋ฅผ ์ €์žฅํ•˜๊ณ 
toDoInput.value = ""; // ํ…์ŠคํŠธ์ƒ์ž ์•ˆ์˜ ํ…์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™”์‹œ์ผฐ๋‹ค.

์ž…๋ ฅํ•œ ํ…์ŠคํŠธ(todo)๊ฐ€ ํŽ˜์ด์ง€์— ๋ณด์ด๋Š” ๊ฒƒ์„ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ์— ๋งž๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๊ฒƒ์ด๋‹ค.

 

 

html  

์ด๋ฏธ html์— todo-list๋ผ๋Š” id๋ฅผ ๊ฐ€์ง„ ulํƒœ๊ทธ๋ฅผ ์ž‘์„ฑํ•ด ๋†“์•˜๊ณ , ์ด์ œ๋Š” ์ƒˆ๋กœ์šด ํ…์ŠคํŠธ๊ฐ€ ์ž…๋ ฅ๋  ๋•Œ๋งˆ๋‹ค ๊ทธ ์•ˆ์— li ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋‚˜์—ดํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— js์—์„œ ์ด๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ์งœ์•ผํ•œ๋‹ค.

 

 

JavaScript - todo list๋ฅผ ์›นํŽ˜์ด์ง€์—์„œ ์‹œ๊ฐํ™”ํ•˜๊ธฐ

function paintToDo(newTodo) {
  const li = document.createElement("li");
  const span = document.createElement("span");
  li.appendChild(span);
  span.innerText = newTodo.text;
  toDoList.appendChild(li);
}

1) html์— liํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ํ•œ๋‹ค.

 

2) html ๋‚ด์—์„œ spanํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ํ•œ๋‹ค. (๋‚˜์ค‘์— ๋ฆฌ์ŠคํŠธ ์‚ญ์ œ ์‹œ๋ฅผ ์œ„ํ•ด span ํƒœ๊ทธ๋ฅผ ์จ์คŒ)

 

3) li ํƒœ๊ทธ ์•ˆ์— spanํƒœ๊ทธ๋ฅผ ์ž์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. (li ์•ˆ์— span์„ ๋„ฃ์–ด์ฃผ๋Š” ์ด์œ  -> ๋ฒ„ํŠผ์„ ํ•จ๊ป˜ ๋„ฃ์–ด์ฃผ๊ธฐ ์œ„ํ•ด)

 

4) span ํƒœ๊ทธ ์•ˆ์˜ ํ…์ŠคํŠธ๊ฐ€ ์•ž์—์„œ ์„ค์ •ํ•œ newTodo๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ๋˜๋„๋ก ํ•œ๋‹ค. (newTodo๋Š” ํ…์ŠคํŠธ์— ์ž…๋ ฅํ•œ value๊ฐ’)

ex) ํ…์ŠคํŠธ ์ƒ์ž ์•ˆ์— "์•ˆ๋…•"์„ ์ž…๋ ฅํ•˜๋ฉด newTodo๋Š” "์•ˆ๋…•"์ด๋ฏ€๋กœ span์•ˆ์˜ ํ…์ŠคํŠธ๋„ "์•ˆ๋…•"์ด ๋œ๋‹ค.

 

5)  html์˜ ul ํƒœ๊ทธ ์•ˆ์— li ํƒœ๊ทธ๋ฅผ ์ž์‹์œผ๋กœ ๋งŒ๋“ค์–ด ์ค€๋‹ค. (span์„ li์— ์†ํ•˜๊ฒŒ ํ•œ ๊ฒƒ๊ณผ ๋™์ผ)

 

6) handleTodoSubmit ํ•จ์ˆ˜์— paintToDo(newTodo); ๋ฅผ ์ถ”๊ฐ€ํ•ด handleTodoSubmit ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด, paintToDoํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•œ๋‹ค.

 

 

+) Q

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ HTMLํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ appendChild์™€ append๋ผ์˜ ์ฐจ์ด

-

append()๊ฐ€ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ข…๋ฅ˜๊ฐ€ ๋” ๋งŽ๋‹ค.

append()๋กœ๋Š” ๋ฌธ์ž์—ด๋„ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•œ๋ฐ, appendChild()๋กœ๋Š” ๊ฐ์ฒด๋งŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

ex)

li.append("์•ˆ๋…•ํ•˜์„ธ์š”") → (๊ฐ€๋Šฅ)

li.appendChild("์•ˆ๋…•ํ•˜์„ธ์š”") → (๋ถˆ๊ฐ€๋Šฅ - typeError)

๊ทธ๋ฆฌ๊ณ  console.log๋กœ ๋‘ ๊ฐœ๋ฅผ ๋ณด๋ฉด append()ํ•˜๊ณ  appendChild()๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜จ๋‹ค.

 

 

+) Q

๊ตณ์ด  handleTodoSubmit ํ•จ์ˆ˜์™€ paintToDoํ•จ์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•œ ์ด์œ ๋Š”? ๊ฐ™์ด ์จ๋„ ๋˜‘๊ฐ™์ด ์ž‘๋™ํ•œ๋‹ค.

-

paintToDoํ•จ์ˆ˜๊ฐ€ ๋˜ ์“ฐ์ผ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์“ธ๋ฐ์—†์ด ์ค‘๋ณต๋˜์ง€ ์•Š๊ฒŒ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์ ๋Š”๋‹ค.

๋˜ํ•œ ์—ฌ๋Ÿฌ๋ช…๊ณผ ํ•จ๊ป˜ ์ผํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด์„œ ๋”ฐ๋กœ ์ ๋Š”๋‹ค.

 

 

 

2. Deleting To Dos

JavaScript - html์— ์‚ญ์ œ button ํƒœ๊ทธ ๋งŒ๋“ค๊ธฐ

function paintToDo(newTodo) {
  const li = document.createElement("li");
  const span = document.createElement("span");
  span.innerText = newTodo.text;
  const button = document.createElement("button");
  button.innerText = "โŒ";
  button.addEventListener("click", deleteToDo);
  li.appendChild(span);
  li.appendChild(button);
  toDoList.appendChild(li);
}

1) createElement๋ฅผ ์ด์šฉํ•ด html์— button ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ํ•œ๋‹ค.

 

2) ์œ ์ €์—๊ฒŒ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ…์ŠคํŠธ๊ฐ€ ์‚ญ์ œ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์‹์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋ฒ„ํŠผ ๋‚ด๋ถ€ ํ…์ŠคํŠธ๋ฅผ "โŒ"๋กœ ์ •์˜ (์œˆ๋„์šฐ ๊ธฐ์ค€ : window + . )

 

3) ๋ฒ„ํŠผ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‚ญ์ œ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•œ๋‹ค. ์—ฌ๊ธฐ์—์„  "click"์ด ๋ฐœ์ƒ ์‹œ, deleteToDoํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•œ๋‹ค.

 

 

JavaScript - ์‚ญ์ œ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜ ์ƒ์„ฑ

function deleteToDo(event) {
  const li = event.target.parentElement;
  li.remove();
  }

1) event.target.parentElement; => ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ.ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•˜์—ฌ.๊ทธ๊ฒƒ์˜ ๋ถ€๋ชจ ํƒœ๊ทธ๋ฅผ ์ง€์ •;

event๋Š” target(= event๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ์žฅ๋ณธ์ธ. target์€ ํด๋ฆญ๋œ HTML element)์„ ์ค€๋‹ค. (์—ฌ๊ธฐ์„œ๋Š” button)

parentElement๋กœ target์˜ ๋ถ€๋ชจ(= li)์— ์ ‘๊ทผ.

 

2) ์œ„์—์„œ ์ง€์ •๋œ ๊ฒƒ์„ ์‚ญ์ œํ•œ๋‹ค.

 

 

 

3. Saving To Dos

JavaScript - ์ €์žฅ ๊ธฐ๋Šฅ ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ

const toDos = [];

function deleteToDo(event) {
   localStorage.setItem("todos", JSON.stringify(toDos));
  }

1) toDo์— ๋“ค์–ด์˜ค๋Š” ํ…์ŠคํŠธ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฌถ์–ด ๋ณด๊ด€ํ•˜๊ธฐ ์œ„ํ•ด ๋นˆ array๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.

 

2) newTodo๊ฐ€ ๊ทธ๋ ค์งˆ ๋•Œ๋งˆ๋‹ค(paintToDoํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค) ๊ทธ ํ…์ŠคํŠธ๋ฅผ array์— pushํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์—,

newTodo๋ฅผ ๊ทธ๋ฆฌ์ง€ ์ „์—(paintToDo ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์—) toDos array๋ฅผ ๊ฐ€์ง€๊ณ  ์™€์„œ newTodo๋ฅผ push ํ•ด์ค€๋‹ค.

ํ•จ์ˆ˜ handleToDosubmit ์•ˆ์— toDos.push(newTodo); ๋ฅผ paintToDo(newTodo); ์œ„์— ์จ์ค€๋‹ค.

 

3) ์ €์žฅ ๊ธฐ๋Šฅ์„ ๋„ฃ์„ ํ•จ์ˆ˜ saveToDos ์ƒ์„ฑํ•˜๊ณ ,

function saveToDos( ) { localStorage.setItem("todos", toDos); }

→ localStorage์— "todos"๋ผ๋Š” ์ด๋ฆ„์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ, array ํ˜•ํƒœ๋กœ ์ €์žฅํ•œ๋‹ค.

 

4) ์•ž์—์„œ ๋งŒ๋“ค์—ˆ๋˜ ํ•จ์ˆ˜ handleToDosubmit์˜ ๋งˆ์ง€๋ง‰์— ์ €์žฅ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•  saveToDos(); ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

5) ํ•˜์ง€๋งŒ 3)์ฒ˜๋Ÿผ ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฉด localStorage์—์„œ ํ™•์ธํ•ด๋ดค์„ ๋•Œ ๊ฐ’๋“ค์ด ํ…์ŠคํŠธ ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค.

(์‹ค์ œ๋กœ๋Š” arrayํ˜•ํƒœ๊ฐ€ ์•„๋‹˜)

ex) key: todos / value: a, b, c 

 

6) ์ด ๊ฐ’๋“ค์„ string์˜ ํ˜•ํƒœ๋กœ toDos๋ผ๋Š” array์— ์ง‘์–ด๋„ฃ๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— JSON.stringify()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ด ๊ฐ์ฒด๋Š” ์–ด๋–ค ํ˜•ํƒœ๋“  ๋Œ€์ž…ํ•œ ๊ฐ’์„ ์•Œ์•„์„œ string์˜ ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

ex) key: todos / value: ["a", "b", "c"]

 

 

+) Q

json.stringify ์“ฐ๊ธฐ ์ „์— localStorage์˜ ๊ฐ’์ด a, b, c ์˜€๊ณ  ์“ฐ๊ณ  ๋‚˜์„œ๋Š” “a”, “b”,”c”๊ฐ€ ๋๋Š”๋ฐ ๊ฐ™์€ string ํƒ€์ž… ์•„๋‹Œ๊ฐ€?

๋‘˜์˜ ์ฐจ์ด๋Š”? ๊ทธ๋ฆฌ๊ณ  stringify๋ฅผ ์“ฐ๊ธฐ ์ „์˜ ๊ฐ’์€ ํ…์ŠคํŠธ, ์“ฐ๊ณ  ๋‚˜์„œ๋Š” string์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ ๊ทธ ์ด์œ ๋„ ๊ถ๊ธˆ.

(๋‹จ์ˆœ ํ…์ŠคํŠธ์™€ string์˜ ์ฐจ์ด)

-

'text' does not exist. We only have 'string’

text๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์•„๋‹ˆ๊ณ , string๋งŒ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

Comments