Implements?

이민서·2025년 1월 22일

TypeScript

목록 보기
4/7

Implements

TypeScript에서 클래스가 특정 Interface의 계약을 준수하도록 강제하는 키워드

// 인터페이스 정의
interface Vehicle {
  start(): void;
  stop(): void;
  speed: number;
}

// 인터페이스 구현
class Car implements Vehicle {
  
  // 반드시 구현
  speed: number = 0;
  
  // 반드시 구현
  start() {
    console.log("Car started");
  }
  
  // 반드시 구현
  stop() {
    console.log("Car stopped");
  }
}

이러한 implements 키워드는 여러 Interface 구현이 가능하다.

interface Lockable {
  lock(): void;
  unlock(): void;
}

interface Chargeable {
  charge(): void;
}

class ElectricCar implements Vehicle, Lockable, Chargeable {
  speed: number = 0;
  
  start() { }
  stop() { }
  
  lock() { }
  unlock() { }
  
  charge() { }
}

하지만 특정 Interface의 계약을 준수하도록 강제하는 키워드이기 때문에 아래와 같은 코드는 에러가 발생한다.

class InvalidCar implements Vehicle {
  // Error: 'start' 메서드가 없음
  // Error: 'stop' 메서드가 없음
  // Error: 'speed' 속성이 없음
  constructor() {}
}

class PartialCar implements Vehicle {
  speed = 0;
  start() {} 
  // Error: 'stop' 메서드가 없음
}

장점

  1. 타입 안정성
  • 인터페이스의 모든 멤버를 구현하지 않으면 컴파일 에러 발생
  • 메서드 시그니처의 일치 보장
  1. 코드 가독성
  • 클래스가 어떤 계약을 준수하는지 명확히 표현
  • 다른 개발자들이 클래스의 기능을 쉽게 이해 가능
  1. 유지보수성
  • 인터페이스 변경 시 구현 클래스의 수정 필요성을 컴파일러가 알려줌
  • 일관된 구현 보장
  1. 테스트 용이성
  • 목(mock) 객체 생성이 쉬움
  • 인터페이스 기반 테스트 작성 가능

implements는 특히 대규모 어플리케이션에서 타입 안정성과 코드 품질을 높이는데 유용한 도구이다.

0개의 댓글