강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

gxpk0721님의 프로필 이미지
gxpk0721

작성한 질문수

한 입 크기로 잘라먹는 타입스크립트(TypeScript)

함수 타입 표현식과 호출 시그니쳐

함수는 함수타입? 객체타입??

작성

·

13

·

수정됨

0

안녕하세요
js 에서 함수가 객체라는것은 이해했습니다.

그래서 개념이 약간 헷갈려서요.

type Operation2 = {
(a : number , b:number): number,
sing: string;
}
let add3 : Operation2 = Object.assign(
  (a: number, b: number) => a + b,
  { sing: "hello" }
);

저 자리는 객체랑 객체를 합쳐서 새로운 합쳐전 객체를 반환하는 assign 함수인데 익명함수를 써 둔것은 함수가 객체이기때문에 라고 이해됐습니다.

 

혼동되는게 ts 에서는 object타입이랑 함수타입이랑 나눠져있어서 혼동됩니다.

함수는 객체인데 또 타입은 함수타입 부분에서 혼동이 되는데 js에서는 함수도 일급객체라고해서요.

함수는 객체인데 타입은 함수타입?..? 이 맞는거죠?


호출할 수 있는 객체 타입(callable object type)”은 곧 함수 타입(function type) 이다.

이 표현이 맞을까요???

image.png

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. gxpk0721님.

타입스크립트와 자바스크립트에서의 함수 타입과 객체 타입에 대한 혼란스러움을 설명해드리겠습니다.

함수와 객체의 관계

자바스크립트에서 함수는 “일급 객체(first-class citizens)“입니다. 이것은 함수가 객체로서 다뤄질 수 있음을 의미하죠. 즉, 함수는 변수에 할당될 수도 있고, 다른 함수의 매개변수로 전달될 수도 있으며, 객체지향적으로는 객체의 프로퍼티로도 추가될 수 있습니다. 이것이 함수를 객체라고 부를 수 있는 이유입니다.

타입스크립트에서의 함수 타입

타입스크립트는 이러한 자바스크립트의 특성을 그대로 활용하지만, 추가적으로 정적 타입 시스템을 추가하여 좀 더 명확한 코드 작성을 돕습니다. 따라서 타입스크립트에서는 함수에 대해 구체적인 “함수 타입”을 정의할 수 있습니다.

함수 타입을 정의할 때에는, 함수의 매개변수와 반환 타입을 명시하여 타입의 일관성을 유지할 수 있습니다. 예를 들어, type Operation = (a: number, b: number) => number; 와 같이 함수의 구조를 정의합니다. 반면, 일반 객체 타입은 type ObjType = { prop1: string; prop2: number; };과 같은 방식으로 정의합니다.

코드 설명

제공해주신 코드에서 Object.assign을 통해 함수를 객체와 합치는 과정은 자바스크립트에서 함수가 객체로 취급될 수 있음을 보여줍니다.

type Operation2 = {
  (a: number, b: number): number;
  sing: string;
}

let add3: Operation2 = Object.assign(
  (a: number, b: number) => a + b,
  { sing: "hello" }
);

위의 Operation2 타입 정의는 함수 타입과 객체 타입을 동시에 표현한 형태입니다. 여기서 (a: number, b: number): number; 부분이 함수 타입을 뜻하며, sing: string; 부분이 해당 함수라는 객체의 프로퍼티를 정의하는 부분입니다.

결론

따라서, 타입스크립트에서 함수는 ‘객체’로 취급될 수 있지만, 타입 체계상에서는 함수의 형태를 보다 명확히 규정하기 위해 ‘함수 타입’이라는 개념을 사용해 구분합니다. 자바스크립트에서는 함수도 객체라는 점을 기억하되, 타입스크립트에서는 이 객체로서의 성질을 타입으로 구현할 수 있다는 점이 흥미로운 점입니다.

이미지 URL과 원본 URL:

Image

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

gxpk0721님의 프로필 이미지
gxpk0721

작성한 질문수

질문하기