[기술면접] 타입과 인터페이스

Boyoung Lee·2025년 7월 17일

기술면접

목록 보기
49/49
post-thumbnail

타입과 인터페이스

공통점

  • 둘 다 객체의 구조, 함수 시그니처, 배열, 유니온 등 타입스크립트의 핵심 도구인 "타입 정의"에 사용
  • 기본 사용법은 매우 유사
  • 둘 다 동일하게 사용 가능
type User1 = {
  name: string;
  age: number;
};

interface User2 {
  name: string;
  age: number;
}

차이점

1. 확장성

  • type : 다른 type과 &으로 교차(Intersection)
type Info = {
	name : string;
	age : number;
}

type ExtraInfo = {
	email : string;
}

type TotalInfo = Info & ExtraInfo

const person: TotalInfo = {
	name : "영희";
	age : 25;
	email : "aa@gmail.com";	
}
  • interface : extends로 상속, 선언 병합만으로도 가능
interface Person {
  name: string;
}
  
interface Employee extends Person {
  employeeId: string;
}

const emp: Employee = {
  name: "철수",
  employeeId: "E123",
};

2. 재정의

  • type : 불가능

  • interface : 동일 이름으로 병합 가능(선언 병합)

    • 선언 병합
      // interface는 병합 가능 (자동으로 합쳐짐)
    interface User {
      name: string;
    }
    interface User {
      age: number;
    }
    
    // 타입처럼 동작
    const user: User = {
      name: "민수",
      age: 25,
    };

3. 유니온/튜플/기본 타입 정의

  • type : 가능
  • interface : 객체 타입에만 적합

4. 의도(컨벤션)

  • type : 복잡하거나 유니온/리터럴 기반 타입 정의
  • interface : 순수 객체 타입 정의

사용하기 적합한 상황

interface

  • 순수 객체의 구조를 정의할 경우
  • 타입 병합이 필요한 라이브러리의 타입을 확장하는 경우

type

  • 유니온 타입/리터럴 타입이 필요한 경우
  • 여러 타입을 조합하여 새로운 타입을 만드는 경우

=> 팀의 규칙을 따르는게 우선

정리

  • interface : 객체 형태를 확장, 병합하는데 용이, 단순 객체 타입
  • type : 복잡한 타입 정의 및 조합을 표현하는데 용이
  • 두가지가 유사하기 때문에 팀의 규칙을 따르는게 중요



부가질문

타입 정의란?

  • 변수, 함수, 객체, 배열 등이 어떤 종류의 값(데이터)를 가질 수 있는지를 명확히 알려주는 규칙

타입 정의의 종류

1. 변수의 타입 정의

let age: number = 25; // 숫자만 가능
let name: string = "철수"; // 문자열만 가능

2. 객체의 타입 정의

type User = {
  name: string;
  age: number;
  isAdmin: boolean;
};

const user: User = {
  name: "영희",
  age: 30,
  isAdmin: true,
};

3. 함수의 타입 정의 (함수 시그니처)

type Add = (a: number, b: number) => number;

const add: Add = (a, b) => a + b;

4. 유니온 타입 정의

type Status = "loading" | "success" | "error";

let state: Status = "loading"; // "fail"은 안됨

5. 제네릭 타입 정의

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

identity<number>(123);    // T는 number
identity<string>("hello"); // T는 string
profile
정리정돈을 잘하는 개발자가 꿈

0개의 댓글