제네릭 타입 생성
자신만의 제네릭 클래스, 인터페이스 또는 함수를 만들 수 있다.
Rectangle 클래스가 있고 두 사각형의 크기를 비교하는 함수를 추가해야 한다고 가정해보자.
인터페이스 프로그래밍으로 구현하면?
당장은 사각형만 비교하지만 다음에는 다른 객체를 비교할지도 모른다.
compareTo() 함수와 함께 인터페이스를 선언해보자. Rectangle 클래스와 나중에 만들 클래스는 동일한 인터페이스를 구현한다.
사각형, 삼각형은 서로 비교하는 알고리즘은 다르겠지만 '비교'라는 공통점이 있기 때문에 compareTo() 메서드 시그니처 또한 같을 것이다.
일단 두 객체 타입을 비교하기 위해 특정 객체가 비교 대상보다 크기가 크면 양수를 반환하고 작으면 음수를, 동일하면 0을 반환하는 compareTo()메서드를 만들자.
제네릭 타입에 익숙치 않다면 위와 같은 인터페이스를 정의할 수 있다.
compareTo() 메서드는 모든 객체를 파라미터로 취할 수 있으며(value:any)
Comparator 인터페이스를 구현하는 클래스(Rectangle, Triangle)에는 적절한 비교 알고리즘이 포함되어야 한다.
만약 개발자가 두 개의 Rectangle 클래스 인스턴스를 만든 다음 그 중 하나를 실수로 사각형과 삼각형을 비교하게 한다면 어떻게 될까?
Triangle 클래스의 compareTo() 메서드 내 파라미터는 any 타입이므로 런타임 오류가 발생한다.
따라서 오류를 감지하기 위해 compareTo() 메서드 내 파라미터 타입은 제네릭으로 변경할 수 있다.
인터페이스와 메서드 모두 같은 문자 T로 표현해야 한다.
Rectangle, Triangle 클래스는 꺾쇠 괄호에 Comparator 인터페이스를 구현할 수 있다.
출력
[LOG]: "rect1 is bigger"
[LOG]: "John is richer"
'Language > Type Script' 카테고리의 다른 글
[Type Script] 도구 (소스맵, 린터) (0) | 2022.02.04 |
---|---|
[Type Script] 제네릭 함수 생성, 고차 함수 (0) | 2022.02.02 |
[Type Script] 인터페이스 사용, 확장, 프로그래밍, 열거타입 (0) | 2022.01.29 |
[Type Script] super 메서드와 키워드, 추상 클래스, 메서드 오버로딩, 오버로딩 생성자 (0) | 2022.01.26 |
[Type Script] OOP, 클래스 상속, 접근 제어자, static 키워드 (0) | 2022.01.25 |
댓글