🍛 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의 경우 컴파일 타임에 문제를 찾아서 프로그램이 안정적으로 동작할 수 있도록 돕는다.
'우아한 테크코스' 카테고리의 다른 글
생각해보기🤔 - 다시, 점심 뭐 먹지 (0) | 2023.06.19 |
---|---|
생각해보기🤔 - 영화 리뷰 (0) | 2023.06.18 |
생각해보기🤔 - 로또 (0) | 2023.06.17 |
생각해보기🤔 - 자동차 경주 (0) | 2023.06.16 |
레벨2 - 장바구니 협업 리뷰 피드백 (0) | 2023.06.08 |
댓글