javascript 강의나 책을 보면 1급 객체라는 단어가 종종 나오곤 합니다.
1급 객체가 무엇인지에 대하여 궁금중이 생겨 포스팅 합니다.
1급 객체란 컴퓨터 프로그래밍 언어 디자인에서 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킵니다.(wiki)
아래의 조건들을 만족하면 1급 객체라 할 수 있습니다
- 값으로서 반환될 수 있어야 합니다
- 함수의 인자로 전달될 수 있어야 합니다
- 배열이나 변수에 담길 수 있어야 합니다
javascript에서 원시 타입은 1급 객체에 성립합니다.
var a = 'a'
function sum(a, b) { return a + b}
sum(1,2) // 3
var array = [a, 1, 2, 3]
함수 또한 1급 객체에 성립됩니다.
// 값으로서 반환 될 수 있습니다.
function outerFunc() {
function innerFunc() {
console.log("this is innerFunc")
}
return innerFunc
}
outerFunc()()
// 함수의 인자로 전달될 수 있습니다.
var test = function(func, a){
return func(a)
}
test((f) => {console.log(f)}, 1) // 1
test((f) => {console.log(f)}, 4) // 4
// 변수나 배열에 담길 수 있습니다.
var array = [outerFunc()]
javascript에서 함수는 1급 객체이기 때문에 아래와 같이 활용할 수 있습니다.
1. 고차함수에서 활용
2. 콜백함수에서 활용
1. 고차함수에서 활용
const sum = (x) => (y) => x + y
const sumFive = sum(5)
sumFive(2) // 7
sumFive(5) // 10
고차함수란 함수를 인자로 받거나 함수를 반환하는 함수를 뜻합니다.
javascript에서 함수는 1급 객체이기 때문에 위와 같이 활용할 수 있습니다.
고차함수를 활용하면 함수의 확장성을 쉽게 다룰수 있습니다.
const sum = (x) => (y) => x + y
const sumFive = sum(5)
sumFive(2) // 7
sumFive(5) // 10
const sumTen = sum(10)
sumTen(2) // 12
sumTen(5) // 17
2. 콜백함수로 활용
function debounce(callback, delay) {
let timer;
return (...args) => {
if(timer) clearTimeout(timer)
timer = setTimeout(() => callback.apply(this, args), delay)
}
}
debounce(() => {console.log(1)}, 1000)()
function throttle(callback, delay) {
let timer = null;
return (...args) => {
if(!timer) {
timer = setTimeout(() => {
callback.apply(this, args)
timer = null
},delay)
}
}
}
throttle(() => {console.log(1)}, 1000)()
위의 예제는 함수를 콜백함수로 활용하는 예제입니다.
debounce 와 throttle을 직접 구현해 보는 것으로 예제를 대신하였습니다.
출처: https://ko.wikipedia.org/wiki/%EC%9D%BC%EA%B8%89_%EA%B0%9D%EC%B2%B4
'Frontend > Javascript' 카테고리의 다른 글
Javascript custom event 🐕 (0) | 2022.04.01 |
---|---|
컴파일러, 인터프리터 (0) | 2022.04.01 |
Javascript event loop (0) | 2022.03.31 |
Javascript 얕은 복사, 깊은 복사 (0) | 2022.03.27 |
Javascript Polyfill (0) | 2022.03.26 |