다형성(Polymorphism)

꾸준히·2025년 4월 22일

TypeScript

목록 보기
4/17

다형성(Polymorphism)

  • Poly + morphism
  • (many, much) + (structure)
  • 다양한 형태, 구조, 모양
  • 하나가 여러가지의 형태를 가질 수 있음을 의미

별칭 정의 예시

  • 기본 Alias 방식

    type Basic = {
        a: number
    }
  • 함수 타입을 별칭으로 정의한 방식

    type Basic = {
        (a: number[]):void
    }
    
    // 함수 타입을 바로 사용하는 경우
    const myFunc: (a: number[]) => void = (a) => {
        console.log(a)
    }
    • Basic은 타입 별칭
    • (a: number[]):void은 함수 타입을 정의하는 방식
    • a: number[]number 타입의 배열을 인자로 받고
    • void는 리턴 형식인데, 지금 코드에서는 리턴값이 없음

다형성 예시

type Basic = {
	(a: number[]):void
    (a: boolean[]):void
    (a: string[]):void
    (a: (number|boolean)[]):void
}

하나의 타입 별칭에 다양한 구조가 있음을 의미한다.

위 타입 별칭을 기준으로 함수에 적용하면

const print:Basic = (arr) => {
	forEach((i) => console.log(i))
}

print([1,2,3]) // [1,2,3]
print([true, false, false]) // [true, false, false]
print(["a","b","c"]) // ["a","b","c"]
print([1,2,true,false,"a"]) // error : Basic 타입 별칭에 포함된 구조가 없음

위처럼 하나의 타입에 여러가지 형태의 구조를 가질 수 있는 것을 다형성이라고 한다.
하지만, 위처럼 쓴다면 가독성이나 코드 품질이 떨어진다.

이같은 문제를 해결할 수 있는 방법으로 Typescript에서는 Generic을 사용한다.

call signature
함수의 형태를 정의하는 타입

type Greet = {
	(name: string):string // call signature
}

0개의 댓글