질문 126 · 실전 면접 답변
Promise와 async 함수의 타입은 어떻게 표현하나요?
이렇게 답해 보세요 (핵심 답변)
비동기 작업의 결과 타입은 제네릭을 사용한 Promise<T>로 표현하며, 여기서 T는 Promise가 성공적으로 이행(fulfilled)되었을 때 돌려주는 값의 타입입니다. async 함수는 언제나 Promise를 반환하므로, 함수 안에서 숫자(number)를 return하더라도 함수의 반환 타입 표기는 반드시 Promise<number>가 되어야 하며 반환값이 없을 때는 Promise<void>로 적습니다. 반대로 이 함수를 await하면 Promise 껍데기가 벗겨져 다시 T(예: number) 타입의 값을 얻게 됩니다.
함께 설명하면 좋은 이유 (꼬리질문 대비)
- Promise<T>의 타입 매개변수 T는 성공 시의 값만 나타내며, 거부(reject)될 때의 에러 타입은 무엇이든 될 수 있어 catch 블록에서는 기본적으로 unknown으로 다루는 것이 안전합니다.
- 이미 제작된 타입에서 Promise가 풀린 결과 타입만 뽑아내야 할 때는 내장 유틸리티 타입인 Awaited<T>를 활용할 수 있습니다.
면접에서 자주 하는 실수
async function fetchUser(): Promise<User>라고 반환 타입을 적었다고 해서 실제 서버 응답 JSON이 런타임에 User 형태임이 자동으로 검증되지는 않습니다.
원리와 예제까지 읽기
공식 참고 자료
질문 목록 출처 ↗ · 원본 126번을 바탕으로 질문과 답변을 새로 정리했습니다.