-
TypeScript 101์นดํ ๊ณ ๋ฆฌ ์์ 2023. 4. 20. 17:25728x90
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์ ์ง์ ์ ํด๋จ๊ธฐ ๋๋ฌธ์ ํ์ผ๋ช ์ ์ง์ ํด์ฃผ์ง ์์๋ ์ปดํ์ผ์ด ์์์ ๋จ.
- tsconfig.json
- 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
- index.js
- ์ ์ ํ์ ์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ 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์ ์ง์ ์ ํด๋จ๊ธฐ ๋๋ฌธ์ ํ์ผ๋ช ์ ์ง์ ํด์ฃผ์ง ์์๋ ์ปดํ์ผ์ด ์์์ ๋จ.
- tsconfig.json
- 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
- index.js
- ์ ์ ํ์ ์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ 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์ ์ง์ ์ ํด๋จ๊ธฐ ๋๋ฌธ์ ํ์ผ๋ช ์ ์ง์ ํด์ฃผ์ง ์์๋ ์ปดํ์ผ์ด ์์์ ๋จ.
- tsconfig.json
- 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
- index.js
- ์ ์ ํ์ ์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ 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์ ์ง์ ์ ํด๋จ๊ธฐ ๋๋ฌธ์ ํ์ผ๋ช ์ ์ง์ ํด์ฃผ์ง ์์๋ ์ปดํ์ผ์ด ์์์ ๋จ.
- tsconfig.json
- 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
- index.js
- ์ ์ ํ์ ์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ 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์ ์ง์ ์ ํด๋จ๊ธฐ ๋๋ฌธ์ ํ์ผ๋ช ์ ์ง์ ํด์ฃผ์ง ์์๋ ์ปดํ์ผ์ด ์์์ ๋จ.
- tsconfig.json
- 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
- index.js
- ์ ์ ํ์ ์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ 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์ ์ง์ ์ ํด๋จ๊ธฐ ๋๋ฌธ์ ํ์ผ๋ช ์ ์ง์ ํด์ฃผ์ง ์์๋ ์ปดํ์ผ์ด ์์์ ๋จ.
- tsconfig.json
- 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
- index.js
- ์ ์ ํ์ ์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ 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์ ์ง์ ์ ํด๋จ๊ธฐ ๋๋ฌธ์ ํ์ผ๋ช ์ ์ง์ ํด์ฃผ์ง ์์๋ ์ปดํ์ผ์ด ์์์ ๋จ.
- tsconfig.json
- 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
- index.js
- ์ ์ ํ์ ์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ 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 - ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ฑ