인터페이스 (interface)
: TypeScript에서 객체의 구조를 정의하는 기능.
클래스나 객체가 특정 솏성과 메서드를 포함하도록 강제할 수 있으며, 코드의 가독성과 유지보수성을 높이는 역할.
주요 특징
- 객체의 구조 (Shape)를 정의할 때 사용
- 함수 시그니처 정의 가능
- `extends` 키워드를 통해 확장 (상속) 가능
- 같은 이름의 인터페이스가 여러 번 선언되면 자동으로 병합됨
기본적인 인터페이스 선언
`readonly name`: 객체 생성 후 `name` 값을 변경할 수 없음
`age?`: 선택적 속성이라 Person 객체에 없어도 됨
`sayHi()`: 함수 타입이 아닌 메서드 선언 방식을 사용해야 오버로딩 가능!
위에서 선언한 인터페이스(Person)를 사용한 객체 생성
`sayHi()`는 `sayHi(a: number, b: number)`로도 호출 가능!
함수 타입으로 선언하면 오버로딩이 불가능하므로, 메서드 방식으로 선언해야 함!
인터페이스 확장(Extends) 하기
인터페이스는 `extends` 키워드를 사용하여 기존 인터페이스를 확장할 수 있습니다. (java랑 비슷한듯)
이를 통해 코드의 재사용성을 높이고, 중복을 줄일 수 있습니다.
인터페이스 단일 확장(상속)
인터페이스 다중 확장(상속)
`DogCat`은 `Dog`와 `Cat`을 모두 확장한 타입이므로, 두 인터페이스의 속성을 모두 포함해야 함!
인터페이스 합치기
TypeScript에서는 같은 이름의 인터페이스를 여러 번 선언하면 자동으로 합쳐지는 기능이 있음.
이 기능을 선언 합침 이라고 부름.
두 개의` Person` 인터페이스가 합쳐져 `name`과 `age` 속성을 모두 포함한 인터페이스가 됨!
같은 속성을 다른 타입으로 선언하면 충돌 발생
이미 선언된 속성의 타입을 변경할 수 없으며, 오직 새로운 속성을 추가하는 방식만 가능!
모듈 보강 : 이 기능은 특히 라이브러리나 전역 객체를 확장할 때 유용함.
같은 인터페이스 `Lib`를 두 번 선언하면, 자동으로 병합되어 새로운 속성 `c`가 추가됨!
모듈 보강은 기존 객체 구조를 변경하지 않고 추가적인 기능을 확장할 때 유용함.
'프로그래밍 언어 > TypeScript' 카테고리의 다른 글
[TypeScript] 제네릭 함수와 타입 변수 응용하기 (0) | 2025.03.05 |
---|---|
[TypeScript] 클래스와 인터페이스 그리고 접근 제어자. (0) | 2025.03.05 |
[TypeScript] 함수 오버로딩과 타입 가드 (0) | 2025.02.26 |
[TypeScript] 함수 타입의 호환성 (0) | 2025.02.25 |
[TypeScript] 타입스크립트의 함수 타입, 표현식, 호출 시그니처 (0) | 2025.02.25 |