[programmers] TIL_DAY-09

김민기·2022년 3월 30일
0

Programmers_TIL

목록 보기
9/21
post-thumbnail

🗒 목차

  1. 함수형 프로그래밍
  2. 이터러블/이터레이터 프로토콜

✅ 1. 함수형 프로그래밍

  함수형 프로그래밍이란? 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. [위키백과]

  1. 순수 함수
    동일한 입력에는 항상 같은 값을 반환한다.
    함수의 실행이 프로그램의 실행에 영향을 주지 않는다.
    함수 내부에서 외부의 변수의 값을 변경하거나 프로그램의 상태를 변경하는 Side Effect가 없다.

  2. 비상태, 불변성
    함수형 프로그래밍에서 데이터는 변하지 않는 불변성을 유지해야 한다.
    데이터의 변경이 필요하다면, 원본 데이터를 직접 변경하는 것이 아니라 원본 데이터의 복사본을 만들어서 사용한다.

  3. 선언형 함수
    명령형 프로그래밍은 무엇을 어떻게 할 것인가에 주목하고, 선언형 프로그래밍은 무엇을 할 것인가에 주목한다.

  4. 1급 객체와 고차 함수
    함수형 프로그래밍에서 함수는 1급 객체로 취급된다.
    1급 객체

    1. 변수나 데이터 구조안에 담을 수 있다.
    2. 파라미터로 전달할 수 있다.
    3. 반환값으로 사용할 수 있다.
    4. 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
    5. 동적으로 프로퍼티 할당이 가능하다.

    고차함수

    1. 함수를 인자로 전달할 수 있어야 한다.
    2. 함수의 반환값으로 또 다른 함수를 사용할 수 있어야 한다.

✅ 2. 이터러블/이터레이터 프로토콜

  자바스크립트를 공부하면서 for...in 문 사용법과 for...of를 사용하다 for...of문을 객체에서 사용하다 다음과 같은 에러가 발생한적이 있었다. TypeError: obj is not iterable 배열은 가능한데 객체는 왜 안되지? 배열도 객체가 아닌가?

 에러를 보고 의문이 남았지만 그냥 지나치고 for...in으로 순회를 했었다. 이번 기회에 정확하게 이터러블이 어떤 것인지 알아 본다.

 ES6에서 도입된 이터레이션 프로토콜은 데이터 컬렉션을 순회하기 위한 프로토콜이다. 이터레이션 프로토콜을 준수한 객체는 for...of문으로 순회할 수 있고 Spread 문법의 피연산자가 될 수 있다.
이터레이션 프로토콜에는 이터러블 프로토콜과 이터레이터 프로토콜이 있다.

  1. 이터러블 프로토콜을 준수한 객체를 이터러블이라 부른다.
    이터러블은 [Symbol.iterator]()메소드를 구현한 객체를 의미한다. 또는 [Symbol.iterator]()메소드를 프로토타입 체인에 의해서 상속한 객체를 말한다.
  2. 이터레이터 프로토콜은 {value, done}을 리턴하는 next 메소드를 소유하며 next 메소드를 호출하면 이터러블을 순회하며 {value, done} 객체를 반환하는 것이다.

    이터러블 프로토콜을 준수한 이터러블은 Symbol.iterator 메소드를 소유한다. 이 메소드를 호출하면 이터레이터를 반환 한다. 이터레이터 프로토콜을 준수한 이터레이터는 next 메소드를 갖는다.

우리가 사용하는 배열은 이터러블 프로토콜을 준수하는 이터러블이기 때문에 Symbol.iterator 메소드를 갖고 for...of문에서 사용이 가능하지만 객체의 경우 이터러블이 아니기 때문에 순회가 불가능했던 것이다.

  이터러블/이터레이터 프로토콜이 중요한 이유는 단순히 ES6에서 지원하는 내장 값만이 이 프로토콜을 따르는 것이 아니라 이미 많은 오픈소스 라이브러리나 자바스크립트에서 순회가 가능한 형태의 값을 가진 값들은 대부분 이 프로토콜을 따르고 있고, 브라우저의 Web API에서 구현되어 있는 것들, DOM과 관련된 객체들이 이 프로토콜을 따르고 있기 때문에 반드시 알고 있어야 한다.

0개의 댓글