TypeScript
[ํ์ ์คํฌ๋ฆฝํธ] class์ getter์ setter
class User { firstName: string; lastName: string; fullName: string; constructor(firstName: string, lastName: string) { this.firstName = firstName; this.lastName = lastName; this.fullName = `${firstName} ${lastName}`; } } let user = new User("Steve", "Jobs"); console.log(user.fullName); //Steve Jobs console.log(user.firstName); //Steve user.firstName = "Jimmy"; console.log(user.fullName); //Steve..
[ํ์ ์คํฌ๋ฆฝํธ] ๊ฐ์ฒด์งํฅ์ ์ปคํผ๋จธ์ ๋ง๋ค๊ธฐ : encapsulation
์ด์ ํฌ์คํ ๋งํ์ ์บก์ํ๋ฅผ ํตํด์ ์ปคํผ๋จธ์ ๋ด๋ถ ๋ณ์๊ฐ์ ์ธ๋ถ์์ ์๋ก ์ฐ๋ ๊ฒ์ ๋ง์์ฃผ์ด์ผ ํ๋ ํ์์ฑ์ ๋ํด์ ๊ฐ์กฐํ์๋ค. //public, //private, //protected ๋ฑ์ ํค์๋๋ค์ ์ด์ฉํด์ ๋ค์ํ ๋ ๋ฒจ์ ์ ๋ณด๋ค์ ์๋ํํ ์ ์๋ค. ์บก์ํ๋ ๋ด๋ถ์ ์ผ๋ก๋ง ๊ฐ์ ธ์ผ ํ๋ ๊ฐ, ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ ์์๋ค์ ๋ถ๋ณํด์ฃผ๋ ์์ ์ด๋ค. type CoffeeCup = { shots: number; hasMilk: boolean; }; class coffeeMachine { private static BEANS_GRAMM_PER_SHOT: number = 7; private coffeeBeans: number = 0; constructor(coffeeBeans: number) { this.coffe..
[ํ์ ์คํฌ๋ฆฝํธ] ์ ์ฐจ์งํฅ์ ์ปคํผ๋จธ์ vs ๊ฐ์ฒด์งํฅ์ ์ปคํผ๋จธ์
type CoffeeCup = { shots: number; hasMilk: boolean; }; const BEANS_GRAMM_PER_SHOT: number = 7; let coffeeBeans: number = 0; function makeCoffee(shots: number): CoffeeCup { if (coffeeBeans < shots * BEANS_GRAMM_PER_SHOT) { throw new Error("Not enough coffee beans!"); } coffeeBeans -= shots * BEANS_GRAMM_PER_SHOT; return { shots, hasMilk: false, }; } function addCoffeeBeans(shots: number) { coffee..
[ํ์ ์คํฌ๋ฆฝํธ ์ ์ฉ ์์] ๊ฐ์ฒด์งํฅ 4๊ฐ์ง ์์น
์ข์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋, ๊ฐ. ์บก์ํ๊ฐ ์ ๋์ด ์์ ๋. ๋ฐ์ด๋ ์ถ์์ฑ ๋ค. ์์(์ฝ๋ ์ฌ์ฌ์ฉ) ๊ฐ,๋,๋ค๋ฅผ ํตํด์ ๋ผ. ๋คํ์ฑ์ ์ถ๊ตฌํ๋ค. ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ๋ฐ์ดํฐ์ ํจ์๊ฐ ๋ค ์์ฌ์๋ค. ์ฌ๊ธฐ์ ๊ด๋ จ์ด ์๋ ๋ฐ์ดํฐ์ ํจ์๋ค์ ๋ฌถ๋ ๊ฒ์ '์บก์ํ'๋ผ๊ณ ํ๋ค. ๋ํ ์ธ๋ถ์ ๋ ธ์ถํ ํ์๊ฐ ์๋ ๋ฐ์ดํฐ๋ค์ ์ ์จ๊ธฐ๋ ๊ฒ์ด๊ธฐ๋ ํ๋ค. (์์1 : ๊ฐ๊ธฐ์ฝ์ ์์, ํ์๋ค์ ์์ฌ๊ฐ ๊ฑด๋ค์ค ์บก์ ๊ฐ๊ธฐ์ฝ ํ๋๋ง ๋จน์ผ๋ฉด ๋๋ค. ๊ทธ ์บก์์์ ๊ฐ๋ฃจ๊ฐ ์ด๋ค ์ฑ๋ถ๋ค์ด ์์ฌ ์๋์ง๋ ๋ชฐ๋ผ๋ ๋๋ค.) (์์2 : ๊ณ ์์ด์ ์ํ๋ ์ธ๋ถ์์ ์ง์ ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.(์ฌํ, ์ํ, ๊ธฐ์จ, ํ์จ ๋ฑ...) ๋จ ์ฃผ์ธ์ด ๋์์ฃผ๊ณ ๋จน์ด๋ฅผ ์ฃผ๋ ๋ฑ์ ํ์(์ธ๋ถ ํจ์)๋ฅผ ๊ฐํจ์ผ๋ก์จ ๊ณ ์์ด์ ๋ด๋ถ ์ํ์ ๋ณํ๋ฅผ ์ฃผ์๋ค๋ฉด incap..
ํ์ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ์ํ ํ์ ์์
type LoadingState = { state: "loading"; }; type SuccessState = { state: "success"; response: { body: string; }; }; type FailState = { state: "fail"; reason: string; }; type ResourceLoadState = LoadingState | SuccessState | FailState; function printLoginState(state: ResourceLoadState) { switch (state.state) { case "loading": console.log("๐ loading..."); break; case "success": console.log("๐ loade..
ํ์ ์คํฌ๋ฆฝํธ ์ขํ ์ด๋ ์์
type direction = "up" | "down" | "left" | "right"; let position = { x: 0, y: 0 }; function move(dir: direction) { if (dir === "up") { position.y++; } if (dir === "down") { position.y--; } if (dir === "left") { position.x--; } if (dir === "right") { position.x++; } } console.log(position); // { x: 0, y: 0} move("up"); console.log(position); // { x: 0, y: 1} move("down"); console.log(position); //..
ํ์ ์คํฌ๋ฆฝํธ ๊ณ์ฐ๊ธฐ ํจ์ ๋ง๋ค๊ธฐ
type calculateStr = "add" | "substract" | "multiply" | "divide" | "remainder"; function calculate(calStr: calculateStr, num1: number, num2: number) { if (calStr == "add") { return num1 + num2; } if (calStr == "substract") { return num1 - num2; } if (calStr == "multiply") { return num1 * num2; } if (calStr == "divide") { return num1 / num2; } if (calStr == "remainder") { return num1 % num2; } thr..
Union๊ณผ ๋ ๋ค๋ฅธ Intersection ํ์
Union์ด Or์ด๋ผ๋ฉด Intersection์ And & ์ผ ๊ฒ์ด๋ค^^ type Student = { name: string; score: number; }; type Worker = { employeeId: number; work: () => void; }; function internWork(person: Student & Worker) { console.log(person.name, person.employeeId, person.work()); } internWork({ name: "ํ๊ธธ๋", score: 86, employeeId: 6, work: ()=> {}, }); //ํ๊ธธ๋ 6 undefined ์์ ์ฝ๋๊ฐ ์๋์ ๊ฐ๋ค๋ฉด, type Student = { name: string; score..
ํ์ ํ์ ! Discriminated Union
์ฐจ๋ณํ(๊ตฌ๋ถ) ํ ์ ์๋ Union ์๋ ์ฝ๋๋ฅผ ๊ฐ์ ํด๋ณด์ type SuccessState = { response: { body: string; }; }; type FailState = { reason: string; }; type LoginState = SuccessState | FailState; function login(): SuccessState | FailState { return { response: { body: "logged in!", }, }; } function printLoginState(state: LoginState) { if ("response" in state) { console.log(`๐ ${state.response.body}`); } else { console.log..
ํ์ ์คํฌ๋ฆฝํธ 1์ฅ ์ฐ์ต๋ฌธ์ | ํ์ ์คํฌ๋ฆฝํธ์ ์ถ๋ก
1. ํ์ ์คํฌ๋ฆฝํธ์ ์ถ๋ก ๋ฐฉ์ ์๊ธฐ let a = 10423; //number let b = "apple"; //string const c = "grape"; //"grape" let d = [true, false, true]; //boolean[] let e = { ์ด๋ฆ: "smith" }; //{ ์ด๋ฆ: string } let f = [1, false, "ํ๊ธธ๋"]; //(number | boolean | string)[] const g = [3]; //number[] let h = null; //any 2. ์๋ฌ์ ์์ธ ํ์ ํ๊ธฐ a. let i: 3 = 3; i = 4; ~ //'4'ํ์์ '3'ํ์์ ํ ๋นํ ์ ์์ต๋๋ค. ์์ธ : i ๋ณ์๋ฅผ ๋ช ์์ ์ผ๋ก ์ค์ง ํ๋์ ๊ฐ์ ๋ํ๋ด๋ ํ์ ์ธ 'ํ์ ๋ฆฌํฐ๋ด..