: 일반적으로 변수, 함수, 클래스에 타입 체크를 위해 사용.
// 기본 예제
function sayName(obj:{name:string}){
console.log(obj.name);
}
let person = {name:'june'};
sayName(person);
//interface적용
interface Person {
name:String
}
function sayName(obj:Person){
console.log(obj.name);
}
let person = {name:'june'};
sayName(person);
interface SquareConfig{
color?:string
width?:number
}
function createSquare(config:SquareConfig):{color:String; area:number}{
let newSquare = {color:'white',area:100};
if(config.color){
newSquare.color=config.color;
}
if(config.width){
newSquare.area=config.width*config.width
}
return newSquare;
}
let mySquare = createSquare({color:'black'}); //width프로퍼티가 없어도 에러가 발생하지 않음
interface Point {
readonly x:number
readonly y:number
}
let point : Point = {x:10,y:20};
point.x = 5; // error 재할당 불가능
: interface를 함수 내에서 사용할 수 있다.
함수
클래스
interface SearchFunc{
(source:string,subString:string):boolean // 인자와 반환값의 타입 정의
}
let mySearch:SearchFunc // 함수의 타입 정의
mySearch = function(src,sub){
let result = src.search(sub);
return result > -1
}
interface Animal{
makeSound():void
}
class Dog implements Animal{ // implements > class에 interface를 적용
makeSound(): void {
console.log('bow');
}
}
interface Animal {
makeSound():void
}
interface Dog extends Animal{
speed:number
}
class Bulldog implements Dog{
makeSound(): void {
console.log('bow');
}
}
interface PaymentStrategy { // 결제 행위 전략을 생성
pay():void
}
class CardPaymentStrategy implements PaymentStrategy { // card payments interface
pay(): void {
console.log('card pay') // pay 메서드를 결제 전략에 맞게 구체화해야 함
}
}
class CashPaymentStrategy implements PaymentStrategy { // cash payments interface
pay(): void {
console.log("Cash pay") // pay 메서드를 결제 전략에 맞게 구체화해야 함
}
}
class VendingMachine{
private paymentStrategy : PaymentStrategy
setPaymentStrategy(paymentStrategy:PaymentStrategy){ // 외부에서 클래스 주입을 할 수 있게 세팅
this.paymentStrategy = paymentStrategy;
}
pay() {
this.paymentStrategy.pay(); // 각 결제 전략에 맞는 pay method가 호출됨.
}
}
const vendingMachine = new VendingMachine();
vendingMachine.setPaymentStrategy(new CardPaymentStrategy());
vendingMachine.pay(); // card pay
vendingMachine.setPaymentStrategy(new CashPaymentStrategy());
vendingMachine.pay(); // cash pay