type script
type alias 가능
?: 선택적 타입 (number or undefined)
overloading : 함수가 서로다른 여러개의 call signature를 가지고 있을 때 발생시킴
다형성(Polymorphism)
generic
type SuperPrint = <T,M>(a: T[],b:M) => T
const superPrint : SuperPrint = (a)=> a[0]
const a = superPrint([1,2,3,4],'X')
const b = superPrint([true,false,true],1)
const c = superPrint(['a', 'b','c'],false)
const d = superPrint([1,2,true,false,'hello'],[])
classes
추상클래스(abstract class) : 다른 래스가 상속받을 수만 있는 클래스, 직접 새로운 인스턴스를 만들수는 없음
메소드: 클래스 안에 존재하는 함수
추상메소드(abstract method): 구현이 되어있지 않은 (코드가 없는) 메소드. call signature만 가지고있음.
함수의 이름과 argument를 안받을 때도 있지만 argument를 받을 경우 argument의 이름과 타입, 함수의 리턴타입을 정의
추상 메소드가 있는 경우, 추상 클래스를 상속받은 클래스에서 추상 메소드를 구현해야함
외부 사용 혀용(기본): public
private: 클래스 안에서만 접근 가
protected:외부접근은 막지만, 자식(클래스를 상하는 모든)클래스에서 사용 허용
interface (인터페이스): type과 비슷하지만, 객체의 모양을 특정해주기 위한 용도만 가짐
| (or), & (and) 연산자로 타입 종류 지정 가능
활용 범위는 적지만, 클래스를 다루는 듯한 느낌이라 더 쉬울수도 있음 (객체지향)
property 들을 축적시킬 수 있음 (type은 불가능)
interface 와 추상화, implements => js에 없으므로 가벼움
인터페이스를 상속할때는 property를 private, protected 으로 만들지 못함
함수 - interface를 반환한다면 new 클래스 와 같은 class의 리턴과 다름
다형성, 제네릭, 클래스, 인터페이스
다형성: 다른 모양의 코드를 가질 수 있게 해주는 것
다형성을 이룰 수 있는 방법: 제네릭을 사용하는 것
제네릭은 placeholder 타입(<->concrete) 을 쓸 수 있도록 해줌