함수도 '객체'입니다
Javascript에서 기억해둬야 할 주요 특성 중 하나, 바로 "함수도 객체이다"라는 정의입니다. 우선, 함수가 "객체"라는 정의로 인해서 우리가 기억해 두어야 할 특성은 뭐가 있을까요? 하나씩 살펴보도록 하겠습니다.
함수도 프로퍼티를 갖습니다
앞서 배운것과 마찬가지로, 함수도 객체이므로 Javascript에서 통용되는 객체의 프로퍼티를 똑같이 가질 수 있습니다. 사용법도 동일합니다. 즉, 함수는 함수로서의 기능을 추가로 갖는 객체라고 생각해도 무방합니다.
특히, 함수의 경우 우리가 흔히 할당하여 사용하는 프로퍼티외에 [[Code]] 프로퍼티를 갖게됩니다. 이 프로퍼티 내에 함수로서의 기능을 수행하는 선언문이 할당되어 함수로서 기능을 하게 됩니다. 아래 예제를 통해 함수 객체의 프로퍼티 활용을 살펴보겠습니다.
function plus(x, y){
return x + y;
}
plus.result = plus(99, 1);
plus.now = 'In Progress';
console.log(plus.result);
console.log(plus.now);
// 출력
// 100
// In Progress
plus함수에 기존 일반 객체와 마찬가지의 방식으로 result, now라는 프로퍼티를 선언했습니다. result에는 plus함수 연산 결과를 할당하고, now에는 문자열을 할당했습니다. 그리고 해당 프로퍼티 호출도 일반 객체와 동일한 방식으로 진행했습니다.
참고로 함수 객체에서는 위에서 설명한 [[Code]]라는 별도의 프로퍼티에 함수 선언문의 내용이 저장된다는 사실을 다시 한 번 잊지말고 기억합시다.
일급 객체(First Class Object)
Javascript가 C#나 Java와 같은 프로그래밍 언어와 차별점을 갖는 가장 큰 부분이 바로 함수의 일급 객체로서의 성질일 것입니다. 앞으로 이 [함수의 객체특성] 아티클 시리즈에서는 이 일급 객체로서의 특징을 하나씩 자세히 살펴볼 예정입니다. 우선 일급 객체로서의 특징을 요약해서 살펴보겠습니다.
1. 리터럴에 의해 생성
2. 변수/배열/객체 프로퍼티에 할당 가능
3. 함수의 인자로 전달 가능
4. 함수의 리턴 값으로 리턴 가능
5. 동적으로 프로퍼티를 생성 / 할당 가능
문서나 정의에 따라 다르게 기술된 부분도 있겠지만, 결국 종합하면 위와 같은 특징을 갖는 것이 바로 일급 객체로서의 Javascript 함수입니다. 이러한 특성을 기반으로 함수형 프로그래밍이 가능하다는 특성이 있으며, 이로 인해 독특한 코드 작성 규칙이나 패턴이 생겨나게 되었습니다. 기존 언어와의 코드 패턴이 달라지는 가장 큰 요인이므로, 이 부분에 대해서는 항상 염두에 두고 학습을 진행해야 하며 후속 아티클에서는 세부적으로 함수의 특성에 대해 알아보도록 하겠습니다.
'Programming > Javascript' 카테고리의 다른 글
7. Javascript 함수 (3) - 함수 프로퍼티 1 (0) | 2022.09.20 |
---|---|
7. Javascript 함수 (2) - 함수의 객체 특성 2 (0) | 2022.09.15 |
7. Javascript 함수 (1) - 함수 선언 2 (0) | 2022.09.06 |
7. Javascript 함수 (1) - 함수 선언 1 (2) | 2022.09.05 |
6. Javascript 연산자 (0) | 2022.09.04 |