이 영역을 누르면 첫 페이지로 이동
lucid_dream 블로그의 첫 페이지로 이동

lucid_dream

페이지 맨 위로 올라가기

lucid_dream

다양한 상상을 현실로 만드는 멀티 크리에이터를 꿈꾸고 있습니다 ❤️

일급 객체 (First Class Object)

  • 2021.10.02 21:35
  • 🌈 기술스택/JavaScript
글 작성자: NoHack
728x90

First Class Object

자바스크립트를 공부하다 보면, 일급 객체(First Class Object)라는 용어를 종종 볼 수 있습니다. 어떤 의미에서 그냥 객체도 아니고, 일급 객체라고 부르는 것일까요? 자바스크립트에서는 다음 조건에 해당되는 객체를 모두 일급 객체라 합니다.

  • 런타임 시점에 무명의 리터럴로 생성할 수 있다.
  • 변수나 자료구조(배열/객체)에 할당할 수 있다.
  • 함수의 매개변수로 전달할 수 있다.
  • 함수의 반환값으로 사용할 수 있다.
자바스크립트에서 함수도 객체이기 때문에 묶어서 일급 객체라 부르겠습니다.

위 조건에 따라 코드로 구현하면 다음과 같습니다.

//  1. 런타임 시점에 무명의 리터럴로 생성할 수 있으며,
//  2. 변수나 자료구조(배열/객체)에 할당할 수 있다.
const sum = function (a, b) {
  return a + b;
};
const sub = function (a, b) {
  return a - b;
};

//  함수의 매개변수로 전달할 수 있다. (Callback)
function myForEach(list, callback) {
  for (let i = 0; i < list.length; i++) {
    callback(i, list[i], list);
  }
}
myForEach([1, 2, 3, 4, 5], console.log);

//  함수의 반환값으로 사용할 수 있다. (Closure)
const userManager = (function () {
  let userNum = 0;

  return {
    addUser() {
      userNum++;
    },
    delUser() {
      userNum--;
    },
  };
})();
userManager.addUser();
userManager.delUser();

자바스크립트의 일급 객체 특성을 잘 알아두면 함수형 프로그래밍을 구현할 때 다양하게 활용 가능합니다.

고차 함수

고차 함수(Higher-order Function)는 함수를 매개변수로 받거나, 반환값으로 사용하는 함수입니다. 대표적으로 배열 프로토타입의 메서드 중 forEach, map, filter, reduce가 해당됩니다. 게다가 자바스크립트에 미리 구현된 고차 함수들은 정말 중요한 문법인데, 그 이유는 부수 효과(Side effect)를 방지하는 불변성을 지향하는 함수형 프로그래밍에 기반을 두고 있기 때문입니다.

부수 효과란 함수 내부의 실행으로 인해 함수 외부 영역이 영향을 받는 것을 말합니다.

다음 코드를 보면서 부수 효과가 일어나지 않는 것을 확인하시면 좋을 것 같습니다.

const arr = [1, 2, 3, 4, 5];

// 1 2 3 4 5
arr.forEach((v) => {
  console.log(v);
});

// [ 1, 4, 9, 16, 25 ]
let newArr = arr.map((v) => v ** 2);
console.log(newArr);

// [ 2, 4 ]
newArr = arr.filter((_, i) => i % 2);
console.log(newArr);

// 15
let sum = arr.reduce((pre, cur) => {
  return pre + cur;
}, 0);
console.log(sum);

배열에 새로운 값을 추가하는 push 메서드나 제거하는 pop 메서드는 원본 배열을 건드리기 때문에 부수 효과가 발생하는 메서드입니다. 반면에 앞서 언급한 고차 함수들은 원본을 참고하여 새로운 복사본을 만들고, 이를 알맞게 변경한 후 반환합니다.

References

  • First-class objects
  • Discover the power of first class functions
저작자표시 비영리 동일조건

'🌈 기술스택 > JavaScript' 카테고리의 다른 글

자기 자신을 가리키는 값 this  (0) 2021.10.03
자바스크립트 코드의 유효 범위 Scope  (0) 2021.10.03
얕은 복사 & 깊은 복사  (0) 2021.10.03
유사 배열 객체 만들기  (0) 2021.10.02
호이스팅 (Hoisting)  (0) 2021.10.01

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 자바스크립트 코드의 유효 범위 Scope

    자바스크립트 코드의 유효 범위 Scope

    2021.10.03
  • 얕은 복사 & 깊은 복사

    얕은 복사 & 깊은 복사

    2021.10.03
  • 유사 배열 객체 만들기

    유사 배열 객체 만들기

    2021.10.02
  • 호이스팅 (Hoisting)

    호이스팅 (Hoisting)

    2021.10.01
다른 글 더 둘러보기

정보

lucid_dream 블로그의 첫 페이지로 이동

lucid_dream

  • lucid_dream의 첫 페이지로 이동

검색

메뉴

  • All categories
  • About me
  • Guest Book

카테고리

  • 분류 전체보기 (122)
    • 💦 일상뻘글 (1)
    • ⭐️ 프로젝트 (7)
      • 사이드 프로젝트 (1)
      • 스터디 노트 (6)
    • 🌈 기술스택 (31)
      • Web Basic (10)
      • JavaScript (14)
      • React (0)
      • Git (7)
    • 💻 컴퓨터공학 (28)
      • 자료구조 (13)
      • 알고리즘 (7)
      • 운영체제 (4)
      • 소프트웨어 공학 (4)
    • 📝 문제풀이 (55)
      • 프로그래머스 (55)
      • 과제관 (0)
    • 🐹 취미생활 (0)
      • Film Log (0)
      • Cover Song (0)

댓글

정보

NoHack의 lucid_dream

lucid_dream

NoHack

나의 외부 링크

  • Github
  • Instagram

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © NoHack.

티스토리툴바