목차
1. interface란?
2. interface 사용
3. 선택적 프로퍼티
4. 읽기 전용 프로퍼티
5. 인터페이스 클래스 타입
1. interface란?
타입스크립트에서 인터페이스는 두시스템 사이에 상호간에 정의한 통신규약이며 선언만 존재합니다. 타입을 미리 선언해주는 장치로서 사용할 수 있다. 미리 개발할 때 서로 공통적으로 사용할 부분을 미리 선언을 할 때 사용한다. 사용목적은 클래스와 함수간의 일관성을 유지할 수 있도록 하기 위함이다.
2.interface 특징
- ES6(자바스크립트)가 지원하지 않는 TypeScript 에서만 사용
- 컴파일 후에 사라진다 (자바스크립트에서 지원하지 않기 문이다)
- interface 간에 다중상속이 가능
interface 예시
// 인터페이스명은 대문자로 표기
interface IUser {
name: string; // name 문자열
age: number; // age 숫자
fn1() : void; // fn1은 void 타입
}
// 인터페이스 자체를 타입으로 줘서 객체 생성
const user : IUser = {
name : "Jaka",
age : 33,
fn1: ()=> {console.log("Hello World")};
};
// 매개변수를 인터페이스 타입으로 받기
function fn1(a: IUser): void{
console.log(`${a.name} 은 ${a.age}살이야.`)
};
fn1(user); // jaka는 33살이야
person.fn1(); // Hello World
3. 선택적 프로퍼티 (Optional Properties)
인터페이스에 있는 속성을 다 사용해야 한다면 코드의 유연성이 사라질 수 있다. 이를 해결하기 위한 방법으로 우리는 선택적 프로퍼티라는 것을 사용할 수 있다. 문법은 (:) 전에 '?'를 넣어주면 된다. 아래의 코드로 예제를 보자
interface ICoffee {
name : string;
flavor?: string;
}
function orderCoffee(coffee: ICoffee){
consolel.log(coffee.name);
}
let myCoffee = { name : "latte" }; // flavor는 명시 안함
orderCoffee(myCoffee); // latte
interface ICustomer {
name : string;
age : number;
tel? : string;
}
let customer : ICustomer = {
name : "jaka",
age : 30
}
customer.name = "jaka2";
customer.tel = "123-4567"; // 선택적 프로퍼티가 있으면 값을 나중에 추가할 수 있다.
customer.address = "서울"; // 정의되지 않은 속성을 마음대로 넣을수는 없음
4. 읽기 전용 프로퍼티 (readonly)
readonly는 인터페이스로 객체를 처음 생성할 때만 값을 할당하고 그 이후에는 변경할 수 없는 속성을 의미한다. 변하지 않는 값 const와 비슷하다고 생각하면 된다. 다음 예제를 보자.
interface Book {
title : string;
year : number;
readonly writer : string; // 읽기 속성 전용
}
let book : Book = {
title : "콩쥐팥쥐",
year : 2002,
writer : "김철수"
};
book.writer = "철수"; // Error 이후에는 수정이 불가능
5. 인터페이스 클래스 타입
인터페이스로 클래스를 정의하는 경우, implemets를 사용하면 된다.
interface IUser {
name : string;
getName() : string;
}
// IUser 인터페이스를 Implements 하면 User 클래스의 프로퍼티 구조는 반드시 IUser에 정의 된대로 따라야한다.
// 즉, 반드시 name, getNmae() 클래스에 기본값으로 구현해야 한다
class User implements IUser {
name: string;
constructor(name: string){
this.name = name;
}
getName() {
return this.name;
}
}
const jaka = new User("jaka");
jaka.getName(); // jaka
'Typescript' 카테고리의 다른 글
[TS] 전략패턴 (0) | 2024.05.02 |
---|---|
[TS] 타입 어서션 / 타입 앨리어스 / 클래스 수정자 / 제네릭 (0) | 2024.04.29 |
[TS] Typescript 첫시작 (0) | 2024.04.23 |