카테고리 없음

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
} 
*/