인터페이스의 구현 (implements)이란?

// -------------- Interface ------------------
interface Swimming {
    swimming(): void;
}

interface Flight {
    flying(): void;
}

// -------------- Mammal 관련 -----------------
abstract class Mammal {
    constructor(
        protected name: string
    ) {
        this.name = name;
    }

    // 추상 메소드
    abstract residence(): void;

    // 일반 메소드: 공통 동작
    public breath(): void {
        console.log(`${this.name} 숨쉽니다.`);
    }
}

// 고래: 포유류를 상속받고 수영 기능을 구현
class Whale extends Mammal {
    override residence(): void {
        console.log(`${this.name} 바다에 삽니다.`);
    }

    swimming(): void {
        console.log(`${this.name} 수영한다.`);
    }
}

// 날다람쥐: 포유류를 상속받고 비행 기능을 구현
class FlyingSquirrel extends Mammal {
    override residence(): void {
        console.log(`${this.name} 산에 삽니다.`);
    }
}

// ------------------ Fish 관련 ------------------------
// --------- 인터페이스를 통한 다중 구현 예제 ------------
// 날치: 어류(Fish)를 상속받고 수영과 비행을 모두 구현
class FlyingFish implements Swimming, Flight {
    // 수영, 비행, 바다에 산다.
    swimming(): void {
        console.log(`날치 수영한다.`);
    }
    flying(): void {
        console.log(`날치 날다.`);
    }
}