함수는 함수타입? 객체타입??
안녕하세요
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) 이다.
이 표현이 맞을까요???

Answer 2
1
안녕하세요 이정환입니다.
function은 호출 가능한 형태의 object 라고 이해하시면 됩니다.
위에 첨부해주신 그림에도 obejct 타입이 function의 슈퍼타입(부모 집합)으로 표시되어 있는 것 처럼, function(함수)는 object(객체)에 포함되는 개념입니다.
number 타입 아래에 10, 20 과 같은 number 리터럴 타입이 존재하는것과 비슷한 느낌이라고 이해하시면 되겠습니다 !_!
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:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
적절한 타입 찾기 React.ChangeEvent<HTMLInputElemen>
0
15
2
outDir 옵션 추가 후 컴파일 오류 질문
0
51
1
호출 시그니처 질문
0
63
2
서로소 유니언 타입이 discriminated union과 동의어 인가요?
0
72
2
조건부타입소개 중 함수오버로딩 활용 시 인수의타입과 함수의 반환값의 타입이 깨지는 문제
0
65
1
할인쿠폰 관련하여
0
151
2
프론트엔드에서의 인터페이스활용
0
90
2
안녕하세요 이정환님!
0
89
1
Node.js 설치에 관한 질문입니다.
0
79
2
함수 타입 호출 시그니처
0
56
1
35강. 모듈 보강은 라이브러리 파일을 직접 편집해야 하나요?
0
62
2
인터페이스 문법이 있는데 타입 별칭 문법은 왜 있나요?
0
114
4
마우스 호버 시 정보
0
90
2
vite으로 리액트 빌드하기를 업데이트해주세요.
1
89
2
타입가드를 만들어 사용하는 이유가 궁금합니다.
0
82
2
섹션 12가 너무 어려운데... 정상이겠죠..?
0
135
2
선생님.. 알고리즘도 강의해주시면안되나요
0
99
2
선생님은 어떻게 이런걸 아세요?
0
127
1
type: module
0
96
2
7:17초 업캐스팅 질문이있습니다!
0
75
1
슈퍼타입질문
1
61
2
프로젝트 설치
0
103
2
enum은 비원시 타입이면서 열거형 타입이 되는건가요?
0
67
2
유니온 타입의 분산적 조건부 타입
0
55
2

