카테고리 없음
23. 객체 지향 프로그래밍
에밀오구
2023. 3. 15. 15:54
더 나아가기
1.인터페이스
//준석님의 인터페이스 설명
//해당 코드는 오류가 발생합니다.
interface ICar {
brand: string // brand는 문자열이어야 한다.
name: string
color: string
speed: number // speed는 number여야 한다.
drive():void //drive 메서드는 매개변수가 없고 반환 값이 없어야 한다.
setSpeed(speed:number):void // setSpeed 메서드는 매개변수는 number 형태여야 하고 반환값은 없다.
decreaseSpeed(speed:number):void
}
// Car 클래스는 위의 인터페이스에 맞추어 설계하며 메서드의 내부 로직은 위의 규약과 맞기만 하면 어떻 논리 구조를 형성하든지 문제가 없습니다.
class Car implements ICar {
constructor(
public brand: string,
public name: string,
public color: string,
public speed:number = 0
){}// 메소드가 들어가지 않아 오류가 발생합니다.
}
const mini = new Car('BMW', 'mini', 'white')
console.log(mini)
해당 코드를 실행하면 다음과 같은 애러가 발생합니다. "Class 'Car' incorrectly implements interface 'ICar'. Type 'Car' is missing the following properties from type 'ICar': drive, setSpeed, decreaseSpeed"
Car 클래스가 interface ICar의 프로퍼티를 모두 구현하지 못했기에 코드 실행 이전에 타입스크립트에서 다음과 같은 애러를 보여줍니다. 모든 프로퍼티를 다 구현하면 정상적으로 출력이 됩니다. - 준석님.
//정상 코드 -준석님
class Car implements ICar {
constructor(
public brand: string,
public name: string,
public color: string,
public speed:number = 0
){}
drive(){
console.log(`${this.name}가 주행을 시작합니다.`)
}
setSpeed(speed:number){
this.speed = speed
}
decreaseSpeed(speed:number){
this.speed -= speed
}
}
const mini = new Car('BMW', 'mini', 'white')
mini.setSpeed(20)
mini.decreaseSpeed(10)
console.log(mini)
/*
Car: {
"brand": "BMW",
"name": "mini",
"color": "white",
"speed": 10
}
*/