๐Ÿ˜Ž
Onemorebottlee's TIL
  • ๐Ÿค“Introduce
  • ๐Ÿ“–DevLog
    • ๐Ÿ’ฃError
      • npm ERR! Cannot read properties of null (reading 'edgesOut')
      • git
        • src refspec main does not match any
      • NextJS
        • No img element
        • ReferenceError : document is not defined
        • `next/image` Un-configured Host
  • ๐Ÿ“บLecture
    • Nomad Coders
      • ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ ๋ฆฌ๋•์Šค 101
        • #0 Introduction
        • #1 PURE REDUX: COUNTER
        • #2 PURE REDUX: TO DO LIST
        • #3 REACT REDUX
        • #4 Redux Toolkit
      • ๋ฐ”๋‹๋ผ JS๋กœ ๊ทธ๋ฆผ ์•ฑ ๋งŒ๋“ค๊ธฐ
      • React JS ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค
        • #2 Styled Componnents
        • #3 TypeScript
        • #4 Crypto Tracker
        • #5 State Management
        • #6 Trello
        • #7 ANIMATIONS
      • Next.js ์‹œ์ž‘ํ•˜๊ธฐ
        • #0 INTRODUCTION
        • #1 FRAMEWORK OVERVIEW
        • #2 PRACTICE PROJECT
      • Typescript๋กœ ๋ธ”๋ก์ฒด์ธ ๋งŒ๋“ค๊ธฐ
        • #1 Introduction
        • #2 Overview of TypeScript
        • #3 Functions
        • #4 Classes and Interfaces
        • #5 TypeScript Blockchain
      • SQL Master Class
        • #1 Introduction
        • #2 SQLite
        • #3 Data Definition Language
        • #4 Data Manipulation Language
        • #5 Subqueries and CTEs
        • #6 Indexes
        • #7 MySQL
        • #8 Foreign Keys
        • #9 JOINS
        • #10 Nomalization
        • #11 Events & Triggers
        • #12 Full-Text Indexes
        • #13 PostgreSQL
        • #14 Functions And Procedures
        • #15 Transactions
        • #16 Data Control Language
        • #17 PostgreSQL JSON Columns
        • #18 PostgreSQL Extensions
        • #19 MongoDB
        • #20 REDIS
        • #21 Javascript and Python Drivers
    • Udemy
      • TypeScript ๋งˆ์Šคํ„ฐ with Webpack & React
        • [S1] ์†Œ๊ฐœ
        • [S2] ์„ค์น˜ ๋ฐ ์„ค์ •
        • [S3] ํƒ€์ž… ์• ๋„ˆํ…Œ์ด์…˜ ๊ธฐ์ดˆ
        • [S4] ํ•จ์ˆ˜
        • [S5] ๊ฐ์ฒด ํƒ€์ž…
        • [S6] ๋ฐฐ์—ด ํƒ€์ž…
        • [S7] ์œ ๋‹ˆ์˜จํƒ€์ž…
        • [S8] Tuple & Enum
        • [S9] ์ธํ„ฐํŽ˜์ด์Šค
        • [S10] TypeScript ์ปดํŒŒ์ผ๋Ÿฌ
        • [S11] ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ DOM, ํƒ€์ž… ๋‹จ์–ธ, ๊ทธ๋ฆฌ๊ณ  ๋” ๋งŽ์€ ๋‚ด์šฉ
        • [S12] Class
        • [S13] TS Class
        • [S14] Generics โญโญโญโญโญ
        • [S15] Narrowing
        • [S16] Type Declarations
        • [S17] Module
        • [S18] Webpack ๊ณผ TypeScript
        • [S19] React
    • ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ปดํ“จํ„ฐ ๊ณผํ•™ CS50
      • 1. ์ปดํ“จํŒ… ์‚ฌ๊ณ 
      • 2. C์–ธ์–ด
      • 3. ๋ฐฐ์—ด
      • 4. ์•Œ๊ณ ๋ฆฌ์ฆ˜
      • 5. ๋ฉ”๋ชจ๋ฆฌ
      • 6. ์ž๋ฃŒ๊ตฌ์กฐ
    • ์ƒํ™œ์ฝ”๋”ฉ
      • DATABASE
        • DATABASE1
  • ๐Ÿ“šBook
    • ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive
      • 1์žฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • 2์žฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€?
      • 3์žฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์‹คํ–‰ ๋ฐฉ๋ฒ•
      • 4์žฅ ๋ณ€์ˆ˜
      • 5์žฅ ํ‘œํ˜„์‹๊ณผ ๋ฌธ
      • 6์žฅ ๋ฐ์ดํ„ฐ ํƒ€์ž…
      • 7์žฅ ์—ฐ์‚ฐ์ž
      • 8์žฅ ์ œ์–ด๋ฌธ
      • 9์žฅ ํƒ€์ž… ๋ณ€ํ™˜๊ณผ ๋‹จ์ถ• ํ‰๊ฐ€ โญโญโญ
      • 10์žฅ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด
      • 11์žฅ ์›์‹œ ๊ฐ’๊ณผ ๊ฐ์ฒด์˜ ๋น„๊ต
      • 12์žฅ ํ•จ์ˆ˜ โญโญโญโญ
      • 13์žฅ ์Šค์ฝ”ํ”„
      • 14์žฅ ์ „์—ญ ๋ณ€์ˆ˜์˜ ๋ฌธ์ œ์ 
      • 15์žฅ let, const ํ‚ค์›Œ๋“œ์™€ ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„ โญโญโญ
      • 16์žฅ ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ
      • 17์žฅ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ
      • 18์žฅ ํ•จ์ˆ˜์™€ ์ผ๊ธ‰ ๊ฐ์ฒด โญโญ
      • 19์žฅ ํ”„๋กœํ† ํƒ€์ž… โญโญโญโญโญ
      • 20์žฅ strict mode
      • 21์žฅ ๋นŒํŠธ์ธ ๊ฐ์ฒด โญ
      • 22์žฅ this โญโญโญ
      • 23์žฅ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ โญโญโญโญโญโญโญโญโญโญ
      • 24์žฅ ํด๋กœ์ € โญโญโญโญโญโญโญ
      • 25์žฅ ํด๋ž˜์Šค
      • 26์žฅ ES6 ํ•จ์ˆ˜์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ
      • 27์žฅ ๋ฐฐ์—ด โญโญโญ
      • 28์žฅ Number
      • 29์žฅ Math
      • 30์žฅ Date
      • 31์žฅ RegExp
      • 32์žฅ String
      • 33์žฅ 7๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ํƒ€์ž… Symbol
      • 34์žฅ ์ดํ„ฐ๋Ÿฌ๋ธ”
      • 35์žฅ ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•
      • 36์žฅ ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น
      • 37์žฅ Set๊ณผ Map
      • 38์žฅ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •โญโญโญโญโญโญโญโญ
      • 39์žฅ DOM โญโญโญโญโญโญโญโญโญโญโญ
      • 40์žฅ ์ด๋ฒคํŠธโญโญโญโญโญโญโญโญโญโญโญ
      • 41์žฅ ํƒ€์ด๋จธ
      • 42์žฅ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ โญโญโญโญโญโญโญโญ
      • 43์žฅ Ajax
      • 44์žฅ REST API
      • 45์žฅ ํ”„๋กœ๋ฏธ์Šค
      • 46์žฅ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ์™€ async/await
      • 47์žฅ ์—๋Ÿฌ ์ฒ˜๋ฆฌ
      • 48์žฅ ๋ชจ๋“ˆ
      • 49์žฅ Babel๊ณผ Webpack์„ ์ด์šฉํ•œ ES6+/ES.NEXT ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•
    • ๋Ÿฌ๋‹ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
      • Ch.1 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ
      • Ch.2 ํƒ€์ž… ์‹œ์Šคํ…œ
      • Ch.3 ์œ ๋‹ˆ์–ธ๊ณผ ๋ฆฌํ„ฐ๋Ÿด
      • Ch.4 ๊ฐ์ฒด
      • Ch.5 ํ•จ์ˆ˜
      • Ch.6 ๋ฐฐ์—ด
      • Ch.7 ์ธํ„ฐํŽ˜์ด์Šค
      • Ch.8 ํด๋ž˜์Šค
      • Ch.9 ํƒ€์ž… ์ œํ•œ์ž
      • Ch.10 ์ œ๋„ค๋ฆญ
      • Ch.11 ์„ ์–ธ ํŒŒ์ผ
      • Ch.12 IDE ๊ธฐ๋Šฅ ์‚ฌ์šฉ
      • Ch.13 ๊ตฌ์„ฑ ์˜ต์…˜
      • Ch.14 ๊ตฌ๋ฌธ ํ™•์žฅ
      • Ch.15 ํƒ€์ž… ์šด์˜
      • ์šฉ์–ด ์‚ฌ์ „
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์™„๋ฒฝ ๊ฐ€์ด๋“œ
    • SQL in 10 Minutes
      • 1์žฅ SQL ์ดํ•ดํ•˜๊ธฐ
      • 2์žฅ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
      • 3์žฅ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ ์ •๋ ฌํ•˜๊ธฐ
      • 4์žฅ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง
      • 5์žฅ ๊ณ ๊ธ‰ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง
      • 6์žฅ ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž๋ฅผ ์ด์šฉํ•œ ํ•„ํ„ฐ๋ง
      • 7์žฅ ๊ณ„์‚ฐ ํ•„๋“œ ์ƒ์„ฑํ•˜๊ธฐ
      • 8์žฅ ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
      • 9์žฅ ๋ฐ์ดํ„ฐ ์š”์•ฝ
      • 10์žฅ ๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ•‘
      • 11์žฅ ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ
      • 12์žฅ ํ…Œ์ด๋ธ” ์กฐ์ธ
      • 13์žฅ ๊ณ ๊ธ‰ ํ…Œ์ด๋ธ” ์กฐ์ธ ์ƒ์„ฑํ•˜๊ธฐ
      • 14์žฅ ์ฟผ๋ฆฌ ๊ฒฐํ•ฉํ•˜๊ธฐ
      • 15์žฅ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…ํ•˜๊ธฐ
      • 16์žฅ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ์™€ ์‚ญ์ œ
      • 17์žฅ ํ…Œ์ด๋ธ” ์ƒ์„ฑ๊ณผ ์กฐ์ž‘
      • 18์žฅ ๋ทฐ ์‚ฌ์šฉํ•˜๊ธฐ
      • 19์žฅ ์ €์žฅ ํ”„๋กœ์‹œ์ € ์‚ฌ์šฉํ•˜๊ธฐ
      • 20์žฅ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๊ด€๋ฆฌํ•˜๊ธฐ
      • 21์žฅ ์ปค์„œ ์‚ฌ์šฉํ•˜๊ธฐ
      • 22์žฅ ๊ณ ๊ธ‰ ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์˜ต์…˜
    • ๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ
      • 4 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
        • 4.1 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธฐ๋ณธ
    • 2023 ์ด๊ธฐ์  SQL ๊ฐœ๋ฐœ์ž ์ด๋ก ์„œ + ๊ธฐ์ถœ๋ฌธ์ œ
      • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ์ดํ•ด
        • S1. ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง
  • ๐Ÿ’ปStudy
    • CS ์ง€์‹ ๋ฐœํ‘œ
      • 1ํšŒ์ฐจ
      • 2ํšŒ์ฐจ
      • 3ํšŒ์ฐจ
      • 4ํšŒ์ฐจ
      • 5ํšŒ์ฐจ
      • 6ํšŒ์ฐจ
      • 7ํšŒ์ฐจ
      • 8ํšŒ์ฐจ
      • 9ํšŒ์ฐจ
    • TypeScript Exercises
      • Ex 1
      • Ex 2
      • Ex 3
      • Ex 4
      • Ex 5
      • Ex 6
      • Ex 7
      • Ex 8
      • Ex 9
      • Ex 10
  • ๐Ÿ”„ETC
    • Article
      • Atomic Design Pattern
      • ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž
    • DATABASE
      • Oracle
        • CEIL() & FLOOR() - ์†Œ์ˆ˜์  ์˜ฌ๋ฆผ & ๋‚ด๋ฆผ
        • DUAL ํ…Œ์ด๋ธ” - ์ž„์‹œ ํ…Œ์ด๋ธ”๋กœ ๊ฒฐ๊ณผ ํ™•์ธํ•˜๊ธฐ
    • Ubuntu
      • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—…๋ฐ์ดํŠธ
Powered by GitBook
On this page
  • #4.0 Classes
  • #4.1 Recap
  • #4.2 Interfaces
  • #4.3 Interfaces part Two
  • #4.4 Recap
  • #4.5 Polymorphism

Was this helpful?

  1. Lecture
  2. Nomad Coders
  3. Typescript๋กœ ๋ธ”๋ก์ฒด์ธ ๋งŒ๋“ค๊ธฐ

#4 Classes and Interfaces

#4.0 Classes

TS๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๊ธฐ

class Player {
    constructor (
        private firstName: string, // JS ์—๋Š” private๊ฐ€ ์—†์Œ TS์—์„œ๋งŒ ์ž‘๋™
        private lastName: string,
        public nickname: string
    ) {}
}

const nic = new Player("nic", "las", "n")

nic.firstname // TS์—์„œ์ž‘๋™ ์•ˆํ•จ private ์ด๊ธฐ์—
nic.nicname // ์ž‘๋™

Abstract - ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค, ์ง์ ‘ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋Š” ์—†์Œ JS์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Œ Only TS

abstract class User {    // ์ถ”์ƒ ํด๋ž˜์Šค
    constructor (
        private firstName: string,
        private lastName: string,
        public nickname: string
    ) {}
    abstract getNickName(): void // absc- ์•ˆ์— absc ๊ฐ€๋Šฅ, class์—์„œ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผํ•จ
    
    getFullName(){    // ์ถ”์ƒ ๋ฉ”์†Œ๋“œ
        return `${this.firstName} ${this.lastName}`
    }
}

class Player extends User {
    ...
}

const nic = new Player("nic", "las", "n")
nic.getFullName() // "nic las"

์ ‘๊ทผ ๊ฐ€๋Šฅ ์œ„์น˜

๊ตฌ๋ถ„
์„ ์–ธํ•œ ํด๋ž˜์Šค ๋‚ด
์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค ๋‚ด
์ธ์Šคํ„ด์Šค

private

O

X

X

protected

O

O

X

public

O

O

O

=> TS์—์„œ ์ฒดํฌํ•˜๊ณ  JS์—์„œ๋Š” ๋ณด์ด์ง€ ์•Š์Œ

#4.1 Recap

4.0 ๋ณต์Šต

type Words = {
    [key: string] : string // Words ํƒ€์ž…์ด string๋งŒ์„ ํ”„๋กœํผํ‹ฐ๋กœ ๊ฐ–๋Š” ์˜ค๋ธŒ์ ํŠธ
}

class Dic {
    private words: Words
    constructor() {
        this.words = {}
    }
    add(word: Word){ // ํด๋ž˜์Šค๋ฅผ ํƒ€์ž…์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
        if(this.words[word.term] === undefined){
            this.words[word.term] = word.def;
        }
    }
    def(tern: string){
        return this.words[term]
    }
}

class Word {
    constructor() {
        public term: string,
        public def: string
    } {}
}

const kimchi = new Word("kimchi", "ํ•œ๊ตญ์Œ์‹")

const dic = new Dic(kimchi)
dic.add(kimchi)
dic.def("kimchi")

+ mission

#4.2 Interfaces

ํƒ€์ž…๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ๋‹ค๋ฆ„

// ํƒ€์ž…
// ํŠน์ • ๊ฐ’๋งŒ ๊ฐ€์ง€๋„๋ก ์ œํ•œ ๊ฐ€๋Šฅ
type Team = "MU" | "BM" | "NA"
type Health = 1 | 5 | 10
type Player = {
    nickname: string,
    team: Team,
    health: Health,
}

const kim : Player = {
    nickname: Kim,
    team: BM,
    health: 11 // err : ์„ค์ •๋œ ํƒ€์ž…์ด ์•„๋‹ˆ๊ธฐ์— ์—๋Ÿฌ ๋ฐœ์ƒ
}

Interface - ์˜ค์ง ํ•œ๊ฐ€์ง€ ์šฉ๋„๋กœ ์˜ค๋ธŒ์ ํŠธ์˜ ๋ชจ์–‘์„ ํŠน์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

// ์ธํ„ฐํŽ˜์ด์Šค
type Team = "MU" | "BM" | "NA"
type Health = 1 | 5 | 10

interface Player {
    nickname: string,
    team: Team,
    health: Health,
}

const kim : Player = {
    nickname: Kim,
    team: BM,
    health: 11 // err : ์„ค์ •๋œ ํƒ€์ž…์ด ์•„๋‹ˆ๊ธฐ์— ์—๋Ÿฌ ๋ฐœ์ƒ
}

type๊ณผ interface๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ ๋ชจ์–‘์„ ํŠน์ •ํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„์ด๋ฏ€๋กœ ๊ฑฐ์˜ ๊ฐ™์Œ

interface User {
    name: string
}

interface Player extends User {}

const kim : Player = {
    name: "Kim"
}

/////////

type User = {
    name: string
}

type Player = User & {}

const kim : Player = {
    name: "Kim"
}

interface๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฐœ๋…์„ ํ™œ์šฉํ•ด ๋””์ž์ธ๋˜์—ˆ๊ณ , ํƒ€์ž…์€ ๋” ์œ ์—ฐํ•˜๊ณ  ๊ฐœ๋ฐฉ์ ์ž„

// Interface ํ”„๋กœํผํ‹ฐ์˜ ์ถ•์ ์ด ๊ฐ€๋Šฅํ•จ
interface User {name: string}
interface User {lastName: string}
interface User {age: number}

const nico :User = {
    name: "nico",
    lastName: "n",
    age: 10
}

#4.3 Interfaces part Two

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ€๋ณ๋‹ค. ์ปดํŒŒ์ผํ•˜๋ฉด JS๋กœ ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

abstract class User {
    constructor(
        protected firstName: string,
        protected lastName: string
    ) {}
    
    abstract sayHi (name: string):string
    abstract fullName (): string
}

class Player extends User {
    fullName(){
        return `${this.firstName} ${this.lastName}`
    }
    sayHi(name:string){
        return `Hello ${name}. My Name is ${this.fullName()}`
    }
}


// => abstract ๋ฅผ interface ๋กœ ๋ณ€๊ฒฝ
interface User {
    firstName: string,
    lastName: string, 
    sayHi (name: string):string
    fullName (): string
}

class Player implements User { // implements ๋Š” JS ์— ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ
    constructor(
        public firstName: string,
        public lastName: string
    ){}
    
    fullName(){
        return `${this.firstName} ${this.lastName}`
    }
    sayHi(name:string){
        return `Hello ${name}. My Name is ${this.fullName()}`
    }
}

์œ„ ๋‘ ์ฝ”๋“œ๋Š” ๊ฐ™์€ ๋‚ด์šฉ์„ abstract๋กœ ์ƒ์„ฑํ–ˆ์„ ๋•Œ์™€ interface๋กœ ์ƒ์„ฑํ–ˆ์„ ๋•Œ์˜ ์ฐจ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๋ณด๋ฉด ํฐ ์ฐจ์ด ์—†์–ด๋ณด์ด์ง€๋งŒ, JS๋กœ ์ปดํŒŒ์ผํ•œ ๋‚ด์šฉ์„ ์‚ดํŽด๋ณด๋ฉด ๋ถˆํ•„์š”ํ•œ User class๊ฐ€ ์‚ฌ๋ผ์ ธ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋งŒํผ ๋” ๊ฐ€๋ฒผ์›Œ์กŒ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

#4.4 Recap

  1. Type๊ณผ Interface ๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ ๋ชจ์–‘์„ ์ง€์ •ํ•˜๋Š” ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

type PlayerA = {
    name: string
}

const playerA: PlayerA = {
    name: "Kim MJ"
}

///

interface BlayerB {
    name: string
}

const playerB: PlayerB = {
    name: "Son HM"
}
  1. ์ถ”๊ฐ€์ ์ธ ๋ถ€๋ถ„์—์„œ ์ฐจ์ด๊ฐ€ ์ƒ๊ธด๋‹ค.

type PlayerA = {
    name: string
}

type PlayerAA = PlayerA & {
    lastName: string
}

const playerA: PlayerAA = {
    name: "MJ"
    lastName: "Kim"
}

///
interface PlayerB {
    name: string
}

interface PlayerBB extends PlayerB { // ์ด๋Ÿฐ ์‹์œผ๋กœ ์ƒ์† ๊ฐ€๋Šฅํ•˜๋‹ค.
    lastName: string
}

interface PlayerBB {    // ์ด๋Ÿฐ ์‹์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค.
    health: 10
}

const playerB: PlayerB = {
    name: "HM"
    lastName: "Son"
    health: 10
}
  1. ์ถ”์ƒ class๋ฅผ ๋Œ€์ฒดํ•œ๋‹ค.

type PlayerA = {
    firstName: string
}

class User implements PlayerA {
    constructor(
        public firstName: string
    ){}
}

interface PlayerB {
    firstName: string
}

class User implements PlayerB {
    constructor(
        public firstName: string
    ){}
}

=> ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์— ์˜ค๋ธŒ์ ํŠธ์˜ ๋ชจ์–‘์„ ์•Œ๋ ค์ฃผ๊ณ  ์‹ถ์œผ๋ฉด interface, ๋‚˜๋จธ์ง€ ์ƒํ™ฉ์—์„œ๋Š” type์„ ์‚ฌ์šฉํ•ด๋ผ~

#4.5 Polymorphism

๋‹คํ˜•์„ฑ - ๋‹ค๋ฅธ ๋ชจ์–‘์˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š”๊ฒƒ. ์ œ๋„ค๋ฆญ(placeholder ํƒ€์ž…)์„ ์‚ฌ์šฉํ•œ๋‹ค.

interface SStorage<T> {
    [key: string]: T
}

class LocalStoage<T> {
    private storage : SStorage<T> = {}
    set(key:string, value:T){
        this.storage[key] = value
    }
    remove(key:string){
        delete this.storage[key]
    }
    get(key:string):T {
        return this.storage[key]
    }
    clear(){
        this.storage = {}
    }
}

const stringsStroage = new LocalStorageMstring<string>()
stringsStorage.get("ee")
stringsStorage.set("hello", "world")
stringsStorage.set("hello", 1) // err T is string

const booleansStorage = new LocalStorage<boolean>()
booleansStorage.get("xxx")
stringsStorage.set("hello", "world")

Previous#3 FunctionsNext#5 TypeScript Blockchain

Last updated 1 year ago

Was this helpful?

๐Ÿ“บ