ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #JavaScript Grammar_일급 객체로서의 함수
    Javascript 2023. 10. 19. 10:53

    # 일급 객체(First-Class Object)란?

    다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리키며, 함수는 일급 객체로 취급되기 때문에 매우 유연하게 사용할 수 있음.

     

    1) 변수에 함수를 할당

    함수는 변수에 할당할 수 있음. 함수는 값으로 취급되기 때문에, 다른 변수와 마찬가지로 변수에 할당할 수 있음. 

    변수에 할당된 함수는 나중에 사용할 수 있음.

    const sayHello = function() {
    console.log('Hello!');
    };
    sayHello(); // "Hello!" 출력

     

    2) 함수를 인자로 다른 함수에 전달 

    함수는 다른 함수에 인자로 전달될 수 있음. 함수가 값으로 취급되기 떄문에, 다른 함수의 인자로 전달할 수 있음. 

    이것은 콜백(callback)이나 고차 함수(higher-order fuction)를 작성하는데 사용됨. 

     

    ***콜백 함수와 고차함수란?

    - 콜백 함수는 어떠한 함수의 매개변수로 쓰이는 함수를 말함..

    - 고차 함수는 함수를 인자로 받거나 함수를 출력으로 반환하는 함수를 말하며 함수를 다루는 함수라고도 칭함. 

    - 콜백함수는 고차함수라고도 할 수 있음.  

    function callFunction(func) {
    func();
    }
    const sayHello = function() {
    console.log('Hello!');
    };
    callFunction(sayHello); // "Hello!" 출력

     

    3) 함수를 반환 

    함수는 다른 함수에서 반환될 수 있음. 함수는 값으로 취급되기 때문에, 다른 함수에서 반환할 수 있음.

    함수 팩토리(factory)나 클로저(closure)를 작성하는데 사용.

    function createAdder(num) {
    return function(x) {
    return x + num;
    }
    }
    const addFive = createAdder(5);
    console.log(addFive(10)); // 15 출력

     

    4) 객체의 프로퍼티로 함수를 할당

    함수를 객체의 프로퍼티 할당될 수 있음. 객체의 메소드로 함수를 호출할 수 있음.

    const person = {
    name: 'John',
    sayHello: function() {
    console.log(`Hello, my name is ${this.name}`);
    }
    };
    person.sayHello(); // "Hello, my name is John" 출력

     

    5) 배열의 요소로 함수를 할당 

    함수는 배열의 요소로 할당될 수 있음. 이것은 함수를 배열에서 사용할 수 있게 함.

    const myArray = [
    function(a, b) {
    return a + b;
    },
    function(a, b) {
    return a - b;
    }
    ];
    console.log(myArray[0](5, 10)); // 15 출력
    console.log(myArray[1](10, 5)); // 5 출력

    함수를 일급 객체로 다룰 수 있다는 것은, 코드를 더 간결하고 모듈화된 형태로 작성할 수 있게 해줌. 또한 함수를 다양하게 조합 할 수 있다는 것을 의미함. 이를 통해 더 복잡한 기능을 구현할 수 있고 유지 보수에도 용이해짐.

    function multiplyBy(num) {
    return function(x) {
    return x * num;
    }
    }
    function add(x, y) {
    return x + y;
    }
    const multiplyByTwo = multiplyBy(2);
    const multiplyByThree = multiplyBy(3);
    const result = add(multiplyByTwo(5), multiplyByThree(10)); // 35 출력

     


    # 일급객체로서의 함수 장단점

     

    1. 장점

    1) 유연한 함수 다루기: 함수를 일급 객체로 다루면 다른 변수와 마찬가지로 함수를 할당하고 전달할 수 있음. 

    2) 고차함수 및 클로저: 코드를 더 추상적으로 만들고 모듈화할 수 있으며, 데이터 은닉 및 보호를 구현할 수 있음. 

    3) 콜백 함수: 비동기 작업 처리, 이벤트 처리 및 배열 처리와 같은 다양한 상황에서 유용함. 

    4) 모듈화와 재사용성: 코드의 가독성과 유지보수성이 향상.

     

    2. 단점 

    1) 과도한 복잡성: 함수형 프로그램의 고급 개념을 남용하면 코드가 복잡해질 수 있음.

    2) 학습 곡선: 함수형 프로그램밍 패러다임은 다소 낯설 수 있으며, 새로운 개념을 배우는데 시간이 걸림. 

    3) 성능 문제: 일부 함수형 프로그래밍 언어나 라이브러리는 성능에 영향을 미칠 수 있음. 

    4) 상태 관리의 어려움: 부작용(side effect)을 최소화하고 상태를 불변하게 유지하는 것을 강조하지만, 이로 인해 일부 작업에서는 상태 관리가 어려울 수 있음.

    5) 문제 도메인에 부합하지 않는 경우:  모든 문제에 적합한 해결책이 아닌 경우도 있음. 오히려 명령형 프로그래밍이나 객체 지향프로그램이 더 적합할 수 있음.  

     

    'Javascript' 카테고리의 다른 글

    #JavaScript Grammar_Map과 Set  (1) 2023.10.19
    #JavaScript Grammar_ES6문법  (1) 2023.10.19
    #JavaScript Grammar_반복문(for/while/break/continue)  (0) 2023.10.17
    #JavaScript Grammar_배열  (2) 2023.10.17
    #JavaScript Grammar_객체  (1) 2023.10.16
Designed by Tistory.