[JavaScript] 일급 객체

Rachaen·2023년 1월 10일
0

일급객체란?

함수를 변수와 같이 다루는 언어에 있는 개념

일급 객체의 특성

  1. 상수 또는 변수에 할당될 수 있음
  2. 다른 함수에 인자로 전달될 수 있음
  3. 다른 함수의 결과값으로서 반환될 수 있음

1. 할당

function isOddNum (number) {
  console.log(
    (number % 2 ? '홀' : '짝')
    + '수입니다.'
  );
  return number % 2 ? true : false;
};

const checkIfOdd = isOddNum; // 뒤에 괄호 없음 유의
// 괄호가 있으면 함수를 실행해서 반환된 값을 넣어주는 것

2. 인자로 전달

  • 전달받는 함수: 고차 함수
  • 전달되는 함수: 콜백 함수
let list = [1, 2, 3, 4, 5];

function doInArray (array, func) {
  for (item of array) {
    func(item);
  }
}

// console.log - console이란 객체에서 log란 키에 할당된 함수
doInArray(list, console.log);
// doInArray: 고차 함수, console.log: 콜백 함수

3. 결과값으로 반환

function getIntroFunc (name, formal) {
  return formal
  ? function () {
    console.log(`안녕하십니까, ${name}입니다.`);
  } : function () {
    console.log(`안녕하세요~ ${name}이라고 해요.`);
  }
}

const hongIntro = getIntroFunc('홍길동', true);
const jeonIntro = getIntroFunc('전우치', false);

hongIntro();	// 안녕하십니까, 홍길동입니다.
jeonIntro();	// 안녕하세요~ 전우치이라고 해요.

커링

  • 필요한 인자보다 적은 수의 인자를 받으면, 나머지 인자를 인자로 받는 다른 함수를 반환
// 기존의 코드
function addMultSubt (a, b, c, d) {
  return (a + b) * c - d;
}

const addMultSubt2 = (a, b, c, d) => (a + b) * c - d;

console.log(
  addMultSubt(2, 3, 4, 5),
  addMultSubt2(2, 3, 4, 5),
);

// ⭐ 커링으로 작성된 함수
function curryAddMultSubt (a) {
  return function (b) {
    return function (c) {
      return function (d) {
        return (a + b) * c - d;
      }
    }
  }
}

const curryAddMultSubt2 = a => b => c => d => (a + b) * c - d;

const curryAddMultSubtFrom2 = curryAddMultSubt(2);
const curryMultSubtFrom5 = curryAddMultSubt(2)(3);
const currySubtFrom20 = curryAddMultSubt(2)(3)(4);
console.log(
  curryAddMultSubtFrom2(3)(4)(5),
  curryMultSubtFrom5(4)(5),
  currySubtFrom20(5)
);	// 15 15 15

mdn 일급함수
profile
개발을 잘하자!

0개의 댓글