인터페이스
- 인터페이스: 객체의 구조를 정의하는 설계도이자 해당 객체가 반드시 지켜야 할 약속
기본 구조
interface User{
name: string;
age: number;
readonly birthYear: number;
}
let user : User {
name: 'xx',
age: 20,
birthYear: 2000,
}
핵심 기능
- 읽기 전용 속성 (Readonly): 객체를 처음 생성할 때만 값 할당, 추후 수정 불가
- 옵셔널 프로퍼티: 객체의 특정 속성이 선택 사항임을 명시할 때 사용, 속성 이름 뒤에
? 를 붙여 정의
interface Point {
readonly x: number;
readonly y: number;
z? : number;
}
let p1: Point = { x: 10, y: 20 };
- 인덱스 시그니처: 속성의 이름을 미리 알 수 없지만, 값들의 타입이 일정할 때 사용
interface UserList {
[key: string]: string;
}
인터페이스 확장
- 인터페이스의 가장 강력한 특징 중 하나
- 기존 인터페이스를 복사해 새로운 내용을 추가할 수 있어 코드의 재사용성이 매우 높음
interface Animal {
name: string;
}
interface Dog extends Animal {
breed: string;
}
const myDog: Dog = {
name: "멍멍이",
breed: "진돗개"
};
인터페이스를 사용하는 이유
- 일관성 유지: 대규모 프로젝트에서 여러 개발자가 동일한 객체 구조를 사용하도록 강제할 수 있음
- 문서화 효과: 해당 객체가 어떤 데이터를 담고 있는지 파악 가능
- 유지보수: API 응답 데이터처럼 구조가 바뀌기 쉬운 데이터를 인터페이스로 관리하면, 구조 변경 시 에러가 발생하는 모든 곳을 즉시 찾아내 수정 가능