함수를 호출하는 포인터 변수를 함수 포인터라고 부른다.
보통 C언어에서 이렇게 부르는데 JavaScript에서도 이 함수 포인터와 같은 동작을 볼 수 있다.
다만, 포인터 타입이 존재하지 않으므로 함수 포인터가 아닌 함수 표현식이라고 부른다.
Javascript에서 함수 표현식은 C언어의 함수 포인터와 유사한데 사용하기는 훨씬 편리하다.
let hello = function(){
return console.log("hello world");
}
hello();
인수의 타입이나 리턴 타입을 신경쓸 필요가 없고 출력 방향이 고정되어 있으므로 조금 더 자유롭다.
아마 위와 같은 구문을 현 버전의 C언어로 작성하면 다음과 같을 것이다.
#include <stdio.h>
char* hello(void){
return (char*)"hello World";
}
int main()
{
char* (*pf)(void) = hello;
char* szHello = pf();
printf("%s", szHello);
}
문자열 상수를 리턴하는 함수가 조금 어색해 보일 수 있다.
C에서의 문자열 상수는 항상 모듈에 포함되는 정적 데이터로 구분된다.
즉, 문자열의 시작 번지를 가리키는 문자형 포인터 상수로 평가되므로 위 구문 역시 합법이며
이 값은 실행 파일의 정적 데이터 영역에 저장된다.
JavaScript에 비해 조금 길어지긴 했지만 이해하지 못할 정도는 아니다.
사실 함수 포인터는 잘 사용되지 않는데다가 위와 같은 상황에선 더더욱 사용할 필요가 없다.
굳이 함수 포인터를 응용하는 예시를 만들어보자면 이런 상황을 들 수 있다.
#include <stdio.h>
int f1(int a, int b){
return 1;
}
int f2(int a, int b){
return 2;
}
int (*ChoiceFunc(char c))(int a, int b){
if(c == 1){
return f1;
}else{
return f2;
}
}
int main()
{
int (*fp)(int, int);
fp = ChoiceFunc(1);
printf("%d", fp(1,2));
}
"오버로딩을 할 수 없는 상황에서 계산 방법이 달라야 한다"라는 가정을 한건데
흔한 상황은 아니지만 굳이 사용하자면 위와 같은 상황에서 사용될 순 있다.
자바 스크립트에선 어떤 상황에서 함수 표현식을 사용하게 되는지 조금 더 연구해봐야 될 것 같다.
반응형
'컴퓨터 > Frontend' 카테고리의 다른 글
[Javascript] 객체와 프로퍼티 (0) | 2023.03.15 |
---|---|
[Javascript] 콜백함수 (0) | 2023.03.15 |
[Javascript] 호이스팅 (0) | 2023.03.15 |
[Javascript] 백틱과 템플릿 리터럴 (0) | 2023.03.15 |
[Javascript] var와 let의 차이 (0) | 2023.03.15 |
댓글