본문 바로가기
개발/개념

일급 객체

by BENGGRI 2022. 10. 21.
반응형

 

일급 객체(First Class Object)

  • 변수에 할당(assignment)
  • 다른 함수를 인자(argument)로 전달
  • 다른 함수의 결과로서 리턴
  • 위에 대한 조건으로 인해 알 수 있는 것은 함수를 데이터(string, number, boolean, array, object) 다루 듯이 다룰 수 있다는 점
object Main {
    @JvmStatic
    fun main(args: Array<String>) {
        val a = test
    }

    val test: () -> Unit = { println("kotlin") }
}
public class java {

    public static void test(){
        System.out.println("java");
    }

    public static void main(String[] args) {
        System.out.println("java");
        Object a = test;
    }
}

변수에 할당(assignment)

const mul = function (num) {
  return num*num;
}

다른 함수를 인자(argument)로 전달

function mul(num) {
  return num*num;
}

// func는 매개변수임, 이름은 아무거나 지정해도 상관없음
function mulNum(func, number) {
  return func(number);
}

let result = mulNum(mul, 3); // 9

다른 함수의 결과로 리턴

function add(num1) {
  return function (num2) {
    return num1 + num2;
  }
}

add(3)(4); // 7

함수가 일급객체이기 때문에 할 수 있는 것은?

  • 고차함수(Higher order function)를 만들 수 있다.
  • 콜백(callback)을 사용할 수 있다.

 

고차함수(Higher-order function)

  • 함수를 전달인자(argument) 또는 매개변수(parameter)로 받거나 함수를 리턴하는 함수
# 다른 함수를 인자로 받는 경우
function mul(num) { return num * num }

function mulNum(func, num) {
  return func(num);
}

# 함수를 리턴하는 경우
function mul(num1) {
  return function(num2) {
    return num2*num1;
  };
}

# 함수를 인자로 받고, 함수를 리턴하는 경우
function mul(func) {
  func();
  return function(func1) {
    return func1();
  };
}

콜백함수(callback)

  • 전달인자(Argument)로 받는 함수
// 일반함수
const mul = function(num) { return num * 2 }

// 매개변수(parameter)로 func를 받았고, 함수(func)를 리턴하기 때문에 고차함수
const mulNum = function(func, num) { return func(num) }

// mulNum은 전달인자(argument)로 함수(mul)을 받았으므로 고차함수
// 전달인자(argument)로 받은 함수인 mul은 콜백함수
mulNum(mul, 3) // 6

 

 

 

 

반응형

'개발 > 개념' 카테고리의 다른 글

CORS  (0) 2022.10.27
REST API  (0) 2022.10.21
Web Server, WAS  (2) 2022.10.07
[가상화, 클라우드] 가상화와 클라우드  (0) 2021.02.23
[테스트] 애플리케이션 테스트  (0) 2021.02.03

댓글