비실이의 개발 성장기

일급 객체 (First-class citizen) 본문

프론트엔드/javascript

일급 객체 (First-class citizen)

DubbingLee 2018. 11. 6. 14:49


Javascript를 처음 접했을 당시, 타입이 엄격하지 않음과 더불어 함수가 


변수처럼 어떠한 함수의 인자로 전달될 수 있고, 함수의 반환 결과로도 사용 가능하다는 것에 매력을 느꼈었다.



Javascript에서 함수를 자유롭게(?) 사용가능한 이유는 함수를 일급 객체(First-class citizen) 로 취급하기 때문이었다.




어떠한 특징이 있으면 일급 객체라고 부르는 것일까 라는 생각이 들어 위키백과를 찾아봤다.




일급 객체란?


'컴퓨터 프로그래밍 언어 디자인에서 일반적으로 다른 객체들에 적용 가능한 연산을 모두 지원하는 객체를 가리킨다.'





일급 객체가 되기위한 조건


1. '변수나 데이터 구조안에 담을 수 있다.'



testList 배열을 선언한 뒤, 0번째 인덱스에 익명함수를 추가했다.


 


2. '파라미터로 전달 할 수 있다.




setTimeout() 의 첫번째 인자로 showMessage 함수를 전달하여 1초뒤에 기능이 동작하도록 했다.


 


3. '반환값으로 사용할 수 있다.' 




customAlert 함수는 message 인자를 받아 새로운 문자열을 만든 뒤, 문자열을 alert() 함수의 인자에 넣어 반환하고 있다.


 


4. '할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.'



두 인자 a, b 더하여 반환하는 기능을 가진 sum 함수를 선언한 뒤, 새로운 변수 test를 선언하고 sum 함수를 할당했다. 


하지만 test.name 을 통해 함수의 이름을 확인해보면 'sum' 이 출력되므로 할당에 사용된 이름인 test 와 구별된다는 것을 확인했다.




 


5. '동적으로 프로퍼티 할당이 가능하다.'



sum 함수에 기능 설명 property인 description을 추가했다.





참고: https://ko.wikipedia.org/wiki/%EC%9D%BC%EA%B8%89_%EA%B0%9D%EC%B2%B4

Comments