Kotlin - First-class citizen

Park Suyong·2022년 2월 22일
0

Kotlin

목록 보기
2/7

1급 객체 (First-class citizen)

Kotlin 공식 문서에 들어가 보면, 1급 객체라는 말이 등장한다. 한국어로 번역 돌리면 1급 시민이라더라. 그렇다면 1급 객체에 대해 이해해 보도록 하자.

정의

위키백과에 의하면, 다음과 같이 표현한다.

컴퓨터 프로그래밍 언어 디자인에서, 일급 객체(first-class object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 인자로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다.

영국의 컴퓨터 과학자 크리스토퍼 스크래치는 일급 및 이급 객체에 대해 처음으로 언급했으며, 일급 객체를 구성하는 요소는 다음 4가지를 만족한다고 말한다.

  1. 모든 요소는 함수의 실제 매개변수가 될 수 있다.
  2. 모든 요소는 함수의 반환 값이 될 수 있다.
  3. 모든 요소는 할당 명령문의 대상이 될 수 있다.
  4. 모든 요소는 동일 비교의 대상이 될 수 있다.

참고로 미국의 컴퓨터 과학자 라파엘 핀켈은 이급 및 삼급 객체에 대한 정의를 제안하기도 했으나, 널리 받아들여 지지는 않았다고 한다.

여기까지 봤을 때는 1급 객체의 의미가 모호하게 받아들여 진다. 구글링 하던 중, 잘 정리해 놓은 블로그를 찾았다. 해당 내용을 기반으로 1급 객체를 정의해 본다.

아래의 3가지 조건을 충족한다면, 1급 객체로 볼 수 있다.

  1. 변수나 데이터에 할당할 수 있어야 한다.
  2. 객체의 인자로 넘길 수 있어야 한다.
  3. 객체의 리턴값으로 리턴할 수 있어야 한다.

1급 객체의 특성은 함수형 프로그래밍의 특징 중 하나이다.

예시

변수나 데이터에 할당할 수 있어야 한다.

object Test {
    
    fun main() {
        val temp = test
    }
    
    private val test: () -> Unit = {
        println("testing")
    }
}

kotlin은 위와 같이 test 함수를 temp 변수에 할당할 수 있다.

객체의 인자로 넘길 수 있어야 한다.

object Test {

    fun main() {
        testFunc(test)
    }
    
    private fun testFunc(f: () -> Unit) {
        f.invoke()
    }

    private val test: () -> Unit = {
        println("testing")
    }
}

kotlin은 위와 같이 testFunc 함수의 인자로 함수를 전달할 수 있다.

객체의 리턴값으로 리턴할 수 있어야 한다.

object Test {

    fun main() {
        testFunc()
    }

    private fun testFunc(): () -> Unit {
        return {
            println("testing")
        }
    }
}

kotlin은 위와 같이 testFunc 함수의 반환값으로 함수를 전달할 수 있다.

위 3가지 조건에 따라, kotlin의 함수는 1급 객체라고 정의할 수 있다.

이렇듯 1급 객체를 지원하는 kotlin은 함수형 프로그래밍을 지원한다고 할 수 있다.

참고로 함수를 인자로 받거나 반환하는 함수를 고차 함수(High Order Function)라 한다.

References

위키백과 일급 객체

1급 객체(First-class citizen)란? with Kotlin

profile
Android Developer

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN