ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TypeScript 101
    ์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ 2023. 4. 20. 17:25
    728x90

    101

    ๐Ÿ’ก TodoItem.ts ์—์„œ ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

     

    ๐Ÿ’ก ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ๋งˆ๋‹ค ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

     

    ๐Ÿ’ก ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ธฐ๋ณธ ๋ฆฌํ„ด๊ฐ’์„ ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

     

    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
      • ํ•„์ˆ˜ ๋ชจ๋“ˆ์€ typescript.js
      • node์„ค์น˜๋ฅผ ๊ธฐ๋ณธ ์ „์ œ๋กœ ํ•จ npmํ˜น์€ yarn์„ ์„ค์น˜ํ•จ
      • .tsํŒŒ์ผ์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅ
        • ์ด ํŒŒ์ผ์€ tsc์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด .jsํŒŒ์ผ๋กœ ํŠธ๋žœ์Šค์ปดํŒŒ์ผ ๋จ
      • ๊ธฐ๋ณธ ๊ตฌ์„ฑ ๋””๋ ‰ํ† ๋ฆฌ๋Š” src, build๋กœ ๊ตฌ๋ถ„ํ•ด ์ž‘์„ฑ์†Œ์Šค, ์ปดํŒŒ์ผ ์†Œ์Šค๋กœ ๊ตฌ๋ถ„
      • ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์†Œ์ŠคํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด tsconfig.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ จ ๋‚ด์šฉ์„ ์ˆ˜์ •
      • package.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  nodemon๊ณผ concurrently ๋ชจ๋“ˆ ์„ค์น˜
      • package.jsonํŒŒ์ผ์— scripts ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด ๋นŒ๋“œ์™€ ์‹คํ–‰ ๋ช…๋ น์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰๋˜๋„๋ก ์„ค
    • ๊ธฐ๋ณธ
      • node.js์„ค์น˜
      • ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ
      • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ „์—ญ์œผ๋กœ ์„ค์น˜
      npm install -g typescriptใ…‡ใ…‡ใ…‡ใ…‡
      
      • tsํŒŒ์ผ์„ jsํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ
      tsc ํŒŒ์ผ๋ช….ts
      
      • node ํŒŒ์ผ๋ช….js ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • npm init
      • tsconfig.json
        • rootDir ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ (./src)
        • outDir ์ปดํŒŒ์ผ๋œ js๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ(./build)
      • tsconfig์— ์ง€์ •์„ ํ•ด๋†จ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ๋ช…์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ์ด ์•Œ์•„์„œ ๋จ.
    • package.json ์„ค์น˜
      • npm init -y
      • npm install nodemon concurrently
        • node_modules์— ๋กœ์ปฌ๋กœ ์„ค์น˜๋จ
    • package.json ์ˆ˜์ •
      • "start:build": "tsc -w", //ts๊ฐ€ ์ปดํŒŒ์ผ ๋ ๋•Œ ์ฝ˜์†”์—์„œ ํ™•์ธํ•˜๊ฒ ๋‹ค๋Š” ๋œป
      • "start:run": "nodemon build/index.js", // ๋…ธ๋“œ๋ชฌ์„ ์‚ฌ์šฉํ•ด ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์˜ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค.
      • "start": "concurrently npm:start:*" //๋นŒ๋“œ์™€ ๋Ÿฐ์„ ๋‘˜๋‹ค ๋ณ‘ํ–‰ ์‹คํ–‰ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ž‘์—…
      • npm start // ์‹คํ–‰๋œ ๋‚ด์šฉ๋“ค๊ณผ, ์ปดํŒŒ์ผ๋œ ๋‚ด์šฉ๋“ค์„ ํ„ฐ๋ฏธ๋„์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ. //์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋ฐ˜์˜

    Defining the Data Model

    • toDoList ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” toDoItem ํด๋ž˜์Šค๋ฅผ ์ •์˜
    • ๊ธฐ๋ณธ js์™€ ts ํด๋ž˜์Šค ์ฐจ์ด ํ™•์ธ
    • ํ…Œ์ŠคํŠธ
      • index.js
      • class TodoItem{ constructor(id,task,complete){ // ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•˜๊ณ  id, task, complete๊ฐ€ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ๋“ค์–ด์˜ด this.id = id; //ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ์ดˆ๊ธฐํ™” this.task = task; this.complete = complete; } printDetails(){ console.log(`${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}` ); } } //๋ฐ์ดํ„ฐ const data=[ {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true}, {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false}, {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false}, ] //ํ…Œ์ŠคํŠธ ์ฝ”๋“œ let todoItem = new TodoItem(data[0].id,data[0].task,data[0].complete) console.log(todoItem); for(i=0; i<data.length; i++){ let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete); todoItem.printDetails(); }
      • ์ด๊ฑธ ts๋กœ ๋ฐ”๊ฟ€๋•Œ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋А๋ƒ!
      • TodoItem.ts
        • ์—๋Ÿฌ๋œธ
        • ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์•ผํ•จ.
        • ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ์Œ.
        • class TodoItem{ public id : number; // private, public, protected public task : string; public complete : boolean; constructor(id:number,task:string,complete:boolean){ this.id = id; this.task = task; this.complete = complete; } }
        • ๋‘๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์ž‘์„ฑํ•˜๋Š”๊ฑด ๋ถˆํŽธํ•˜๋‹ˆ ์ ‘๊ทผ ์ง€์ •์ž์— ํ•œ๋ฒˆ๋งŒ ํ•ด๋„๋จ
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        }
        
        // class TodoItem{
        //     public id : number; // private, public, protected
        //     public task : string;
        //     public complete : boolean;
        
        //     constructor(id:number,task:string,complete:boolean){
        //         this.id = id;
        //         this.task = task;
        //         this.complete = complete;
        //     }
        // }
        
        • return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        
            printDetails():void{ //return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void๋กœ ์ง€์ •ํ•ด์คŒ
                console.log(
                    `${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}`
                );
            }
        }
        
        export default TodoItem;
        
      • index.ts์—์„œ ์‚ฌ์šฉ
      import TodoItem from "./TodoItem";
      
      const data=[
          {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
          {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
          {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
      ]
      
      console.log('My Todo List');
      
      for(let i=0; i<data.length; i++){
          let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
          todoItem.printDetails();
      }
      
      • npm start
    • ์ •์  ํƒ€์ž…์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๋Š” C,Java์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณ€์ˆ˜ ์„ ์–ธ์— ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜์— ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋ณ€์ˆ˜์— ์ •์˜ํ•œ ํƒ€์ž…๊ณผ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๋Š” ts ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค.
    • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— ๋Œ€ํ•œ ํƒ€์ž… ์ •์˜๋Š” ํ•ด๋‹น ๋ฆฌํ„ฐ๋Ÿด ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ํƒ€์ž…์„ ๋‚˜์—ดํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ •์˜ํ•œ๋‹ค.
    const data=[ //data ํƒ€์ž…์ถ”๋ก 
        {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
        {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
        {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
    ]
    
    console.log('My Todo List');
    
    for(let i=0; i<data.length; i++){ //i ํƒ€์ž…์ถ”๋ก 
        let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
        todoItem.printDetails();
    }
    
    • ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฐ˜ํ™˜๊ฐ’์— ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค.
    • ํ•จ์ˆ˜์˜ ์ข…๋ฅ˜(์„ ์–ธ, ์ต๋ช…, ๋žŒ๋‹ค)์— ๋”ฐ๋ผ ํƒ€์ž… ์ง€์ •์— ๋Œ€ํ•œ ํ‘œํ˜„์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
    • ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •์˜ํ•  ๋•Œ ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€๋ณ€์ธ์ž๋ฅผ ํ†ตํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ ts๋Š” ๊ฐ€๋ณ€์ธ์ž๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋Œ€์‹  ํ•จ์ˆ˜์˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•ด ๊ฐ€๋ณ€์ธ์ž์™€ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ „๋‹ฌ์ธ์ž๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋‹ค.
    • ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜

    101

    <aside> ๐Ÿ’ก TodoItem.ts ์—์„œ ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

    </aside>

    <aside> ๐Ÿ’ก ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ๋งˆ๋‹ค ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

    </aside>

    <aside> ๐Ÿ’ก ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ธฐ๋ณธ ๋ฆฌํ„ด๊ฐ’์„ ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

    </aside>

    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
      • ํ•„์ˆ˜ ๋ชจ๋“ˆ์€ typescript.js
      • node์„ค์น˜๋ฅผ ๊ธฐ๋ณธ ์ „์ œ๋กœ ํ•จ npmํ˜น์€ yarn์„ ์„ค์น˜ํ•จ
      • .tsํŒŒ์ผ์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅ
        • ์ด ํŒŒ์ผ์€ tsc์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด .jsํŒŒ์ผ๋กœ ํŠธ๋žœ์Šค์ปดํŒŒ์ผ ๋จ
      • ๊ธฐ๋ณธ ๊ตฌ์„ฑ ๋””๋ ‰ํ† ๋ฆฌ๋Š” src, build๋กœ ๊ตฌ๋ถ„ํ•ด ์ž‘์„ฑ์†Œ์Šค, ์ปดํŒŒ์ผ ์†Œ์Šค๋กœ ๊ตฌ๋ถ„
      • ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์†Œ์ŠคํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด tsconfig.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ จ ๋‚ด์šฉ์„ ์ˆ˜์ •
      • package.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  nodemon๊ณผ concurrently ๋ชจ๋“ˆ ์„ค์น˜
      • package.jsonํŒŒ์ผ์— scripts ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด ๋นŒ๋“œ์™€ ์‹คํ–‰ ๋ช…๋ น์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰๋˜๋„๋ก ์„ค
    • ๊ธฐ๋ณธ
      • node.js์„ค์น˜
      • ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ
      • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ „์—ญ์œผ๋กœ ์„ค์น˜
      npm install -g typescriptใ…‡ใ…‡ใ…‡ใ…‡
      
      • tsํŒŒ์ผ์„ jsํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ
      tsc ํŒŒ์ผ๋ช….ts
      
      • node ํŒŒ์ผ๋ช….js ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • npm init
      • tsconfig.json
        • rootDir ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ (./src)
        • outDir ์ปดํŒŒ์ผ๋œ js๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ(./build)
      • tsconfig์— ์ง€์ •์„ ํ•ด๋†จ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ๋ช…์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ์ด ์•Œ์•„์„œ ๋จ.
    • package.json ์„ค์น˜
      • npm init -y
      • npm install nodemon concurrently
        • node_modules์— ๋กœ์ปฌ๋กœ ์„ค์น˜๋จ
    • package.json ์ˆ˜์ •
      • "start:build": "tsc -w", //ts๊ฐ€ ์ปดํŒŒ์ผ ๋ ๋•Œ ์ฝ˜์†”์—์„œ ํ™•์ธํ•˜๊ฒ ๋‹ค๋Š” ๋œป
      • "start:run": "nodemon build/index.js", // ๋…ธ๋“œ๋ชฌ์„ ์‚ฌ์šฉํ•ด ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์˜ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค.
      • "start": "concurrently npm:start:*" //๋นŒ๋“œ์™€ ๋Ÿฐ์„ ๋‘˜๋‹ค ๋ณ‘ํ–‰ ์‹คํ–‰ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ž‘์—…
      • npm start // ์‹คํ–‰๋œ ๋‚ด์šฉ๋“ค๊ณผ, ์ปดํŒŒ์ผ๋œ ๋‚ด์šฉ๋“ค์„ ํ„ฐ๋ฏธ๋„์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ. //์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋ฐ˜์˜

    Defining the Data Model

    • toDoList ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” toDoItem ํด๋ž˜์Šค๋ฅผ ์ •์˜
    • ๊ธฐ๋ณธ js์™€ ts ํด๋ž˜์Šค ์ฐจ์ด ํ™•์ธ
    • ํ…Œ์ŠคํŠธ
      • index.js
      • class TodoItem{ constructor(id,task,complete){ // ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•˜๊ณ  id, task, complete๊ฐ€ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ๋“ค์–ด์˜ด this.id = id; //ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ์ดˆ๊ธฐํ™” this.task = task; this.complete = complete; } printDetails(){ console.log(`${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}` ); } } //๋ฐ์ดํ„ฐ const data=[ {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true}, {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false}, {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false}, ] //ํ…Œ์ŠคํŠธ ์ฝ”๋“œ let todoItem = new TodoItem(data[0].id,data[0].task,data[0].complete) console.log(todoItem); for(i=0; i<data.length; i++){ let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete); todoItem.printDetails(); }
      • ์ด๊ฑธ ts๋กœ ๋ฐ”๊ฟ€๋•Œ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋А๋ƒ!
      • TodoItem.ts
        • ์—๋Ÿฌ๋œธ
        • ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์•ผํ•จ.
        • ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ์Œ.
        • class TodoItem{ public id : number; // private, public, protected public task : string; public complete : boolean; constructor(id:number,task:string,complete:boolean){ this.id = id; this.task = task; this.complete = complete; } }
        • ๋‘๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์ž‘์„ฑํ•˜๋Š”๊ฑด ๋ถˆํŽธํ•˜๋‹ˆ ์ ‘๊ทผ ์ง€์ •์ž์— ํ•œ๋ฒˆ๋งŒ ํ•ด๋„๋จ
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        }
        
        // class TodoItem{
        //     public id : number; // private, public, protected
        //     public task : string;
        //     public complete : boolean;
        
        //     constructor(id:number,task:string,complete:boolean){
        //         this.id = id;
        //         this.task = task;
        //         this.complete = complete;
        //     }
        // }
        
        • return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        
            printDetails():void{ //return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void๋กœ ์ง€์ •ํ•ด์คŒ
                console.log(
                    `${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}`
                );
            }
        }
        
        export default TodoItem;
        
      • index.ts์—์„œ ์‚ฌ์šฉ
      import TodoItem from "./TodoItem";
      
      const data=[
          {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
          {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
          {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
      ]
      
      console.log('My Todo List');
      
      for(let i=0; i<data.length; i++){
          let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
          todoItem.printDetails();
      }
      
      • npm start
    • ์ •์  ํƒ€์ž…์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๋Š” C,Java์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณ€์ˆ˜ ์„ ์–ธ์— ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜์— ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋ณ€์ˆ˜์— ์ •์˜ํ•œ ํƒ€์ž…๊ณผ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๋Š” ts ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค.
    • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— ๋Œ€ํ•œ ํƒ€์ž… ์ •์˜๋Š” ํ•ด๋‹น ๋ฆฌํ„ฐ๋Ÿด ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ํƒ€์ž…์„ ๋‚˜์—ดํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ •์˜ํ•œ๋‹ค.
    const data=[ //data ํƒ€์ž…์ถ”๋ก 
        {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
        {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
        {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
    ]
    
    console.log('My Todo List');
    
    for(let i=0; i<data.length; i++){ //i ํƒ€์ž…์ถ”๋ก 
        let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
        todoItem.printDetails();
    }
    
    • ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฐ˜ํ™˜๊ฐ’์— ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค.
    • ํ•จ์ˆ˜์˜ ์ข…๋ฅ˜(์„ ์–ธ, ์ต๋ช…, ๋žŒ๋‹ค)์— ๋”ฐ๋ผ ํƒ€์ž… ์ง€์ •์— ๋Œ€ํ•œ ํ‘œํ˜„์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
    • ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •์˜ํ•  ๋•Œ ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€๋ณ€์ธ์ž๋ฅผ ํ†ตํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ ts๋Š” ๊ฐ€๋ณ€์ธ์ž๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋Œ€์‹  ํ•จ์ˆ˜์˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•ด ๊ฐ€๋ณ€์ธ์ž์™€ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ „๋‹ฌ์ธ์ž๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋‹ค.
    • ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜

    101

    <aside> ๐Ÿ’ก TodoItem.ts ์—์„œ ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

    </aside>

    <aside> ๐Ÿ’ก ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ๋งˆ๋‹ค ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

    </aside>

    <aside> ๐Ÿ’ก ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ธฐ๋ณธ ๋ฆฌํ„ด๊ฐ’์„ ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

    </aside>

    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
      • ํ•„์ˆ˜ ๋ชจ๋“ˆ์€ typescript.js
      • node์„ค์น˜๋ฅผ ๊ธฐ๋ณธ ์ „์ œ๋กœ ํ•จ npmํ˜น์€ yarn์„ ์„ค์น˜ํ•จ
      • .tsํŒŒ์ผ์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅ
        • ์ด ํŒŒ์ผ์€ tsc์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด .jsํŒŒ์ผ๋กœ ํŠธ๋žœ์Šค์ปดํŒŒ์ผ ๋จ
      • ๊ธฐ๋ณธ ๊ตฌ์„ฑ ๋””๋ ‰ํ† ๋ฆฌ๋Š” src, build๋กœ ๊ตฌ๋ถ„ํ•ด ์ž‘์„ฑ์†Œ์Šค, ์ปดํŒŒ์ผ ์†Œ์Šค๋กœ ๊ตฌ๋ถ„
      • ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์†Œ์ŠคํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด tsconfig.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ จ ๋‚ด์šฉ์„ ์ˆ˜์ •
      • package.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  nodemon๊ณผ concurrently ๋ชจ๋“ˆ ์„ค์น˜
      • package.jsonํŒŒ์ผ์— scripts ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด ๋นŒ๋“œ์™€ ์‹คํ–‰ ๋ช…๋ น์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰๋˜๋„๋ก ์„ค
    • ๊ธฐ๋ณธ
      • node.js์„ค์น˜
      • ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ
      • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ „์—ญ์œผ๋กœ ์„ค์น˜
      npm install -g typescriptใ…‡ใ…‡ใ…‡ใ…‡
      
      • tsํŒŒ์ผ์„ jsํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ
      tsc ํŒŒ์ผ๋ช….ts
      
      • node ํŒŒ์ผ๋ช….js ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • npm init
      • tsconfig.json
        • rootDir ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ (./src)
        • outDir ์ปดํŒŒ์ผ๋œ js๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ(./build)
      • tsconfig์— ์ง€์ •์„ ํ•ด๋†จ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ๋ช…์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ์ด ์•Œ์•„์„œ ๋จ.
    • package.json ์„ค์น˜
      • npm init -y
      • npm install nodemon concurrently
        • node_modules์— ๋กœ์ปฌ๋กœ ์„ค์น˜๋จ
    • package.json ์ˆ˜์ •
      • "start:build": "tsc -w", //ts๊ฐ€ ์ปดํŒŒ์ผ ๋ ๋•Œ ์ฝ˜์†”์—์„œ ํ™•์ธํ•˜๊ฒ ๋‹ค๋Š” ๋œป
      • "start:run": "nodemon build/index.js", // ๋…ธ๋“œ๋ชฌ์„ ์‚ฌ์šฉํ•ด ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์˜ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค.
      • "start": "concurrently npm:start:*" //๋นŒ๋“œ์™€ ๋Ÿฐ์„ ๋‘˜๋‹ค ๋ณ‘ํ–‰ ์‹คํ–‰ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ž‘์—…
      • npm start // ์‹คํ–‰๋œ ๋‚ด์šฉ๋“ค๊ณผ, ์ปดํŒŒ์ผ๋œ ๋‚ด์šฉ๋“ค์„ ํ„ฐ๋ฏธ๋„์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ. //์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋ฐ˜์˜

    Defining the Data Model

    • toDoList ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” toDoItem ํด๋ž˜์Šค๋ฅผ ์ •์˜
    • ๊ธฐ๋ณธ js์™€ ts ํด๋ž˜์Šค ์ฐจ์ด ํ™•์ธ
    • ํ…Œ์ŠคํŠธ
      • index.js
      • class TodoItem{ constructor(id,task,complete){ // ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•˜๊ณ  id, task, complete๊ฐ€ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ๋“ค์–ด์˜ด this.id = id; //ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ์ดˆ๊ธฐํ™” this.task = task; this.complete = complete; } printDetails(){ console.log(`${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}` ); } } //๋ฐ์ดํ„ฐ const data=[ {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true}, {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false}, {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false}, ] //ํ…Œ์ŠคํŠธ ์ฝ”๋“œ let todoItem = new TodoItem(data[0].id,data[0].task,data[0].complete) console.log(todoItem); for(i=0; i<data.length; i++){ let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete); todoItem.printDetails(); }
      • ์ด๊ฑธ ts๋กœ ๋ฐ”๊ฟ€๋•Œ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋А๋ƒ!
      • TodoItem.ts
        • ์—๋Ÿฌ๋œธ
        • ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์•ผํ•จ.
        • ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ์Œ.
        • class TodoItem{ public id : number; // private, public, protected public task : string; public complete : boolean; constructor(id:number,task:string,complete:boolean){ this.id = id; this.task = task; this.complete = complete; } }
        • ๋‘๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์ž‘์„ฑํ•˜๋Š”๊ฑด ๋ถˆํŽธํ•˜๋‹ˆ ์ ‘๊ทผ ์ง€์ •์ž์— ํ•œ๋ฒˆ๋งŒ ํ•ด๋„๋จ
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        }
        
        // class TodoItem{
        //     public id : number; // private, public, protected
        //     public task : string;
        //     public complete : boolean;
        
        //     constructor(id:number,task:string,complete:boolean){
        //         this.id = id;
        //         this.task = task;
        //         this.complete = complete;
        //     }
        // }
        
        • return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        
            printDetails():void{ //return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void๋กœ ์ง€์ •ํ•ด์คŒ
                console.log(
                    `${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}`
                );
            }
        }
        
        export default TodoItem;
        
      • index.ts์—์„œ ์‚ฌ์šฉ
      import TodoItem from "./TodoItem";
      
      const data=[
          {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
          {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
          {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
      ]
      
      console.log('My Todo List');
      
      for(let i=0; i<data.length; i++){
          let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
          todoItem.printDetails();
      }
      
      • npm start
    • ์ •์  ํƒ€์ž…์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๋Š” C,Java์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณ€์ˆ˜ ์„ ์–ธ์— ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜์— ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋ณ€์ˆ˜์— ์ •์˜ํ•œ ํƒ€์ž…๊ณผ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๋Š” ts ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค.
    • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— ๋Œ€ํ•œ ํƒ€์ž… ์ •์˜๋Š” ํ•ด๋‹น ๋ฆฌํ„ฐ๋Ÿด ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ํƒ€์ž…์„ ๋‚˜์—ดํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ •์˜ํ•œ๋‹ค.
    const data=[ //data ํƒ€์ž…์ถ”๋ก 
        {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
        {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
        {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
    ]
    
    console.log('My Todo List');
    
    for(let i=0; i<data.length; i++){ //i ํƒ€์ž…์ถ”๋ก 
        let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
        todoItem.printDetails();
    }
    
    • ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฐ˜ํ™˜๊ฐ’์— ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค.
    • ํ•จ์ˆ˜์˜ ์ข…๋ฅ˜(์„ ์–ธ, ์ต๋ช…, ๋žŒ๋‹ค)์— ๋”ฐ๋ผ ํƒ€์ž… ์ง€์ •์— ๋Œ€ํ•œ ํ‘œํ˜„์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
    • ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •์˜ํ•  ๋•Œ ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€๋ณ€์ธ์ž๋ฅผ ํ†ตํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ ts๋Š” ๊ฐ€๋ณ€์ธ์ž๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋Œ€์‹  ํ•จ์ˆ˜์˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•ด ๊ฐ€๋ณ€์ธ์ž์™€ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ „๋‹ฌ์ธ์ž๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋‹ค.
    • ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜

    101

    <aside> ๐Ÿ’ก TodoItem.ts ์—์„œ ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

    </aside>

    <aside> ๐Ÿ’ก ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ๋งˆ๋‹ค ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

    </aside>

    <aside> ๐Ÿ’ก ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ธฐ๋ณธ ๋ฆฌํ„ด๊ฐ’์„ ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

    </aside>

    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
      • ํ•„์ˆ˜ ๋ชจ๋“ˆ์€ typescript.js
      • node์„ค์น˜๋ฅผ ๊ธฐ๋ณธ ์ „์ œ๋กœ ํ•จ npmํ˜น์€ yarn์„ ์„ค์น˜ํ•จ
      • .tsํŒŒ์ผ์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅ
        • ์ด ํŒŒ์ผ์€ tsc์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด .jsํŒŒ์ผ๋กœ ํŠธ๋žœ์Šค์ปดํŒŒ์ผ ๋จ
      • ๊ธฐ๋ณธ ๊ตฌ์„ฑ ๋””๋ ‰ํ† ๋ฆฌ๋Š” src, build๋กœ ๊ตฌ๋ถ„ํ•ด ์ž‘์„ฑ์†Œ์Šค, ์ปดํŒŒ์ผ ์†Œ์Šค๋กœ ๊ตฌ๋ถ„
      • ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์†Œ์ŠคํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด tsconfig.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ จ ๋‚ด์šฉ์„ ์ˆ˜์ •
      • package.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  nodemon๊ณผ concurrently ๋ชจ๋“ˆ ์„ค์น˜
      • package.jsonํŒŒ์ผ์— scripts ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด ๋นŒ๋“œ์™€ ์‹คํ–‰ ๋ช…๋ น์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰๋˜๋„๋ก ์„ค
    • ๊ธฐ๋ณธ
      • node.js์„ค์น˜
      • ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ
      • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ „์—ญ์œผ๋กœ ์„ค์น˜
      npm install -g typescriptใ…‡ใ…‡ใ…‡ใ…‡
      
      • tsํŒŒ์ผ์„ jsํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ
      tsc ํŒŒ์ผ๋ช….ts
      
      • node ํŒŒ์ผ๋ช….js ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • npm init
      • tsconfig.json
        • rootDir ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ (./src)
        • outDir ์ปดํŒŒ์ผ๋œ js๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ(./build)
      • tsconfig์— ์ง€์ •์„ ํ•ด๋†จ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ๋ช…์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ์ด ์•Œ์•„์„œ ๋จ.
    • package.json ์„ค์น˜
      • npm init -y
      • npm install nodemon concurrently
        • node_modules์— ๋กœ์ปฌ๋กœ ์„ค์น˜๋จ
    • package.json ์ˆ˜์ •
      • "start:build": "tsc -w", //ts๊ฐ€ ์ปดํŒŒ์ผ ๋ ๋•Œ ์ฝ˜์†”์—์„œ ํ™•์ธํ•˜๊ฒ ๋‹ค๋Š” ๋œป
      • "start:run": "nodemon build/index.js", // ๋…ธ๋“œ๋ชฌ์„ ์‚ฌ์šฉํ•ด ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์˜ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค.
      • "start": "concurrently npm:start:*" //๋นŒ๋“œ์™€ ๋Ÿฐ์„ ๋‘˜๋‹ค ๋ณ‘ํ–‰ ์‹คํ–‰ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ž‘์—…
      • npm start // ์‹คํ–‰๋œ ๋‚ด์šฉ๋“ค๊ณผ, ์ปดํŒŒ์ผ๋œ ๋‚ด์šฉ๋“ค์„ ํ„ฐ๋ฏธ๋„์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ. //์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋ฐ˜์˜

    Defining the Data Model

    • toDoList ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” toDoItem ํด๋ž˜์Šค๋ฅผ ์ •์˜
    • ๊ธฐ๋ณธ js์™€ ts ํด๋ž˜์Šค ์ฐจ์ด ํ™•์ธ
    • ํ…Œ์ŠคํŠธ
      • index.js
      • class TodoItem{ constructor(id,task,complete){ // ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•˜๊ณ  id, task, complete๊ฐ€ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ๋“ค์–ด์˜ด this.id = id; //ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ์ดˆ๊ธฐํ™” this.task = task; this.complete = complete; } printDetails(){ console.log(`${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}` ); } } //๋ฐ์ดํ„ฐ const data=[ {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true}, {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false}, {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false}, ] //ํ…Œ์ŠคํŠธ ์ฝ”๋“œ let todoItem = new TodoItem(data[0].id,data[0].task,data[0].complete) console.log(todoItem); for(i=0; i<data.length; i++){ let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete); todoItem.printDetails(); }
      • ์ด๊ฑธ ts๋กœ ๋ฐ”๊ฟ€๋•Œ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋А๋ƒ!
      • TodoItem.ts
        • ์—๋Ÿฌ๋œธ
        • ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์•ผํ•จ.
        • ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ์Œ.
        • class TodoItem{ public id : number; // private, public, protected public task : string; public complete : boolean; constructor(id:number,task:string,complete:boolean){ this.id = id; this.task = task; this.complete = complete; } }
        • ๋‘๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์ž‘์„ฑํ•˜๋Š”๊ฑด ๋ถˆํŽธํ•˜๋‹ˆ ์ ‘๊ทผ ์ง€์ •์ž์— ํ•œ๋ฒˆ๋งŒ ํ•ด๋„๋จ
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        }
        
        // class TodoItem{
        //     public id : number; // private, public, protected
        //     public task : string;
        //     public complete : boolean;
        
        //     constructor(id:number,task:string,complete:boolean){
        //         this.id = id;
        //         this.task = task;
        //         this.complete = complete;
        //     }
        // }
        
        • return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        
            printDetails():void{ //return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void๋กœ ์ง€์ •ํ•ด์คŒ
                console.log(
                    `${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}`
                );
            }
        }
        
        export default TodoItem;
        
      • index.ts์—์„œ ์‚ฌ์šฉ
      import TodoItem from "./TodoItem";
      
      const data=[
          {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
          {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
          {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
      ]
      
      console.log('My Todo List');
      
      for(let i=0; i<data.length; i++){
          let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
          todoItem.printDetails();
      }
      
      • npm start
    • ์ •์  ํƒ€์ž…์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๋Š” C,Java์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณ€์ˆ˜ ์„ ์–ธ์— ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜์— ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋ณ€์ˆ˜์— ์ •์˜ํ•œ ํƒ€์ž…๊ณผ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๋Š” ts ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค.
    • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— ๋Œ€ํ•œ ํƒ€์ž… ์ •์˜๋Š” ํ•ด๋‹น ๋ฆฌํ„ฐ๋Ÿด ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ํƒ€์ž…์„ ๋‚˜์—ดํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ •์˜ํ•œ๋‹ค.
    const data=[ //data ํƒ€์ž…์ถ”๋ก 
        {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
        {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
        {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
    ]
    
    console.log('My Todo List');
    
    for(let i=0; i<data.length; i++){ //i ํƒ€์ž…์ถ”๋ก 
        let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
        todoItem.printDetails();
    }
    
    • ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฐ˜ํ™˜๊ฐ’์— ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค.
    • ํ•จ์ˆ˜์˜ ์ข…๋ฅ˜(์„ ์–ธ, ์ต๋ช…, ๋žŒ๋‹ค)์— ๋”ฐ๋ผ ํƒ€์ž… ์ง€์ •์— ๋Œ€ํ•œ ํ‘œํ˜„์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
    • ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •์˜ํ•  ๋•Œ ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€๋ณ€์ธ์ž๋ฅผ ํ†ตํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ ts๋Š” ๊ฐ€๋ณ€์ธ์ž๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋Œ€์‹  ํ•จ์ˆ˜์˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•ด ๊ฐ€๋ณ€์ธ์ž์™€ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ „๋‹ฌ์ธ์ž๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋‹ค.
    • ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜

    101

    <aside> ๐Ÿ’ก TodoItem.ts ์—์„œ ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

    </aside>

    <aside> ๐Ÿ’ก ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ๋งˆ๋‹ค ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

    </aside>

    <aside> ๐Ÿ’ก ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ธฐ๋ณธ ๋ฆฌํ„ด๊ฐ’์„ ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

    </aside>

    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
      • ํ•„์ˆ˜ ๋ชจ๋“ˆ์€ typescript.js
      • node์„ค์น˜๋ฅผ ๊ธฐ๋ณธ ์ „์ œ๋กœ ํ•จ npmํ˜น์€ yarn์„ ์„ค์น˜ํ•จ
      • .tsํŒŒ์ผ์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅ
        • ์ด ํŒŒ์ผ์€ tsc์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด .jsํŒŒ์ผ๋กœ ํŠธ๋žœ์Šค์ปดํŒŒ์ผ ๋จ
      • ๊ธฐ๋ณธ ๊ตฌ์„ฑ ๋””๋ ‰ํ† ๋ฆฌ๋Š” src, build๋กœ ๊ตฌ๋ถ„ํ•ด ์ž‘์„ฑ์†Œ์Šค, ์ปดํŒŒ์ผ ์†Œ์Šค๋กœ ๊ตฌ๋ถ„
      • ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์†Œ์ŠคํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด tsconfig.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ จ ๋‚ด์šฉ์„ ์ˆ˜์ •
      • package.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  nodemon๊ณผ concurrently ๋ชจ๋“ˆ ์„ค์น˜
      • package.jsonํŒŒ์ผ์— scripts ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด ๋นŒ๋“œ์™€ ์‹คํ–‰ ๋ช…๋ น์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰๋˜๋„๋ก ์„ค
    • ๊ธฐ๋ณธ
      • node.js์„ค์น˜
      • ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ
      • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ „์—ญ์œผ๋กœ ์„ค์น˜
      npm install -g typescriptใ…‡ใ…‡ใ…‡ใ…‡
      
      • tsํŒŒ์ผ์„ jsํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ
      tsc ํŒŒ์ผ๋ช….ts
      
      • node ํŒŒ์ผ๋ช….js ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • npm init
      • tsconfig.json
        • rootDir ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ (./src)
        • outDir ์ปดํŒŒ์ผ๋œ js๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ(./build)
      • tsconfig์— ์ง€์ •์„ ํ•ด๋†จ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ๋ช…์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ์ด ์•Œ์•„์„œ ๋จ.
    • package.json ์„ค์น˜
      • npm init -y
      • npm install nodemon concurrently
        • node_modules์— ๋กœ์ปฌ๋กœ ์„ค์น˜๋จ
    • package.json ์ˆ˜์ •
      • "start:build": "tsc -w", //ts๊ฐ€ ์ปดํŒŒ์ผ ๋ ๋•Œ ์ฝ˜์†”์—์„œ ํ™•์ธํ•˜๊ฒ ๋‹ค๋Š” ๋œป
      • "start:run": "nodemon build/index.js", // ๋…ธ๋“œ๋ชฌ์„ ์‚ฌ์šฉํ•ด ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์˜ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค.
      • "start": "concurrently npm:start:*" //๋นŒ๋“œ์™€ ๋Ÿฐ์„ ๋‘˜๋‹ค ๋ณ‘ํ–‰ ์‹คํ–‰ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ž‘์—…
      • npm start // ์‹คํ–‰๋œ ๋‚ด์šฉ๋“ค๊ณผ, ์ปดํŒŒ์ผ๋œ ๋‚ด์šฉ๋“ค์„ ํ„ฐ๋ฏธ๋„์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ. //์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋ฐ˜์˜

    Defining the Data Model

    • toDoList ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” toDoItem ํด๋ž˜์Šค๋ฅผ ์ •์˜
    • ๊ธฐ๋ณธ js์™€ ts ํด๋ž˜์Šค ์ฐจ์ด ํ™•์ธ
    • ํ…Œ์ŠคํŠธ
      • index.js
      • class TodoItem{ constructor(id,task,complete){ // ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•˜๊ณ  id, task, complete๊ฐ€ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ๋“ค์–ด์˜ด this.id = id; //ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ์ดˆ๊ธฐํ™” this.task = task; this.complete = complete; } printDetails(){ console.log(`${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}` ); } } //๋ฐ์ดํ„ฐ const data=[ {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true}, {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false}, {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false}, ] //ํ…Œ์ŠคํŠธ ์ฝ”๋“œ let todoItem = new TodoItem(data[0].id,data[0].task,data[0].complete) console.log(todoItem); for(i=0; i<data.length; i++){ let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete); todoItem.printDetails(); }
      • ์ด๊ฑธ ts๋กœ ๋ฐ”๊ฟ€๋•Œ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋А๋ƒ!
      • TodoItem.ts
        • ์—๋Ÿฌ๋œธ
        • ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์•ผํ•จ.
        • ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ์Œ.
        • class TodoItem{ public id : number; // private, public, protected public task : string; public complete : boolean; constructor(id:number,task:string,complete:boolean){ this.id = id; this.task = task; this.complete = complete; } }
        • ๋‘๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์ž‘์„ฑํ•˜๋Š”๊ฑด ๋ถˆํŽธํ•˜๋‹ˆ ์ ‘๊ทผ ์ง€์ •์ž์— ํ•œ๋ฒˆ๋งŒ ํ•ด๋„๋จ
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        }
        
        // class TodoItem{
        //     public id : number; // private, public, protected
        //     public task : string;
        //     public complete : boolean;
        
        //     constructor(id:number,task:string,complete:boolean){
        //         this.id = id;
        //         this.task = task;
        //         this.complete = complete;
        //     }
        // }
        
        • return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        
            printDetails():void{ //return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void๋กœ ์ง€์ •ํ•ด์คŒ
                console.log(
                    `${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}`
                );
            }
        }
        
        export default TodoItem;
        
      • index.ts์—์„œ ์‚ฌ์šฉ
      import TodoItem from "./TodoItem";
      
      const data=[
          {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
          {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
          {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
      ]
      
      console.log('My Todo List');
      
      for(let i=0; i<data.length; i++){
          let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
          todoItem.printDetails();
      }
      
      • npm start
    • ์ •์  ํƒ€์ž…์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๋Š” C,Java์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณ€์ˆ˜ ์„ ์–ธ์— ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜์— ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋ณ€์ˆ˜์— ์ •์˜ํ•œ ํƒ€์ž…๊ณผ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๋Š” ts ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค.
    • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— ๋Œ€ํ•œ ํƒ€์ž… ์ •์˜๋Š” ํ•ด๋‹น ๋ฆฌํ„ฐ๋Ÿด ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ํƒ€์ž…์„ ๋‚˜์—ดํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ •์˜ํ•œ๋‹ค.
    const data=[ //data ํƒ€์ž…์ถ”๋ก 
        {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
        {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
        {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
    ]
    
    console.log('My Todo List');
    
    for(let i=0; i<data.length; i++){ //i ํƒ€์ž…์ถ”๋ก 
        let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
        todoItem.printDetails();
    }
    
    • ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฐ˜ํ™˜๊ฐ’์— ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค.
    • ํ•จ์ˆ˜์˜ ์ข…๋ฅ˜(์„ ์–ธ, ์ต๋ช…, ๋žŒ๋‹ค)์— ๋”ฐ๋ผ ํƒ€์ž… ์ง€์ •์— ๋Œ€ํ•œ ํ‘œํ˜„์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
    • ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •์˜ํ•  ๋•Œ ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€๋ณ€์ธ์ž๋ฅผ ํ†ตํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ ts๋Š” ๊ฐ€๋ณ€์ธ์ž๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋Œ€์‹  ํ•จ์ˆ˜์˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•ด ๊ฐ€๋ณ€์ธ์ž์™€ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ „๋‹ฌ์ธ์ž๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋‹ค.
    • ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜

    101

    <aside> ๐Ÿ’ก TodoItem.ts ์—์„œ ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

    </aside>

    <aside> ๐Ÿ’ก ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ๋งˆ๋‹ค ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

    </aside>

    <aside> ๐Ÿ’ก ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ธฐ๋ณธ ๋ฆฌํ„ด๊ฐ’์„ ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

    </aside>

    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
      • ํ•„์ˆ˜ ๋ชจ๋“ˆ์€ typescript.js
      • node์„ค์น˜๋ฅผ ๊ธฐ๋ณธ ์ „์ œ๋กœ ํ•จ npmํ˜น์€ yarn์„ ์„ค์น˜ํ•จ
      • .tsํŒŒ์ผ์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅ
        • ์ด ํŒŒ์ผ์€ tsc์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด .jsํŒŒ์ผ๋กœ ํŠธ๋žœ์Šค์ปดํŒŒ์ผ ๋จ
      • ๊ธฐ๋ณธ ๊ตฌ์„ฑ ๋””๋ ‰ํ† ๋ฆฌ๋Š” src, build๋กœ ๊ตฌ๋ถ„ํ•ด ์ž‘์„ฑ์†Œ์Šค, ์ปดํŒŒ์ผ ์†Œ์Šค๋กœ ๊ตฌ๋ถ„
      • ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์†Œ์ŠคํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด tsconfig.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ จ ๋‚ด์šฉ์„ ์ˆ˜์ •
      • package.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  nodemon๊ณผ concurrently ๋ชจ๋“ˆ ์„ค์น˜
      • package.jsonํŒŒ์ผ์— scripts ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด ๋นŒ๋“œ์™€ ์‹คํ–‰ ๋ช…๋ น์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰๋˜๋„๋ก ์„ค
    • ๊ธฐ๋ณธ
      • node.js์„ค์น˜
      • ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ
      • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ „์—ญ์œผ๋กœ ์„ค์น˜
      npm install -g typescriptใ…‡ใ…‡ใ…‡ใ…‡
      
      • tsํŒŒ์ผ์„ jsํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ
      tsc ํŒŒ์ผ๋ช….ts
      
      • node ํŒŒ์ผ๋ช….js ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • npm init
      • tsconfig.json
        • rootDir ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ (./src)
        • outDir ์ปดํŒŒ์ผ๋œ js๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ(./build)
      • tsconfig์— ์ง€์ •์„ ํ•ด๋†จ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ๋ช…์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ์ด ์•Œ์•„์„œ ๋จ.
    • package.json ์„ค์น˜
      • npm init -y
      • npm install nodemon concurrently
        • node_modules์— ๋กœ์ปฌ๋กœ ์„ค์น˜๋จ
    • package.json ์ˆ˜์ •
      • "start:build": "tsc -w", //ts๊ฐ€ ์ปดํŒŒ์ผ ๋ ๋•Œ ์ฝ˜์†”์—์„œ ํ™•์ธํ•˜๊ฒ ๋‹ค๋Š” ๋œป
      • "start:run": "nodemon build/index.js", // ๋…ธ๋“œ๋ชฌ์„ ์‚ฌ์šฉํ•ด ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์˜ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค.
      • "start": "concurrently npm:start:*" //๋นŒ๋“œ์™€ ๋Ÿฐ์„ ๋‘˜๋‹ค ๋ณ‘ํ–‰ ์‹คํ–‰ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ž‘์—…
      • npm start // ์‹คํ–‰๋œ ๋‚ด์šฉ๋“ค๊ณผ, ์ปดํŒŒ์ผ๋œ ๋‚ด์šฉ๋“ค์„ ํ„ฐ๋ฏธ๋„์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ. //์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋ฐ˜์˜

    Defining the Data Model

    • toDoList ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” toDoItem ํด๋ž˜์Šค๋ฅผ ์ •์˜
    • ๊ธฐ๋ณธ js์™€ ts ํด๋ž˜์Šค ์ฐจ์ด ํ™•์ธ
    • ํ…Œ์ŠคํŠธ
      • index.js
      • class TodoItem{ constructor(id,task,complete){ // ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•˜๊ณ  id, task, complete๊ฐ€ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ๋“ค์–ด์˜ด this.id = id; //ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ์ดˆ๊ธฐํ™” this.task = task; this.complete = complete; } printDetails(){ console.log(`${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}` ); } } //๋ฐ์ดํ„ฐ const data=[ {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true}, {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false}, {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false}, ] //ํ…Œ์ŠคํŠธ ์ฝ”๋“œ let todoItem = new TodoItem(data[0].id,data[0].task,data[0].complete) console.log(todoItem); for(i=0; i<data.length; i++){ let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete); todoItem.printDetails(); }
      • ์ด๊ฑธ ts๋กœ ๋ฐ”๊ฟ€๋•Œ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋А๋ƒ!
      • TodoItem.ts
        • ์—๋Ÿฌ๋œธ
        • ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์•ผํ•จ.
        • ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ์Œ.
        • class TodoItem{ public id : number; // private, public, protected public task : string; public complete : boolean; constructor(id:number,task:string,complete:boolean){ this.id = id; this.task = task; this.complete = complete; } }
        • ๋‘๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์ž‘์„ฑํ•˜๋Š”๊ฑด ๋ถˆํŽธํ•˜๋‹ˆ ์ ‘๊ทผ ์ง€์ •์ž์— ํ•œ๋ฒˆ๋งŒ ํ•ด๋„๋จ
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        }
        
        // class TodoItem{
        //     public id : number; // private, public, protected
        //     public task : string;
        //     public complete : boolean;
        
        //     constructor(id:number,task:string,complete:boolean){
        //         this.id = id;
        //         this.task = task;
        //         this.complete = complete;
        //     }
        // }
        
        • return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        
            printDetails():void{ //return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void๋กœ ์ง€์ •ํ•ด์คŒ
                console.log(
                    `${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}`
                );
            }
        }
        
        export default TodoItem;
        
      • index.ts์—์„œ ์‚ฌ์šฉ
      import TodoItem from "./TodoItem";
      
      const data=[
          {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
          {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
          {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
      ]
      
      console.log('My Todo List');
      
      for(let i=0; i<data.length; i++){
          let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
          todoItem.printDetails();
      }
      
      • npm start
    • ์ •์  ํƒ€์ž…์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๋Š” C,Java์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณ€์ˆ˜ ์„ ์–ธ์— ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜์— ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋ณ€์ˆ˜์— ์ •์˜ํ•œ ํƒ€์ž…๊ณผ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๋Š” ts ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค.
    • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— ๋Œ€ํ•œ ํƒ€์ž… ์ •์˜๋Š” ํ•ด๋‹น ๋ฆฌํ„ฐ๋Ÿด ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ํƒ€์ž…์„ ๋‚˜์—ดํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ •์˜ํ•œ๋‹ค.
    const data=[ //data ํƒ€์ž…์ถ”๋ก 
        {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
        {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
        {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
    ]
    
    console.log('My Todo List');
    
    for(let i=0; i<data.length; i++){ //i ํƒ€์ž…์ถ”๋ก 
        let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
        todoItem.printDetails();
    }
    
    • ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฐ˜ํ™˜๊ฐ’์— ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค.
    • ํ•จ์ˆ˜์˜ ์ข…๋ฅ˜(์„ ์–ธ, ์ต๋ช…, ๋žŒ๋‹ค)์— ๋”ฐ๋ผ ํƒ€์ž… ์ง€์ •์— ๋Œ€ํ•œ ํ‘œํ˜„์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
    • ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •์˜ํ•  ๋•Œ ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€๋ณ€์ธ์ž๋ฅผ ํ†ตํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ ts๋Š” ๊ฐ€๋ณ€์ธ์ž๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋Œ€์‹  ํ•จ์ˆ˜์˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•ด ๊ฐ€๋ณ€์ธ์ž์™€ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ „๋‹ฌ์ธ์ž๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋‹ค.
    • ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜

    101

    <aside> ๐Ÿ’ก TodoItem.ts ์—์„œ ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

    </aside>

    <aside> ๐Ÿ’ก ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ๋งˆ๋‹ค ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

    </aside>

    <aside> ๐Ÿ’ก ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ธฐ๋ณธ ๋ฆฌํ„ด๊ฐ’์„ ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

    </aside>

    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
      • ํ•„์ˆ˜ ๋ชจ๋“ˆ์€ typescript.js
      • node์„ค์น˜๋ฅผ ๊ธฐ๋ณธ ์ „์ œ๋กœ ํ•จ npmํ˜น์€ yarn์„ ์„ค์น˜ํ•จ
      • .tsํŒŒ์ผ์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅ
        • ์ด ํŒŒ์ผ์€ tsc์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด .jsํŒŒ์ผ๋กœ ํŠธ๋žœ์Šค์ปดํŒŒ์ผ ๋จ
      • ๊ธฐ๋ณธ ๊ตฌ์„ฑ ๋””๋ ‰ํ† ๋ฆฌ๋Š” src, build๋กœ ๊ตฌ๋ถ„ํ•ด ์ž‘์„ฑ์†Œ์Šค, ์ปดํŒŒ์ผ ์†Œ์Šค๋กœ ๊ตฌ๋ถ„
      • ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์†Œ์ŠคํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด tsconfig.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ จ ๋‚ด์šฉ์„ ์ˆ˜์ •
      • package.jsonํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  nodemon๊ณผ concurrently ๋ชจ๋“ˆ ์„ค์น˜
      • package.jsonํŒŒ์ผ์— scripts ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด ๋นŒ๋“œ์™€ ์‹คํ–‰ ๋ช…๋ น์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰๋˜๋„๋ก ์„ค
    • ๊ธฐ๋ณธ
      • node.js์„ค์น˜
      • ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ
      • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ „์—ญ์œผ๋กœ ์„ค์น˜
      npm install -g typescriptใ…‡ใ…‡ใ…‡ใ…‡
      
      • tsํŒŒ์ผ์„ jsํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ
      tsc ํŒŒ์ผ๋ช….ts
      
      • node ํŒŒ์ผ๋ช….js ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • npm init
      • tsconfig.json
        • rootDir ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ (./src)
        • outDir ์ปดํŒŒ์ผ๋œ js๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ(./build)
      • tsconfig์— ์ง€์ •์„ ํ•ด๋†จ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ๋ช…์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ์ด ์•Œ์•„์„œ ๋จ.
    • package.json ์„ค์น˜
      • npm init -y
      • npm install nodemon concurrently
        • node_modules์— ๋กœ์ปฌ๋กœ ์„ค์น˜๋จ
    • package.json ์ˆ˜์ •
      • "start:build": "tsc -w", //ts๊ฐ€ ์ปดํŒŒ์ผ ๋ ๋•Œ ์ฝ˜์†”์—์„œ ํ™•์ธํ•˜๊ฒ ๋‹ค๋Š” ๋œป
      • "start:run": "nodemon build/index.js", // ๋…ธ๋“œ๋ชฌ์„ ์‚ฌ์šฉํ•ด ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์˜ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค.
      • "start": "concurrently npm:start:*" //๋นŒ๋“œ์™€ ๋Ÿฐ์„ ๋‘˜๋‹ค ๋ณ‘ํ–‰ ์‹คํ–‰ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ž‘์—…
      • npm start // ์‹คํ–‰๋œ ๋‚ด์šฉ๋“ค๊ณผ, ์ปดํŒŒ์ผ๋œ ๋‚ด์šฉ๋“ค์„ ํ„ฐ๋ฏธ๋„์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ. //์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋ฐ˜์˜

    Defining the Data Model

    • toDoList ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” toDoItem ํด๋ž˜์Šค๋ฅผ ์ •์˜
    • ๊ธฐ๋ณธ js์™€ ts ํด๋ž˜์Šค ์ฐจ์ด ํ™•์ธ
    • ํ…Œ์ŠคํŠธ
      • index.js
      • class TodoItem{ constructor(id,task,complete){ // ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•˜๊ณ  id, task, complete๊ฐ€ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ๋“ค์–ด์˜ด this.id = id; //ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ์ดˆ๊ธฐํ™” this.task = task; this.complete = complete; } printDetails(){ console.log(`${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}` ); } } //๋ฐ์ดํ„ฐ const data=[ {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true}, {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false}, {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false}, ] //ํ…Œ์ŠคํŠธ ์ฝ”๋“œ let todoItem = new TodoItem(data[0].id,data[0].task,data[0].complete) console.log(todoItem); for(i=0; i<data.length; i++){ let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete); todoItem.printDetails(); }
      • ์ด๊ฑธ ts๋กœ ๋ฐ”๊ฟ€๋•Œ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋А๋ƒ!
      • TodoItem.ts
        • ์—๋Ÿฌ๋œธ
        • ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์•ผํ•จ.
        • ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ์Œ.
        • class TodoItem{ public id : number; // private, public, protected public task : string; public complete : boolean; constructor(id:number,task:string,complete:boolean){ this.id = id; this.task = task; this.complete = complete; } }
        • ๋‘๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์ž‘์„ฑํ•˜๋Š”๊ฑด ๋ถˆํŽธํ•˜๋‹ˆ ์ ‘๊ทผ ์ง€์ •์ž์— ํ•œ๋ฒˆ๋งŒ ํ•ด๋„๋จ
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        }
        
        // class TodoItem{
        //     public id : number; // private, public, protected
        //     public task : string;
        //     public complete : boolean;
        
        //     constructor(id:number,task:string,complete:boolean){
        //         this.id = id;
        //         this.task = task;
        //         this.complete = complete;
        //     }
        // }
        
        • return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void
        class TodoItem{
            constructor(public id:number, public task:string, public complete:boolean){
                this.id = id;
                this.task = task;
                this.complete = complete;
            }
        
            printDetails():void{ //return์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ๋Š” void๋กœ ์ง€์ •ํ•ด์คŒ
                console.log(
                    `${this.id}\\t${this.task}\\t${this.complete ? "\\t(complete)" : ""}`
                );
            }
        }
        
        export default TodoItem;
        
      • index.ts์—์„œ ์‚ฌ์šฉ
      import TodoItem from "./TodoItem";
      
      const data=[
          {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
          {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
          {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
      ]
      
      console.log('My Todo List');
      
      for(let i=0; i<data.length; i++){
          let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
          todoItem.printDetails();
      }
      
      • npm start
    • ์ •์  ํƒ€์ž…์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๋Š” C,Java์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณ€์ˆ˜ ์„ ์–ธ์— ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜์— ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋ณ€์ˆ˜์— ์ •์˜ํ•œ ํƒ€์ž…๊ณผ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๋Š” ts ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค.
    • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— ๋Œ€ํ•œ ํƒ€์ž… ์ •์˜๋Š” ํ•ด๋‹น ๋ฆฌํ„ฐ๋Ÿด ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ํƒ€์ž…์„ ๋‚˜์—ดํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ •์˜ํ•œ๋‹ค.
    const data=[ //data ํƒ€์ž…์ถ”๋ก 
        {id: 1, task: '์žฅ๋ณด๊ธฐ', complete:true},
        {id: 2, task: '์Œ์“ฐ๋ฒ„๋ฆฌ๊ธฐ', complete:false},
        {id: 3, task: '์žฌํ™œ์šฉ ์•ˆํ•˜๊ธฐ', complete:false},
    ]
    
    console.log('My Todo List');
    
    for(let i=0; i<data.length; i++){ //i ํƒ€์ž…์ถ”๋ก 
        let todoItem = new TodoItem(data[i].id, data[i].task, data[i].complete);
        todoItem.printDetails();
    }
    
    • ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฐ˜ํ™˜๊ฐ’์— ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค.
    • ํ•จ์ˆ˜์˜ ์ข…๋ฅ˜(์„ ์–ธ, ์ต๋ช…, ๋žŒ๋‹ค)์— ๋”ฐ๋ผ ํƒ€์ž… ์ง€์ •์— ๋Œ€ํ•œ ํ‘œํ˜„์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
    • ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •์˜ํ•  ๋•Œ ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€๋ณ€์ธ์ž๋ฅผ ํ†ตํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ ts๋Š” ๊ฐ€๋ณ€์ธ์ž๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋Œ€์‹  ํ•จ์ˆ˜์˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•ด ๊ฐ€๋ณ€์ธ์ž์™€ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ „๋‹ฌ์ธ์ž๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋‹ค.
    • ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜
    728x90
designitlikesloth