타입스크립트 Interface란?: TypeScript Interface 이해와 활용
들어가며
때로는 개발을 하다가 어떤 것이 잘못되었는지, 혹은 잘 사용하고 있는 것인지 불안감을 느끼곤 합니다. TypeScript의 interface
도 그렇습니다. 처음에는 그냥 단순한 타입 정의도구로만 생각할 수 있지만, 사실은 그보다 더 강력한 기능을 갖고 있습니다.
1. Interface란 무엇인가?
Interface는 TypeScript에서 객체의 타입을 정의하는데 사용됩니다. 또한, 클래스나 함수에 특정 조건을 부여하는 역할도 합니다.
interface Person {
name: string;
age: number;
}
위의 예제에서 Person
이라는 인터페이스는 name
과 age
프로퍼티를 갖는 객체의 타입을 정의합니다.
2. Optional properties와 Readonly properties
모든 프로퍼티가 필수적이지 않을 수 있습니다. 이런 경우 optional property를 사용할 수 있습니다.
interface Worker {
name: string;
role?: string;
}
이 경우 role
은 옵셔널입니다. 반대로, 특정 프로퍼티를 수정 불가능하게 하려면 **readonly
**를 사용하면 됩니다.
interface ImmutablePerson {
readonly name: string;
age: number;
}
ImmutablePerson
인터페이스의 name
프로퍼티는 수정할 수 없습니다.
3. Function Types with Interface
인터페이스는 객체뿐만 아니라 함수의 타입까지도 정의할 수 있습니다.
interface SearchFunc {
(source: string, subString: string): boolean;
}
이 인터페이스는 source
와 subString
두 개의 문자열 인자를 받아 boolean 값을 반환하는 함수를 정의합니다.
4. 확장과 구현: Extending Interfaces
때로는 여러 인터페이스의 조합이 필요할 때가 있습니다. 인터페이스를 확장하여 새로운 인터페이스를 만들 수 있습니다.
interface Animal {
move(): void;
}
interface Bird extends Animal {
fly(): void;
}
Bird
는 Animal
의 모든 멤버를 상속받고, 추가로 fly
메서드도 갖게 됩니다.
5. 클래스와 Interface: implements 활용하기
TypeScript에서 클래스는 인터페이스를 implements
를 사용하여 구현할 수 있습니다. 이를 통해 클래스가 특정 조건을 만족하도록 강제할 수 있습니다.
interface Movable {
move(distance: number): void;
}
class Car implements Movable {
move(distance: number) {
console.log(`Car moved ${distance} meters.`);
}
}
마치며
TypeScript의 interface
는 타입 체계의 핵심입니다. 타입의 안전성을 높이고 코드의 품질을 향상시키는 데 큰 역할을 합니다. 이를 잘 활용하면 더욱 견고한 애플리케이션을 구축할 수 있습니다.