본문 바로가기
우아한 테크코스

생각해보기🤔 - 점심 뭐 먹지

by 해-온 2023. 6. 17.

 

🍛 TypeScript에서 type alias vs interface

1. 선언방식

type alias는 type 키워드를 사용하여 선언하며, interface는 interface 키워드를 사용하여 선언한다.

 

// type alias
type AliasType = {
  prop1: string;
  prop2: number;
};

// interface
interface InterfaceType {
  prop1: string;
  prop2: number;
}

 

2. 확장 방식

type alias는 다른 타입과의 결합(union)이나 교차(intersection)로 타입을 확장할 수 있다.

interface는 확장(extends)과 구현(implements)을 통해 다른 인터페이스를 상속하거나 클래스와 함께 사용할 수 있다.

 

// type alias 교차
type BaseType = {
  prop1: string;
};

type ChildType = BaseType & {
  prop2: number;
};


// interface 확장
interface BaseInterface {
  prop1: string;
}

interface ChildInterface extends BaseInterface {
  prop2: number;
}

 

3. 구현 및 병합

interface는 선언 병합(declaration merging)이 가능하며, 같은 이름의 인터페이스를 여러 번 선언하면 프로퍼티가 병합된다.

type alias의 경우, 이러한 선언 병합이 불가능하다.

 

 

// interface 선언
interface MergedInterface {
  prop1: string;
}

interface MergedInterface {
  prop2: number;
}

// MergedInterface는 { prop1: string; prop2: number; }로 병합

 

🍛 타입 내로잉(narrowing)은 무엇이고 어떨 때 필요할까요?

타입 내로잉은 TypeScript에서 넓은 타입의 값을 좀 더 구체적인 타입으로 좁혀주는 것을 의미한다.

이는 타입이 더 명확하게 정의되고, 코드의 안정성이 향상되며, 런타임에 발생할 수 있는 오류를 줄이는 데 도움이 된다.

타입 내로잉은 TypeSciprt 컴파일러가 타입을 검사하고 범위를 줄이는 과정에서 자동으로 발생할 수 있고, 개발자가 명시적으로 수행할 수도 있다.

 

type Animal = 'dog' | 'cat' | 'bird';

function makeSound(animal: Animal): void {
  if (animal === 'dog') {
    console.log('멍멍!');
  } else if (animal === 'cat') {
    console.log('야옹!');
  } else {
    // 여기서 animal의 타입은 'bird'로 내로잉됨
    console.log('짹짹!');
  }
}

makeSound('dog'); // 멍멍!
makeSound('cat'); // 야옹!
makeSound('bird'); // 짹짹!

 

 

🍛 E2E 테스트와 단위 테스트는 어떻게 달랐나요? 어떨 때 어떤 도구를 사용하는 것이 좋을까요?

1. 단위 테스트

단위 테스트는 개별 구성 요소(예: 함수, 메서드, 클래스)를 테스트하여 해당 구성요소가 예상대로 작동하는지 확인한다.

코드의 각 구성요소를 독립적으로 테스트하고, 각기 다른 입력에 대한 출력을 검증한다.

또한, 개발 과정에서 빠르게 실행하고 디버그 할 수 있는 테스트를 작성한다.

2. E2E 테스트

E2E 테스트는 사용자가 애플리케이션을 사용하는 것처럼 테스트를 진행한다.

테스트는 일반 사용자가 겪을 수 있는 상황과 비슷한 환경에서 진행되며, 배포하기 전에 실제로 잘 작동하는지 확인할 때 사용된다.

애플리케이션의 여러 부분이 서로 올바르게 상호작용하는지 확인할 수 있다.

 

 

각 테스트의 목적과 과정을 생각하며 선택하는 것이 좋다.

단위 테스트의 경우 개발 과정 전체에 걸쳐 코드의 안정성을 검증할 수 있다.

E2E 테스트의 경우 프로젝트의 후반부에 실제 사용 환경과 가장 유사한 상황에서 작동되는지 확인할 수 있다.

 

🍛 컴파일 타임 vs 런타임은 어떻게 다른가요? TypeScript는 어느 시점의 안정성을 보장할 수 있나요?

1. 컴파일 타임

소스 코드를 확인하고 빌드하는 시점이다. 

2. 런타임

프로그램이 실제로 실행되는 시점이다.

이때, 발생하는 오류는 실행 중에 처리된다.

 

TypeScript의 경우 컴파일 타임에 문제를 찾아서 프로그램이 안정적으로 동작할 수 있도록 돕는다.

 

 

 

 

 

 

댓글