일급 객체란 다음 4가지를 만족하는 객체를 일반적으로 의미하는데요.
🥲 힉, 너무 헷갈리지 않아요?
🥰 따라서 저는 이렇게 정의해요. 값으로 다룰 수 있는 객체가 일급객체다!
결국 표현식으로 만들 수 있고, 그 자체가 리터럴처럼 취급될 수 있는 게 값이니까요. 😉
따라서 자바스크립트의 함수는 엄연히 표현식이자 값으로 취급될 수 있으므로 일급객체입니다.
그렇다면, 왜 일급객체인 게 의미가 있을까?에 주목해야 해요.
결국 모든 개념은, 쓰임새가 있어야 가치를 지니기 때문이죠.
일급객체의 장점은, 바로 함수형 프로그래밍을 가능케한다는 점이에요.
값으로 다룰 수 있기에, 순수함수를 지향하며 선언적으로 프로그래밍을 할 수 있다는 점이 곧 일급객체로부터 가능하게 된 겁니다!
객체에는 프로퍼티와 값이 있었어요.
네, 함수에도 똑같이 프로퍼티와 값이 있습니다.
__proto__
: 현재 객체의 프로토타입 객체에 간접적으로 접근이 가능한 접근자 프로퍼티에요!arguments
: 유사 배열 객체로, 할당 받은 모든 인자 값을 갖고 있어요!caller
: 자신을 호출한 함수를 값으로 갖고 있어요!length
: 선언한 매개변수의 개수를 갖고 있어요!name
: 함수의 이름을 의미해요! (ES6
부터 표준)prototype
: 생성자 함수가 생성할 인스턴스의 프로토타입 객체를 의미해요! (즉, 생성자 함수로 기능하기 위해 constructor
가 함수 내부에 존재해야겠죠?)이에 관해서는 정~말 자세하게 책에서는 설명했는데, 아무래도 이후에 나올 설명들이 많아서 더욱 계륵이라는 느낌이 강하네요. 이정도만 이해해도 충분합니다!
아무래도 이 파트는 매우 중요한 개념이긴 하지만, 사실 일급객체를 이미 다루기도 했던 터라, 이정도만 이야기해도 충분한 것 같아요.
이 이상을 다루는 건 아무래도 라이브러리를 직접 구현하지 않는 이상, 크게 다룰 게 없어요. 오히려 헷갈릴 여지가 더 높습니다. (혹은, 이후에 나올 파트에서 모든 의문점을 해결해줍니다!)
결국 중요한 개념은, 함수는 객체라는 개념입니다.
물론 이마저도 이전에 언급되었지만, 자바스크립트의 거의 모든 것들이 객체로 이루어져 있어요.
따라서 우리가 당연히 호출된다고 생각하는 개념들마저, 결국엔 내부 객체에서 내부 메서드 및 슬롯을 갖고 핸들링하고 있는 셈이죠.
그중 자바스크립트의 함수는, 마치 값처럼 다룰 수 있다는 점에서, 콜백으로 넘기는 등, 일급객체로써 다재다능한 프로그래밍을 하는 데 도움을 줍니다.
다음 파트가 정말 유명한 프로토타입이네요. 아무래도 오늘은 쉬어가는 느낌! 😉 이상 🌈