일급객체

movie·2022년 7월 17일
1

first class object

☁️ 일급객체란?

다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. - 위키백과
연산의 종류 : 인자로 넘기기, 수정하기, 변수에 대입하기 등


☁️ 일급객체의 조건

  • 변수에 할당할 수 있다.
  • 인자로 넘길 수 있어야 한다.
  • 다른 함수의 결과로서 리턴될 수 있다.

조건에 대한 예시

// 1️⃣ 함수는 변수에 할당할 수 있다. 

const printer = function () {
	console.log('masterpiece movie')
}

printer();

// 2️⃣ 함수는 인자로 넘겨질 수 있다. 

const printer = function (nickname) {
	console.log('masterpiece ' + nickname);
}

// printer 함수가 인자로 넘겨진다. 
const wrapperFunction = (func) => {
  const nickname = 'movie';
  
  func(nickname);
}

wrapperFunction(printer);

// 3️⃣ 다른 함수의 결과로서 리턴될 수 있다.

const returnPrinter = () => {
  return (nickname) => {
    console.log('masterpiece ' + nickname);
  }
}

returnPrinter()('movie') // return된 함수 실행 

☁️ 일급객체 예시

  • 함수

☁️ 일급객체가 가능한 것

  • 고차함수(Higher order function)를 만들 수 있다.
  • 콜백(Callback)을 사용할 수 있다. (=인자로 받는 함수)
  • 함수를 데이터 다루듯 다룰 수 있다. (다른 변수와 동일하게 다룰 수 있다.)

고차함수

  • 함수를 인자로 전달받거나, 함수를 결과로 반환하는 함수
  • 가변 데이터를 피하고 불변성을 지향하는 함수형 프로그래밍에 기반을 둠.

☁️ 왜 일급객체인가?

고차함수..🌸

  • 고차함수는 인자로 받은 함수를 필요한 시점에 호출하거나, 클로저를 생성하여 반환한다.
  • 클로저는 함수를 일급객체로 취급하는 함수형 프로그래밍 언어에서 사용되는 중요한 특성이다.

🌸엥 여기서 클로저형이 왜 나와..?🌸

  • 스코프는 함수를 어디에 선언하였는지에 따라 결정된다. (= 렉시컬 스코핑, Lexical scoping)
  • 함수(A)가 특정 함수(B)의 안에 선언되었다면 A의 상위스코프는 B가 된다.
  • A는 자신이 속한 렉시컬 스코프(전역, B함수, 자신의 스코프)를 참조할 수 있다.
    • 왜? 실행컨텍스트의 스코프 체인을 JS 엔진이 검색했기 때문에 - 식별자 결정
// closure 

function outerFunc() {
  let x = 10;
  let innerFunc = function () { console.log(x); };
  
  return innerFunc;
}

let inner = outerFunc();
inner(); // 10
  • outerFuncinnerFunc을 반환하고 콜스택에서 제거되었다.
    • 제거된 이후로 x에 접근할 수 있는 방법은 없다.
    • 하지만 inner()를 실행했을 때 x값인 10이 출력되었다.
    • 자신을 포함하고 있는 외부함수보다 내부함수가 더 오래 유지되는 경우, 외부함수 밖에서 내부함수가 호출되더라도 외부함수의 지역변수에 접근할 수 있는데 이러한 함수를 closure라고 부른다. (자신이 생성될 때 환경을 기억하는 함수!)
    • 즉, 내부함수는 자신이 선언되었을 때의 환경(렉시컬 환경, Lexical environment)를 기억한다.
    • 이때 변수 x를 자유 변수(free variable)이라고 부른다.
    • 활성 객체 : 외부함수가 이미 종료되었어도, 외부함수내 변수가 필요한 내부함수가 하나 이상 존재하는 경우 유지된다.

클로저를 활용하는 이유

의도치 않은 변경을 걱정할 필요가 없으며, 변경된 이전 값을 기억할 수 있다.

  • 현재 상태를 기억하고 변경된 최신 상태를 유지할 경우 - 예제
  • 전역 변수 사용 억제
    • 전역 변수 : 누구나 접근하고 변경할 수 있으므로 의도치 않게 값이 변경될 수 있다.
    • 지역 변수 : 변경된 이전 상태를 기억하지 못한다.
    • 클로저 : 외부함수는 실행 후 소멸되지만, return된 내부함수는 외부함수의 지역변수를 기억하기 때문에 다른 외부 접근을 막을 수 있으며 이전 상태를 기억할 수 있다.

함수형 프로그래밍..🌸

자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임 - 참고

  • 키워드
    • 불변성 : 객체의 값을 바꾸기 위해서는 데이터의 복사본을 만들고 그 복사본을 사용해 작업
    • 선언형
    • 일급객체 • 고차함수
  • 장점
    • 높은 수준의 추상화
    • 함수단위의 코드 재사용 수월
    • 불변성 지향 = 프로그램 동작 예측 용이

자바스크립트가 인기 있는 이유중 하나

  • 함수가 일급객체이므로 함수형 프로그래밍이 가능하다. (함수를 인자로 받거나, 함수를 반환하는 고차함수를 만들 수 있기 때문에)


참고

profile
영화보관소는 영화관 😎

0개의 댓글

관련 채용 정보