타입스크립트는 다른 언어(Java, C#)에서 익숙한 객체 지향 패턴을 지원하기 위해 클래스 타입 및 상속을 추가했습니다. TypeScript는 속성과 메서드의 타입을 명시적으로 지정할 수 있는 클래스를 생성하고 타입 안전성을 갖춘 상속을 구현하도록 허용합니다.
자바스크립트에서 명시적인 타입 지정이 없으면 속성을 잘못 사용하는 것과 관련된 오류는 컴파일 단계에서 발견되지 않습니다. 문제는 자식 클래스에서 메서드/속성을 재정의할 때, 기본 클래스 계약을 위반할 때, protected/private와 잘못 작동할 때 발생합니다.
TypeScript는 public, private, protected 키워드를 사용하고, 속성과 메서드의 타입을 명시적으로 지정하고, extends를 통해 클래스를 상속하고, 인터페이스를 구현할 수 있도록 합니다.
코드 예시:
class Animal { public name: string; protected age: number; private secret: string = "hidden"; constructor(name: string, age: number) { this.name = name; this.age = age; } speak(): void { console.log(`${this.name} makes a sound.`); } } class Dog extends Animal { constructor(name: string, age: number) { super(name, age); } speak(): void { console.log(`${this.name} barks.`); } } const dog = new Dog("Rex", 4); dog.speak(); // Rex barks.
주요 특징:
클래스 필드의 타입을 지정하지 않으면 어떻게 됩니까?
TypeScript는 값이 있을 경우 타입을 추론하려고 시도합니다. 값이 없으면 타입은 any가 되어 코드의 안전성이 떨어집니다.
class Test { value; constructor(v: number) { this.value = v; } }
기본값이 지정되지 않으면 value는 any 타입이 되어, 타입 안전성에 잠재적인 구멍이 생길 수 있습니다.
상속된 메서드의 접근 제어자를 변경할 수 있습니까?
예, 하지만 그것을 강화하는 경우(예: public에서 protected로 또는 private로 변경하는 것은 불가능합니다), private에서 public으로 변경하는 것은 불가능합니다. private 멤버는 상속되지 않기 때문입니다. 이는 컴파일 오류를 유발합니다.
TypeScript에서 클래스의 다중 상속이 가능합니까?
아니요, 클래스의 다중 상속은 금지됩니다. 여러 인터페이스를 구현할 수 있지만, 클래스에서 하나만 extends 할 수 있습니다.
프로젝트에서 모든 클래스는 접근 제어자와 명시적 타입 없이 선언되어 개발 속도를 높였습니다.
장점:
단점:
모든 클래스의 구성원이 철저히 타입 지정되고, private/protected/public이 사용되며, 속성과 메서드에 대해 엄격한 타입 지정이 이루어집니다.
장점:
단점: