TypeScript
![[ํ์
์คํฌ๋ฆฝํธ] ๊ฐ์ฒด์งํฅ์ ์ผ๋ก stack ๊ตฌํํ๊ธฐ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbun8Cp%2FbtrAp6kkFsn%2FruBlasZokGsNcm3qwCKXQ1%2Fimg.png)
[ํ์ ์คํฌ๋ฆฝํธ] ๊ฐ์ฒด์งํฅ์ ์ผ๋ก stack ๊ตฌํํ๊ธฐ
๊ฐ์ข ์๋ฃ๊ตฌ์กฐ๋ค๋ 'ํด๋์ค'์ด๋ค. ๊ฐ๋ น C#์ stack ํด๋์ค๋ ๋ค์ ๋งํฌ์ ๊ฐ๋ค. https://docs.microsoft.com/ko-kr/dotnet/api/system.collections.stack?view=net-6.0 Stack ํด๋์ค (System.Collections) ์ ๋ค๋ฆญ์ด ์๋ ๊ฐ์ฒด์ ๊ฐ๋จํ LIFO(Last In First Out: ๋ง์ง๋ง์ ๋ค์ด๊ฐ ๊ฒ๋ถํฐ ์ฌ์ฉ) ์ปฌ๋ ์ ์ ๋ํ๋ ๋๋ค. docs.microsoft.com Stack ํด๋์ค ์ ์ ์ ๋ค๋ฆญ์ด ์๋ ๊ฐ์ฒด์ ๊ฐ๋จํ LIFO(Last In First Out: ๋ง์ง๋ง์ ๋ค์ด๊ฐ ๊ฒ๋ถํฐ ์ฌ์ฉ) ์ปฌ๋ ์ ์ ๋ํ๋ ๋๋ค. C#๋ณต์ฌ public class Stack : ICloneable, System.Collections.ICollectio..
![[ํ์
์คํฌ๋ฆฝํธ] Abstract ํด๋์ค์ abstract method](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtxcdL%2FbtrAlgAYuSe%2F6JrtzKG9DGtck3q2mnEcIk%2Fimg.png)
[ํ์ ์คํฌ๋ฆฝํธ] Abstract ํด๋์ค์ abstract method
์์ ํด๋์ค๋ฅผ ์ด์ฉํ ๋, ์ ํด๋์ค์์ ๋ฐ๋ณต๋๋ ๊ฒ์ด ์๊ณ ์ด๋ค ํน์ ๊ธฐ๋ฅ๋ง ์์ ํด๋์ค์์ ๊ทธ ์ํ๊ฐ ๋ฌ๋ผ์ง๋ค๋ฉด Abstract ํด๋์ค๋ฅผ ๋ง๋ค ๊ฒ์ ๊ณ ๋ คํด๋ณด์. abstract ํด๋์ค์ abstract ํจ์๋ ํ๋ก๊ทธ๋๋จธ์ ์ค์๋ฅผ ์ฌ์ ์ ์๋ฐฉํด์ฃผ๋ ๋งค๋ ฅ์ ์ธ ๊ธฐ๋ฅ๋ค์ ๊ฐ์ถ๊ณ ์๋ค. abstract ํด๋์ค์ abstract ํจ์๋ฅผ ์ด์ฉํ์ ๋์ ์ด์ ์, ๋ฌด์์ ์ค๋ฒ๋ผ์ด๋ฉ + super()ํธ์ถํ๊ธฐ ํ๋์ ์ด๋ ์ ๋ ๋์ฒดํ๋ฉด์ ์์ํด๋์ค์์ ๋ถ๋ชจํด๋์ค์ ์ฐจ๋ณํ๋๋ ์ถ์ํ ํจ์๋ค์ ๋ฐ๋์ ๊ตฌํํ ๊ฒ์ ๊ฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์๋์ ๊ฐ์ ์ฝ๋๋ฒ ์ด์ค๋ถํฐ ์์ํ๋ค. // //์ปคํผ๋จธ์ ๋ง๋ค๊ธฐ type CoffeeCup = { orderShot: number; hasMilk?: boolean; hasSalt?: bo..
![[ํ์
์คํฌ๋ฆฝํธ] composition ์ฅ์ ์ ๊ทน๋ํํ๋ ๊ฐ๋ ฅํ interface](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb47BuO%2FbtrAbF9Be1G%2FvAuTENKPAUpaGj1rNV9QZ0%2Fimg.jpg)
[ํ์ ์คํฌ๋ฆฝํธ] composition ์ฅ์ ์ ๊ทน๋ํํ๋ ๊ฐ๋ ฅํ interface
์ ํฌ์คํ ([ํ์ ์คํฌ๋ฆฝํธ] ๊ฐ์ฒด์งํฅ์ ๊ฝ composition(๋ถ์ : ์์์ ๋ฌธ์ ์ ) — My dev Note๐ (tistory.com))๊ณผ ์ด์ด์ง๋๋ค ์ ํฌ์คํ ์์ฝ : ์ปดํฌ์ง์ ์ ํตํด์(3~4๋จ๊ณ๋ฅผ ๋์ด๊ฐ๋ ์์ ์์ง ๊ด๊ณ๋ฅผ ํด์) ์์์ 2๋จ๊ณ ์ด์์ผ๋ก ์ฌ์ฉํ์ง ์๊ณ ๋ ํ๋์ ํด๋์ค์ ์ฌ๋ฌ๊ฐ์ง ๋ถํ ํด๋์ค๋ฅผ ์ฃผ์ ํค๋ฉ ํฌ์คํ ์์ฝ : "๊ฐ๋ ฅํ interface์ composition์ ๋ณตํฉ๊ฐ๋ ์ด ๋๋ ์ ๋ต ํจํด์ ์ด์ฉํ์ฌ ํ๋ฆฌํฐ ๋์ ์ฝ๋๋ฅผ ์์ฐํ์" ์ธํฐํ์ด์ค๋ก ํ์ฌ๊ธ ํ์ํ ๊ธฐ๋ฅ๋ค์ ๊ตฌํํ ๊ฐ๊ฐ ํด๋์ค๋ค์ ์์ฑ, ๋ถํ์ผ๋ก ์ ๋ฌํ์ฌ ์ฌ์ฉ์๋ ์ํ ๋๋ง๋ค ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ค๋ฅธ ๋ถํ( ํด๋์ค)๋ค์ ๋ผ์๋ฃ์ ์๋ก์ด ํด๋์ค๋ฅผ ์ฐ์ด๋ผ ์๋ ์๋ค. ์ํ๋ ์ฉ๋์ ๋ง๊ฒ ํด๋์ค๋ค์ ์ฝ๋ ์ฌ์ฌ์ฉํ๋ฉด์ ๋ง..
![[ํ์
์คํฌ๋ฆฝํธ] ๊ฐ์ฒด์งํฅ์ ๊ฝ composition(๋ถ์ : ์์์ ๋ฌธ์ ์ )](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3KjwP%2FbtrAaOEBJh3%2FBZDNnsW9umfnHUkzbyWpq0%2Fimg.png)
[ํ์ ์คํฌ๋ฆฝํธ] ๊ฐ์ฒด์งํฅ์ ๊ฝ composition(๋ถ์ : ์์์ ๋ฌธ์ ์ )
Favor Composition over inheritance "์์ ๋์ ์ ์ปดํฌ์ง์ (๋ป: ๊ตฌ์ฑ์์๋ค, ๊ตฌ์ฑ)์ ๋ ์ ํธํ์ธ์." ํ์ ์คํฌ๋ฆฝํธ OOP์ ๊ฝ, composition์ ๋ค๋ฃจ๊ธฐ ์ ์ ์์์ ๋ฌธ์ ์ ์ ๋ํด์ ๋จผ์ ์ ํ์๊ฐ ์๋ค. ๋ฏธ๋ฆฌ ๋งํ์๋ฉด, composition์ ๋ณต์กํ๊ฒ ์์์ ์์ง ๊ตฌ์กฐ๊ฐ ๊ธธ์ด์ง๋ ๋์ ์ ์์์ ๋ ๋ฒจ์ ํ ๋จ๊ณ๋ก๋ง ์ ์งํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ธฐ๋ฒ์ด๋ค. ๋ฌธ์ ์ ๋ ๋ฏธ๋ฆฌ ๋งํ์๋ฉด, composition์ฉ์ผ๋ก ๊ฐ์ ธ๋ค ์ฐ๋ ํด๋์ค์ ๊ฐ์ ธ์ค๋ ํด๋์ค ์ฌ์ด์ ์ปคํ๋ง์ด ๋๋ฌด ์ฌํ๋ค๋ ์ ์ด ์๋ค.( ๊ฐ์ ธ๋ค ์ฐ๋ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ค๋ฅธ ํด๋์ค๋ก ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด, ๊ฐ์ ธ๋ค ์ฐ๋ ํด๋์ค์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ํด๋์ค์ ๋ค์ด๊ฐ์ ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋ค.-> ๋ ํ์ฅ์ด ์ฝ๊ณ ์ ์ฐํ ํ ํฌ๋์ ๋ค์ ํฌ์คํ ์..
![[ํ์
์คํฌ๋ฆฝํธ] ๋คํ์ฑ(polymorphism)์ด ๋ญ๊ฐ ์ข์ ๊ฒ์ผ๊น?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2UAxo%2FbtrAaPbYbH4%2FZ94i6X6VSieDk7NPvwxgek%2Fimg.png)
[ํ์ ์คํฌ๋ฆฝํธ] ๋คํ์ฑ(polymorphism)์ด ๋ญ๊ฐ ์ข์ ๊ฒ์ผ๊น?
ํฌ์คํ ์ ๋ชฉ์ ํด๋ต์ ์๋ ์ฝ๋์ ์๋ค. ์๋ ์ฝ๋๋ฅผ ๋ณด๊ณ ๋, ์ง์ํ๊ธฐ ์ด๋ ต๋ค๋ฉด ํฌ์คํ ๊ฐ์ฅ ์๋์ ๊ธฐ์ฌํด๋์๋ค! //ํํธ1 const machines = [ new CoffeMachine(25, 25), new CafeLatteMachine(15, 25, 25, "S1"), new saltCoffeeMachine(5, 10), new CoffeMachine(25, 25), new CafeLatteMachine(15, 25, 25, "S1"), new saltCoffeeMachine(5, 10), ]; machines.forEach((machine) => { console.log("------------์ปคํผ๋จธ์ ๊ฐ๋~!------------"); console.log(machine.makeCoffee(1..
![[ํ์
์คํฌ๋ฆฝํธ] ์ปคํผ๋จธ์ ํด๋์ค <-์์- ์นดํ๋ผ๋ผ๋จธ์ ํด๋์ค](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKvYsQ%2Fbtrz5wYkvaA%2FIrQe0KMvf9b7LWbAfgg82K%2Fimg.png)
[ํ์ ์คํฌ๋ฆฝํธ] ์ปคํผ๋จธ์ ํด๋์ค <-์์- ์นดํ๋ผ๋ผ๋จธ์ ํด๋์ค
์ปคํผ๋จธ์ ํด๋์ค๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์๋ค. type CoffeeCup = { orderShot: number; hasMilk: boolean; }; interface CoffeeMaker { makeCoffee(shots: number): CoffeeCup; } //์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค์ด๋ค. class CoffeMachine implements CoffeeMaker { private static ONE_SHOT_CAPSULE: number = 3; private static ONE_CUP_WATER: number = 10; static makeMachine(beans: number, water: number): CoffeMachine { return new CoffeMachine(beans, wat..
[ํ์ ์คํฌ๋ฆฝํธ] OOP ๋คํ์ฑ, ์์ ๊ฐ๋ ํ์คํ๊ฒ ์ ๋ฆฌ
๋คํ์ฑ ์ ์ : ๋คํ์ฑ์ด๋ ํ๋์ ์ด๋ฆ(๋ฐฉ๋ฒ)์ผ๋ก ๋ง์ ์ํฉ์ ๋์ฒํ๋ ๊ธฐ๋ฒ์ด๋ค. ํจ๊ณผ : ๊ฐ๋ ์ ์ผ๋ก ๋์ผํ ์์ ์ ํ๋ ํจ์๋ค์ ๋๊ฐ์ ์ด๋ฆ์ ๋ถ์ฌํ ์ ์์ผ๋ฏ๋ก ์ฝ๋๊ฐ ๋ ๊ฐ๋จํด์ง๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ์ฌ์ฌ์ฉ, ์ฝ๋ ๊ธธ์ด ๊ฐ์๊ฐ ๋์ด ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๋๋ก ๋์์ค๋ค. ์์ ์ค๋ช ์ ์กฐ๊ธ ๋ ํ์ด ์ค๋ช ํ์๋ฉด, ์๋์ ๊ฐ๋ค. ๋คํ์ฑ์ [์์]์์ ๋น๋กฏ๋๋ ํฐ ์ฅ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค. ๋คํ์ฑ์ ์์์ ํตํด ๋์ผ ์ด๋ฆ์์๋ ๊ทธ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค. ๋คํ์ฑ : ๊ฐ์ ์ด๋ฆ์ ๋ถ๋ ๋๋ฐ ๋ค๋ฅธ ํ์์ ํ๋ ๊ฒ(๊ฐ์ ๋์์ด์ง๋ง ๋ค๋ฅธ ๊ณผ์ ๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋์ด) [ํด๋์ค ์์] extends ํด๋์ค ์์์ ์ ์ด์ฉํ๋ฉด ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ์ฌ์ฌ์ฉํ๋ฉด์, ์์ํด๋์ค์์๋ง ์กฐ๊ธ ๋ ์์ํด๋์ค์ ํน..
[ํ์ ์คํฌ๋ฆฝํธ] ์ ๋ค๋ฆญ ํ์ ๋ณ์นญ
type MyEvent = { target: T; type: string; }; type ButtonEvent = MyEvent; let myEvent: MyEvent = { target: "ํ๊ธธ๋์ด๋ฒคํธ", type: "click", }; type TimedEvent = { event: MyEvent; from: Date; to: Date; }; function trggerEvent(event: MyEvent): void { console.log(event); } trggerEvent({ target: "ํฉ์ง์ด์ด๋ฒคํธ", type: "mouseover", }); ์ ๋ค๋ฆญ ํ์ ๋ณ์นญ : ํ์ ๋ณ์นญ๊ณผ ํ ๋น ๊ธฐํธ(=) ์ฌ์ด์๋ง ์ ๋ค๋ฆญ ํ์ ์ ์ ์ธํ ์ ์๋ค. type MyEvent = { target: T; ty..
![[ํ์
์คํฌ๋ฆฝํธ] 2๊ฐ ์ด์์ ์ ๋ค๋ฆญ ์ ์ฉํด๋ณด๊ธฐ(์ถ๋ก , ๋ช
์, ํ๋ก๋ฏธ์ค ์ ๋ค๋ฆญ๊น์ง)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLj8Yn%2FbtrzZz2jP9b%2FKMeozITQ9XtknvEy8LbKK1%2Fimg.png)
[ํ์ ์คํฌ๋ฆฝํธ] 2๊ฐ ์ด์์ ์ ๋ค๋ฆญ ์ ์ฉํด๋ณด๊ธฐ(์ถ๋ก , ๋ช ์, ํ๋ก๋ฏธ์ค ์ ๋ค๋ฆญ๊น์ง)
2๊ฐ ์ด์์ ์ ๋ค๋ฆญ ์ ์ฉํด๋ณด๊ธฐ ์ด์ function map(array: unknown[], f: (item: unknown) => unknown): unknown[] { let result = []; for (let i = 0; i U): U[] { let result = []; for (let i = 0; i < array.length; i++) { result[i] = f(array[i]); } return result; } : ์ธ์ ๋ฐฐ์ด ๋ฉค๋ฒ์ ํ์ ์ ๋๋ณํ๋ T, ๋ฐํ ๋ฐฐ์ด ๋ฉค๋ฒ ํ์ ์ ๋๋ณํ๋ U..
[ํ์ ์คํฌ๋ฆฝํธ] ํจ์ํธ์ถ ์๊ทธ๋์ฒ์ ์ ๋ค๋ฆญ
function filter(array: T[], f: (item: T) => boolean): T[] { let result = []; // tslint:disable-next-line: prefer-for-of for (let i = 0; i boolean): T[] }; let names = [{ ์ด๋ฆ: "smith" }, { ์ด๋ฆ: "kate" }, { ์ด๋ฆ: "max" }]; //1. T๋ number๋ก ํ์ ๋จ console.log(filte..