TypeScript

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ stack ๊ตฌํ˜„ํ•˜๊ธฐ

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ 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

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] Abstract ํด๋ž˜์Šค์™€ abstract method

    ์ƒ์† ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•  ๋•Œ, ์œ„ ํด๋ž˜์Šค์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ์ด ์žˆ๊ณ  ์–ด๋–ค ํŠน์ • ๊ธฐ๋Šฅ๋งŒ ์ž์‹ ํด๋ž˜์Šค์—์„œ ๊ทธ ์–‘ํƒœ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค๋ฉด Abstract ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ๊ฒƒ์„ ๊ณ ๋ คํ•ด๋ณด์ž. abstract ํด๋ž˜์Šค์™€ abstract ํ•จ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์‹ค์ˆ˜๋ฅผ ์‚ฌ์ „์— ์˜ˆ๋ฐฉํ•ด์ฃผ๋Š” ๋งค๋ ฅ์ ์ธ ๊ธฐ๋Šฅ๋“ค์„ ๊ฐ–์ถ”๊ณ  ์žˆ๋‹ค. abstract ํด๋ž˜์Šค์™€ abstract ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ–ˆ์„ ๋•Œ์˜ ์ด์ ์€, ๋ฌด์ž‘์ • ์˜ค๋ฒ„๋ผ์ด๋”ฉ + super()ํ˜ธ์ถœํ•˜๊ธฐ ํ™œ๋™์„ ์–ด๋Š ์ •๋„ ๋Œ€์ฒดํ•˜๋ฉด์„œ ์ž์‹ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจํด๋ž˜์Šค์™€ ์ฐจ๋ณ„ํ™”๋˜๋Š” ์ถ”์ƒํ™” ํ•จ์ˆ˜๋“ค์„ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•  ๊ฒƒ์„ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. // //์ปคํ”ผ๋จธ์‹  ๋งŒ๋“ค๊ธฐ type CoffeeCup = { orderShot: number; hasMilk?: boolean; hasSalt?: bo..

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] composition ์žฅ์ ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ interface

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] composition ์žฅ์ ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ interface

    ์ „ ํฌ์ŠคํŒ…([ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ฝƒ composition(๋ถ€์ œ: ์ƒ์†์˜ ๋ฌธ์ œ์ ) — My dev Note๐Ÿ“’ (tistory.com))๊ณผ ์ด์–ด์ง‘๋‹ˆ๋‹ค ์ „ ํฌ์ŠคํŒ… ์š”์•ฝ : ์ปดํฌ์ง€์…˜์„ ํ†ตํ•ด์„œ(3~4๋‹จ๊ณ„๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ์ƒ์† ์ˆ˜์ง ๊ด€๊ณ„๋ฅผ ํ•ด์†Œ) ์ƒ์†์„ 2๋‹จ๊ณ„ ์ด์ƒ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ถ€ํ’ˆ ํด๋ž˜์Šค๋ฅผ ์ฃผ์ž… ํ—ค๋”ฉ ํฌ์ŠคํŒ… ์š”์•ฝ : "๊ฐ•๋ ฅํ•œ interface์™€ composition์˜ ๋ณตํ•ฉ๊ฐœ๋…์ด ๋˜๋Š” ์ „๋žต ํŒจํ„ด์„ ์ด์šฉํ•˜์—ฌ ํ€„๋ฆฌํ‹ฐ ๋†’์€ ์ฝ”๋“œ๋ฅผ ์ƒ์‚ฐํ•˜์ž" ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ•˜์—ฌ๊ธˆ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๊ตฌํ˜„ํ•œ ๊ฐ๊ฐ ํด๋ž˜์Šค๋“ค์„ ์ƒ์„ฑ, ๋ถ€ํ’ˆ์œผ๋กœ ์ „๋‹ฌํ•˜์—ฌ ์‚ฌ์šฉ์ž๋Š” ์›ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋‹ค๋ฅธ ๋ถ€ํ’ˆ( ํด๋ž˜์Šค)๋“ค์„ ๋ผ์›Œ๋„ฃ์€ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ฐ์–ด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์›ํ•˜๋Š” ์šฉ๋„์— ๋งž๊ฒŒ ํด๋ž˜์Šค๋“ค์„ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋งŒ..

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ฝƒ composition(๋ถ€์ œ: ์ƒ์†์˜ ๋ฌธ์ œ์ )

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ฝƒ composition(๋ถ€์ œ: ์ƒ์†์˜ ๋ฌธ์ œ์ )

    Favor Composition over inheritance "์ƒ์† ๋Œ€์‹ ์— ์ปดํฌ์ง€์…˜(๋œป: ๊ตฌ์„ฑ์š”์†Œ๋“ค, ๊ตฌ์„ฑ)์„ ๋” ์„ ํ˜ธํ•˜์„ธ์š”." ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ OOP์˜ ๊ฝƒ, composition์„ ๋‹ค๋ฃจ๊ธฐ ์ „์— ์ƒ์†์˜ ๋ฌธ์ œ์ ์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์•Œ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ๋ฏธ๋ฆฌ ๋งํ•˜์ž๋ฉด, composition์€ ๋ณต์žกํ•˜๊ฒŒ ์ƒ์†์˜ ์ˆ˜์ง ๊ตฌ์กฐ๊ฐ€ ๊ธธ์–ด์ง€๋Š” ๋Œ€์‹ ์— ์ƒ์†์˜ ๋ ˆ๋ฒจ์„ ํ•œ ๋‹จ๊ณ„๋กœ๋งŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ๋ฌธ์ œ์ ๋„ ๋ฏธ๋ฆฌ ๋งํ•˜์ž๋ฉด, composition์šฉ์œผ๋กœ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ํด๋ž˜์Šค์™€ ๊ฐ€์ ธ์˜ค๋Š” ํด๋ž˜์Šค ์‚ฌ์ด์˜ ์ปคํ”Œ๋ง์ด ๋„ˆ๋ฌด ์‹ฌํ•˜๋‹ค๋Š” ์ ์ด ์žˆ๋‹ค.( ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด, ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ํด๋ž˜์Šค์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ํด๋ž˜์Šค์— ๋“ค์–ด๊ฐ€์„œ ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค.-> ๋” ํ™•์žฅ์ด ์‰ฝ๊ณ  ์œ ์—ฐํ•œ ํ…Œํฌ๋‹‰์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์„..

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ๋‹คํ˜•์„ฑ(polymorphism)์ด ๋ญ๊ฐ€ ์ข‹์€ ๊ฒƒ์ผ๊นŒ?

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ๋‹คํ˜•์„ฑ(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..

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ์ปคํ”ผ๋จธ์‹ ํด๋ž˜์Šค <-์ƒ์†- ์นดํŽ˜๋ผ๋–ผ๋จธ์‹ ํด๋ž˜์Šค

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ์ปคํ”ผ๋จธ์‹ ํด๋ž˜์Šค <-์ƒ์†- ์นดํŽ˜๋ผ๋–ผ๋จธ์‹ ํด๋ž˜์Šค

    ์ปคํ”ผ๋จธ์‹  ํด๋ž˜์Šค๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์žˆ๋‹ค. 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๊ฐœ ์ด์ƒ์˜ ์ œ๋„ค๋ฆญ ์ ์šฉํ•ด๋ณด๊ธฐ(์ถ”๋ก , ๋ช…์‹œ, ํ”„๋กœ๋ฏธ์Šค ์ œ๋„ค๋ฆญ๊นŒ์ง€)

    [ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] 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..