TypeScript: any와 Generic의 차이점

park.js·2024년 8월 26일
1

FrontEnd Develop log

목록 보기
13/37

TypeScript는 JavaScript의 상위 집합으로, 정적 타입 검사를 통해 코드의 안정성과 가독성을 높이는 데 초점을 맞추고 있다.
이 글은 TypeScript에서 자주 사용되는 두 가지 타입, anyGeneric의 차이점에 대해 설명한다.

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 타입

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

Generic의 장단점

  • 장점: 타입 안정성을 유지하면서 다양한 타입에 대해 동일한 로직을 사용할 수 있다. 코드의 재사용성을 높여주며, TypeScript의 타입 체크 기능을 최대한 활용할 수 있다.
  • 단점: any보다 초기 학습 곡선이 높을 수 있으며, 코드가 복잡해질 수 있다. Generic을 남용하면 오히려 코드의 가독성이 떨어질 수 있다.

any와 Generic의 비교

특징anyGeneric
타입 안정성없음있음
유연성매우 높음적당히 높음
코드 재사용성낮음높음
타입 체크 가능성없음있음
사용 난이도낮음중간

any는 빠르게 코드를 작성해야 하거나, 타입을 알 수 없는 값에 대해 작업할 때 유용하다. 하지만, 타입 안정성을 포기하는 대가를 치러야 한다.
반면에, Generic은 타입 안전성을 유지하면서도 다양한 타입에 대해 유연한 코드를 작성할 수 있게 해준다.

결론적으로, any는 최후의 수단으로 사용하고, 가능하면 Generic을 활용하여 타입 안전성을 유지하는 것이 TypeScript의 철학에 부합하는 코드 작성 방법이다. 라고들한다..

profile
참 되게 살자

0개의 댓글