프론트엔드 기술 면접 질문 리스트 - TypeScript

 

추가적으로 업데이트 예정

 

 

🎯 Q1. TypeScript를 사용하는 이유에 대해 설명하세요.

TypeScript는 정적 타입 검사를 통해 코드 작성 시 타입 오류를 미리 발견할 수 있기 때문에 사용한다.

이를 통해, 런타임 오류를 줄일 수 있다. 또한 타입스크립트를 사용하면 객체 지향 프로그래밍을 하기 쉽다.

제너릭, 인터페이스, 접근 제어자 등을 통해 기존 객체 지향 언어를 사용하던 개발자의 진입 장벽을 낮춰준다.

대규모 프로젝트에서는 코드의 일관성과 안정성을 확보할 수 있으며, 자바스크립트의 최신 기능을 사용할 수 있게 도와준다.

 

 

 

🎯 Q2. TypeScript의 기본 자료형에 대해 설명하세요.

TypeScript는 JavaScript의 자료형을 확장하여 더 명확한 타입을 제공한다. 주요 기본 자료형으로는 number, string, boolean, null, undefined, symbol, bigint가 있다.

추가로 any, unknown, never, void 같은 타입도 존재하며, 특정 상황에서 유용하게 사용할 수 있다.

  • number : 숫자 타입. 정수와 부동소수점 숫자 모두 포함
  • string : 문자열 타입. 템플릿 리터럴과 쌍따옴표, 홑따옴표를 모두 사용 가능
  • boolean : 참 또는 거짓 값을 가지는 논리 타입
  • null과 undefined : null은 명시적으로 값이 없음을, undefined는 값이 할당되지 않은 변수를 나타냄
  • symbol : 고유한 값을 가지는 심볼 타입. 객체의 프로퍼티 키로 주로 사용
  • bigint : 매우 큰 정수를 표현할 때 사용되는 타입. n을 숫자 뒤에 붙여 사용
  • any : 모든 타입을 혀용하며 타입 검사를 피하고자 할 때 사용. 타입 안정성을 떨어뜨리므로 남용해서는 안됨
  • unknown : any와 유사하지만 사용하기 전 타입 검사가 필요
  • never : 절대 값이 반환되지 않음을 나타내는 타입. 예외를 발생시키거나 무한 루프를 포함한 함수에서 사용
  • void : 함수에서 반환 값이 없음을 나타내는 타입

 

 

 

🎯 Q3. TypeScript에서 변수를 선언하는 방법은 무엇인가요.

TypeScript에서는 var, let, const를 사용하여 변수를 선언할 수 있다. 선언 시, 타입을 명시할 수 있으며, 타입 추론을 통해 타입 생략도 가능하다. 주요 선언 방법은 다음과 같다.

 

1️⃣ 타입과 값 동시에 선언

let age: number = 25;
const name: string = "guswjd";

 

2️⃣ 타입만 선언(초기값 없음)

let isAvailable: boolean;
isAvailable = true;

 

3️⃣ 값만 선언(타입 생략)

let message = "Hello, TypeScript!";

타입을 명시하지 않으면 타입스크립트가 값에 따라 타입을 자동으로 추론하다.

 

4️⃣ 타입과 값 모두 생략(타입 any 추론)

let data;
data = 42;
data = "typescript";

타입과 값을 모두 생략하면 data는 any 타입으로 간주되어 모든 타입을 허용한다.

 

 

 

🎯 Q4. Type과 Interface의 차이점에 대해 설명하세요.

Type과 Interface는 모두 객체의 타입을 정의할 때 사용되지만, 차이점이 있다.

Interface확장이 가능하여 다른 인터페이스를 상속할 수 있고, 중복 선언이 가능하다.

반면, Type유니온 타입교차 타입을 정의할 수 있으며, 더 유연하게 사용 가능하다. 하지만 Type은 상속이 불가능하다.

 

 

 

🎯 Q5. enum과 object의 차이점에 대해 설명하세요.

enum은 TypeScript에서 특정 값들의 집합을 나타내며, 각 요소는 숫자 또는 문자열로 자동 매핑된다.

반면 object는 JavaScript의 객체 리터럴로 값을 키-값 쌍으로 정의한다.

enum은 코드 가독성을 높이고, 상수 값을 관리할 때 유용하지만, object는 더 유연하게 사용할 수 있다.

 

 

 

🎯 Q6. 제너릭에 대해 설명하세요.

제너릭(Generics)은 함수, 클래스, 인터페이스에서 타입을 파라미터화하여, 다양한 타입에 대해 유연한 코드를 작성할 수 있게 해준다.

<> 안에 대표적으로 T를 써서 사용한다.

제너릭은 함수 뿐만 아니라 인터페이스에도 사용할 수 있으며, extends와 함께 사용하면 특정 타입에 대해서만 작동하도록 제약조건을 만들 수도 있다.

제너릭을 사용하면 코드의 재사용성이 높아지고, 타입 안전성을 확보할 수 있다.

function identity<T>(value: T): T {
  return value;
}

 

 

 

 

🎯 Q7. 제너릭 유틸리티 타입에 대해 설명하세요.

TypeScript는 제너릭을 활용한 여러 유틸리티 타입을 제공한다.

유틸리티 타입은 이미 정의한 타입을 변환할 때 사용할 수 있는 타입 문법이다.

예를 들어, Partial<T>는 모든 프로퍼티를 선택적으로 만들고, Readonly<T>는 모든 프로퍼티를 읽기 전용으로 만든다.

Pick<T, K>는 특정 프로퍼티만 선택하여 타입을 정의하고, Omit<T, K>는 특정 프로퍼티를 제외한 타입을 정의할 때 사용된다.

 

 

 

🎯 Q8. 클래스의 Public, Private, Protected에 대해 설명하세요.

TypeScript의 클래스에서는 접근 제어자를 사용하여 프로퍼티와 메서드의 접근 범위를 설정할 수 있다.

  • public: 모든 곳에서 접근 가능 (기본값)
  • private: 클래스 내부에서만 접근 가능. 
  • protected: 클래스와 하위 클래스에서만 접근 가능

 

 

 

🎯 Q9. 클래스의 Static에 대해 설명하세요.

static 키워드는 클래스의 인스턴스가 아닌, 클래스 자체에서 직접 접근 가능한 정적 프로퍼티나 메서드를 정의할 때 사용된다.

class MathUtil {
  static PI: number = 3.14;
  static getCircleArea(radius: number): number {
    return this.PI * radius * radius;
  }
}

console.log(MathUtil.getCircleArea(5)); // 78.5

 

static으로 선언된 멤버는 인스턴스를 생성하지 않고도 클래스 이름을 통해 접근할 수 있다.

반응형