TS를 사용하면 OOP 프로그래밍을 비교적 쉽게 도입해 볼 수 있다. 객체 지향에 대해 알아 보기 앞서 함수의 오버로딩과 오버라이딩에 대해 먼저 알아보자!
함수 오버로딩이란 같은 함수 이름으로 다른 매개변수 갯수, 매개변수 타입, 반환 타입 등을 지원하도록 하는 것을 의미한다. 함수 오버로딩은 다형성polymorphism의 한 형태로 코드 재사용성과 유연성, 확장성을 높일 수 있다. JS에서는 이에 대한 제한이 모두 없으므로 함수 오버로딩이란 개념이 있을 수 없다.
JS는 오버로딩의 개념이 존재하지 않지만 TS에서는 함수 시그니처를 통해 함수 오버로딩을 지원한다. 하지만 진짜 오버로딩은 아니고 타입에 대한 정의를 추가하는 것 뿐이다. 실제 구현부는 하나이다. 오버로딩 시그니처가 적용된 함수의 TS코드를 JS코드로 트랜스파일하면 동일한 이름의 JS 함수 여러개로 구성되어 있는 것이 아니라, JS 함수 하나라는 뜻
TS 에서의 오버로딩 시그니처는 타입에 대한 검사를 통해 잘못된 함수 호출을 컴파일 타임에 검사한다. 예를 들어 특정 글꼴이 폰트 디자인 시스템 중 하나만 사용하는 상황이라 가정한다면 오버로딩 시그니처를 통해 타입 에러를 발생시켜 잘못된 함수 호출을 막을 수 있다.
클래스 상속 시 상위 클래스(부모 클래스)에 이미 정의된 메서드를 하위 클래스(자식 클래스)에서 재 정의하여 다른 동작을 구현하도록 하는 객체지향 프로그래밍 기법이다. 메서드 시그니처(함수 이름, 매개변수, 반환타입)은 상위 클래스와 동일해야 한다.
부모 클래스의 메서드에 자식클래스가 다른 구현을 원할 때 함수 오버라이딩을 적용한다.
super를 통한 부모 클래스 메서드를 이용한 오버라이딩