Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[정리] 일급 객체 (first-class object) #33

Open
sbyeol3 opened this issue Jan 4, 2022 · 0 comments
Open

[정리] 일급 객체 (first-class object) #33

sbyeol3 opened this issue Jan 4, 2022 · 0 comments

Comments

@sbyeol3
Copy link
Owner

sbyeol3 commented Jan 4, 2022

Basically, first-class citizenship simply means “being able to do what everyone else can do.”

일급 객체의 조건

  1. 변수나 데이터 구조 안에 담을 수 있다.
  2. 함수의 파라미터로 전달할 수 있다.
  3. 함수의 반환 값으로 사용할 수 있다.

일급 객체인 함수를 일급 함수라고 한다. (first class function)

자바스크립트에서의 일급 객체

  • 자바스크립트에서 함수는 객체이며 Object 프로토타입을 상속받는다.
  • 그리고 자바스크립트에서 함수는 일급 객체이며 일급 함수이다.

자바스크립트에서는 함수도 객체이므로 보통 일급 객체라고 하는 듯 하다.

조건을 어떻게 만족하는가?

  1. var const let 키워드를 사용하여 변수에 함수를 할당할 수 있다.
  2. 함수의 파라미터로 함수를 전달할 수 있다.
  3. 함수에서 함수를 반환할 수 있다.

자바스크립트에서 함수가 일급 객체인 것이 중요한 이유

  • 함수는 자기 자신에게 전달될 수 있으며 심지어 자신으로부터 반환될 수 있다.
  • 함수가 일급 객체라는 것은 flexibility를 의미하는데 즉, 모든 프로그래밍 패러다임에 열려 있다는 것.
    • 함수형 프로그래밍은 일급 객체 함수가 허용하는 패러다임 중 하나이다.
  • 고차 함수(high order function가 가능하다. (ex. each, filter, map, every ...)
  • 이벤트에 콜백함수를 전달하는 것이 쉬워진다.
  • 일급 객체가 클로져와 만나면 시너지 효과가 난다. 함수는 생성될 당시의 Lexical env를 기억하는데 함수를 전달하는 과정에서 env도 함께 전달된다. 이를 이용하여 currying과 메모이제이션이 가능해진다.

'커링'이란 함수 하나가 n개의 인자를 받는 과정을 n개의 함수로 각각의 인자를 받도록 작성하는 것.
부분적으로 적용된 함수를 체인으로 계속 생성하여 결과적으로 값을 처리하도록 함.

참고

@sbyeol3 sbyeol3 changed the title [정리] 일급 객체 (first-class citizen) [정리] 일급 객체 (first-class object) Jan 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant