TypeScript는 JavaScript의 상위 집합으로, 정적 타입 검사를 통해 코드의 안정성과 가독성을 높이는 데 초점을 맞추고 있다.
이 글은 TypeScript에서 자주 사용되는 두 가지 타입, any와 Generic의 차이점에 대해 설명한다.
any
타입
any
는 TypeScript의 모든 타입을 허용하는 특수한 타입이다. 말 그대로 "아무 타입"을 의미하며, 이 타입을 사용하면 TypeScript의 타입 체크를 우회할 수 있다.any
를 사용하면 변수나 함수의 타입이 특정되지 않아, 어떤 타입의 값이든 할당할 수 있습니다.
let something: any;
something = 5; // 숫자 할당
something = "Hello"; // 문자열 할당
something = true; // 불리언 할당
function logMessage(message: any): void {
console.log(message);
}
logMessage(10); // 숫자 출력
logMessage("Hi!"); // 문자열 출력
logMessage([1, 2, 3]); // 배열 출력
any
의 장단점
- 장점: 유연성이 극대화되어, 빠르게 프로토타이핑하거나 초기 개발 단계에서 유용할 수 있다. 그냥 귀찮은게 해결된다.
- 단점: 타입 안정성이 없으므로, 런타임 에러가 발생할 가능성이 높아진다. 또한, 코드의 가독성과 유지보수성이 떨어진다.
런타임??
- 런타임: 컴파일된 프로그램이 실제로 실행되는 시점. 이때는 컴파일 단계에서 발견되지 않은 문제들, 예를 들어 실행 중에 발생하는 논리 오류나 환경적 문제(파일 접근 오류 등)가 발생할 수 있다.
- 컴파일: 코드가 실행되기 전에, 소스 코드를 기계어로 번역하는 단계. 이 과정에서 문법 오류나 타입 오류 같은 문제를 미리 찾아낼 수 있다.
- 즉, 컴파일은 실행 전 코드 검사 및 변환 과정이고, 런타임은 프로그램이 실행되는 실제 순간
Generic은 함수나 클래스가 사용할 타입을 외부에서 지정할 수 있도록 한다. 이는 코드의 재사용성을 높이고, 다양한 타입에 대해 안전하게 동작하는 코드를 작성할 수 있게 해준다.
any
와 달리, Generic은 타입을 명시적으로 지정하므로, 타입 체크를 통해 코드의 안정성을 유지할 수 있다.
function identity<T>(value: T): T {
return value;
}
let num = identity<number>(10); // number 타입으로 호출
let str = identity<string>("Hi!"); // string 타입으로 호출
function getLength<T>(arr: T[]): number {
return arr.length;
}
let numberArray = [1, 2, 3];
let stringArray = ["a", "b", "c"];
console.log(getLength(numberArray)); // 3
console.log(getLength(stringArray)); // 3
- 장점: 타입 안정성을 유지하면서 다양한 타입에 대해 동일한 로직을 사용할 수 있다. 코드의 재사용성을 높여주며, TypeScript의 타입 체크 기능을 최대한 활용할 수 있다.
- 단점:
any
보다 초기 학습 곡선이 높을 수 있으며, 코드가 복잡해질 수 있다. Generic을 남용하면 오히려 코드의 가독성이 떨어질 수 있다.
any
와 Generic의 비교특징 | any | Generic |
---|---|---|
타입 안정성 | 없음 | 있음 |
유연성 | 매우 높음 | 적당히 높음 |
코드 재사용성 | 낮음 | 높음 |
타입 체크 가능성 | 없음 | 있음 |
사용 난이도 | 낮음 | 중간 |
any
는 빠르게 코드를 작성해야 하거나, 타입을 알 수 없는 값에 대해 작업할 때 유용하다. 하지만, 타입 안정성을 포기하는 대가를 치러야 한다.
반면에, Generic은 타입 안전성을 유지하면서도 다양한 타입에 대해 유연한 코드를 작성할 수 있게 해준다.
결론적으로,
any
는 최후의 수단으로 사용하고, 가능하면 Generic을 활용하여 타입 안전성을 유지하는 것이 TypeScript의 철학에 부합하는 코드 작성 방법이다. 라고들한다..