파카

일급함수, 일급객체란 ? 본문

프로그래밍/Javascript

일급함수, 일급객체란 ?

Anphaca 2021. 12. 8. 20:58
일급객체에 대해 찾아보면 아래와 같은 내용을 볼 수 있다.

일급객체는 아래와 같은 특징을 가지고 있다. 

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

 

일급함수

프로그래밍 언어에서 함수라고 하는 코드의 묶음을 일반적인 값처럼 취급한다는 말을 말한다.
즉 일반적인 값처럼 변수에 값을 넣을 수 있다.
인자로 받는 값이 함수가 될 수도
리턴받는 값이 함수일 수도..
 
일급함수이자 일급객체에 대해 
글로보고 충분히 이해가 가면 좋지만 
역시 코드로 보는게 더 이해하기 쉬울 거 같다. 
 
코드를 통해 알아보자 
크게 2가지 경우로 나눌 수 있는 거 같다. 
 
case 1
// 간단한 예제를 작성해보자
// 인자로 함수가 들어옴
let add = calculate(4,5);
console.log(add()); // 9

function calculate2(val, func) { // 함수를 인자로 전달! call back function
    return func(5, val);
}

function addValue(a, b) {
    return a + b;
}

console.log(calculate2(7, addValue)); // expected output : 12
 
case 2
// 반환 값으로의 함수
function salePrice(discountRate, price) {
    return price - (price * (discountRate * 0.01));
}

console.log("여름 세일 - " + salePrice(30, 567000));
console.log("겨울 세일 - " + salePrice(10, 567000));

function discountPrice(discountRate) {
    return function (price) {
        return price - (price * (discountRate * 0.01));
    }
}

console.log("여름 세일 - " + discountPrice(30)(567000));
console.log("겨울 세일 - " + discountPrice(10)(567000));

// 이 부분의 예제를 보면서 왜? 사용해면 좋은 부분이 있을까에 대해 이해되었다..
let summerPrice = discountPrice(30);
let winterPrice = discountPrice(10);

console.log("여름 세일 - " + summerPrice(567000));
console.log("겨울 세일 - " + winterPrice(567000));
 
 
예제 코드를 보면 알 수 있지만 특히나 
반환 값으로 함수를 사용할 경우에는 코드 가독성을 높이는데 도움을 줄 수 있다.

결론을 정리하면
JavaScript 에선 함수도 값으로 취급된다.
함수를 즉시 호출하지 않고 변수에 담아서 활용한다.
변수의 명칭을 통해 의미를 부여하여 표현력을 통해 코드 가독성을 높일 수 있다.
 

 

'프로그래밍 > Javascript' 카테고리의 다른 글

JS, promise  (0) 2021.12.10
JS, 비동기 처리와 콜백함수  (0) 2021.12.09
클래스 그리고 prototype  (0) 2021.11.10
객체 (2)  (0) 2021.11.10
객체 (1)  (0) 2021.11.09
Comments