오늘은 1급 객체에 대한 이야길 해볼건데, 이게 왜 중요하냐면
대부분 이 내용 때문에 현재 우리가 사용하고 있는 모든 코드들이 구현가능하기 때문이다.
결국 이 내용을 이해하면 지금 우리가 이렇게 쓴다라고 거의 대충 감으로, 혹은 애매모호하게 이해하고 있던 부분들이
퍼즐이 끼워맞춰지는 것처럼 줄줄이 이해가 될거기 때문에, 아주 도움이 될 거라고 생각한다.
1. 1급 객체란?
정의 : 다른 객체들에 일반적으로 적용가능한 연산을 모두 지원하는 객체를 가리킨다.
-출처: 위키 백과
1급 객체가 되기 위한 조건.
- 변수에 할당할 수 있다.
- 다른 함수를 인자로 전달 받는다.
- 다른 함수의 결과로서 리턴될 수 있다.
위의 이야기들을 모두 종합하면, 결국 데이터를 다루듯이 동일하게 다룰 수 있는 것들 그러니까, string, number 이런 타입의 애들이랑 동일하게 다룰 수 있다면 1급 객체가 될 수 있다는 의미가 된다.
=> 함수도 1급 객체가 된다.
//ex 1
const func1 = () => {}
const func2 = function () {} // 변수에 할당이 가능하다.
//ex 2
const func1 = () => {}
const func2 = (func) => {return func()}
func2(func1) // 다른 함수를 인자로 받을 수 있다.
//ex 3
const func = () => {
return () => {
return 1;
}
} // 다른 함수의 리턴값으로 사용될 수 있다.
앞의 이 예제 코드들을 보면 앞선 조건들을 함수가 모두 만족하고 있음을 확인 할 수 있다.
2. 함수가 1급 객체여서 할 수 있는 것
함수가 1급 객체라는거 까진 이제 알겠는데 이게 1급 객체라서 뭐가 좋으냐?,
라는 질문을 할 수 있다.
함수가 1급 객체라면 대표적으로 두가지를 할 수 있다.
1) 고차함수를 만들 수 있다.
2) 콜백함수로 사용할 수 있다.
1번이든 2번이든 예시는 앞의 예제코드로 다 들 수 있는데 고차함수라는건 함수의 parameter로 함수를 넘겨주고 함수를 결과값 즉, return값이 함수가 된 상태의 함수를 이야기 한다. 그러니까 함수의 depth가 만들어지는게 고차함수라고 이해하면 될 것같다.
2번의 경우에는 이제 앞에서 설명한 parameter로 넘겨준 함수. 그게 콜백함수다.
'Dev > JavaScript' 카테고리의 다른 글
[JS] slice() (0) | 2023.06.16 |
---|---|
[TypeScript] TypeScript (0) | 2023.06.02 |
[원리] 실수 표현 원리 (0) | 2023.05.30 |
[JavaScript] parseInt() (0) | 2023.05.23 |
[JavaScript] Hoisting (0) | 2023.04.20 |