프로그래밍/Scala

1급 객체 (First class Object)

seungdols 2015. 11. 20. 14:22

일급 객체(First class object)

일급/이급 객체 개념은 영국 컴퓨터 과학자 크리스토퍼 스트레이치에 의해 1960년대에 소개가 되었고, Algol언어의 Real number와 프로시저를 비교함으로 일급 객체의 개념에 대해 처음으로 언급 했다.
90년대 들어와 미국 컴퓨터 과학자 라파엘 핀켈이 이급/삼급 정의를 제안 했으나, 받아들여지진 않았다.

조건
  • 변수나 데이터 구조안에 담을 수 있다.
  • 파라미터로 전달 할 수 있다.
  • 반환 값으로 사용할 수 있다.
  • 할당에 사용된 이름과 관계없이 고유하게 구별이 가능하다.
  • 동적으로 Property 할당이 가능하다.

Scala type의 Integer, Floating point number의 경우 거의 모든 언어에서 항상 일급 객체에 해당한다.

개념 기술 지원언어
일급함수 클로저 Scheme,ML,Haskell,F#,Scala,Swift
일급 클래스 메타 클래스 Smalltalk, Object-c,Ruby,Python

위 말고도 일급 다형성등 많이 존재하나, 대부분의 주류 언어에서는 일급 함수와 일급 클래스정도 지원한다.

사실 일급 객체를 어디서 볼 수 있냐 한다면, 가장 흔한 것은 JavaScript언어이다. ECMAScript라고도 하며, ‘에크마 스크립트’로 읽는다. 보통은 JavaScript라고 하지만, 표준 이름은 에크마 스크립트이고, 아마 기관이 달라 표준과는 좀 다를 수 있다. 우선, 자바스크립트에서는 함수가 1급 객체이고, 클로저를 지원한다. 1급 함수(클로저)라고도 할 수 있겠다. 클로저는 완벽히 이해를 해야 자바스크립트 개발에 효율적인 코딩이 가능 할 것이다.

고계함수(Higher-order-function)

고계함수는 쉽게 말해 다른 함수를 인수로 받아들이거나 함수를 리턴하는 함수를 지칭하는 용어이다. 일상적인 말로 표현하자면, 다른 함수를 생산하거나 소비하는 함수를 의미한다고 볼 수 있다.

함수형 언어에서 보통은 ‘함수’조차도 값(value)로 취급하기 때문에 가능한 것이다.

고계함수가 아닌 것을 1급 함수라 표현하는데 이는 ‘클로저’라 보통 말하곤 한다.

map (\x -> x * x) [1..10]

위 코드는 하스켈 코드이며, 인수로 주어진 리스트의 원소를 제곱하는 코드이다.

여기서 map 함수의 첫 번째 인자로 제곱하는 익명함수(Annymous function)을 인자로 받아 두번째 인수인 리스트의원소들의 제곱을 연산하게 된다.

명령형 프로그래밍언어와는 다른 모습을 갖는다.

* 위키피디아 - 1급 객체/고계함수


  •  무단 수정 및 배포는 금지합니다. 
  •  모든 내용은 본 블로그 운영자가 정리한 내용입니다. 
  •  참조한 정보에 대해서는 출처를 남기고 있습니다.
  •  다양한 곳에서 참조한 경우 출처 누락이 있을 수 있습니다.
  •  (말해주시면  수정하도록 하겠습니다.)
  •  틀린 내용 / 오류가 포함된 내용은 댓글로 남겨주세요.
  •  choiseungho0822@gmail.com 보내주셔도 됩니다.
  •  Seungdols Wiki 운영중입니다.



반응형