Books

    8장 람다 라이브러리

    이번 장은 람다라는 이름의 유명한 함수형 유틸리티 라이브러리의 기능을 알아보자. 9-1 람다 라이브러리 소개 람다 패키지는 8장에서 소개한 compose나 pipe를 사용하는 함수 조합을 쉽게 할 수 있게 설계된 오픈소스 자바스크립트 라이브러리로서 다음과 같은 특징이 있다. 타입스크립트 언어와 100% 호환 compose와 pipe 함수 제공 자동 커리 기능 제공 포인트가 없는 고차 도움 함수 제공 조합 논리(combinatory logic) 함수 일부 제공 하스켈 렌즈 라이브러리 기능 일부 제공 자바스크립트 표준 모나드 규격과 호환 실습 프로젝트 구성 npm init -y npm i -D typescript ts-node @types/node mkdir src // ramda package npm i ..

    8장 함수 조합의 원리와 응용

    함수 조합은 작은 기능을 하는 여러 함수를 pipe나 compose라는 이름의 함수로 조합하여 조금씩 더 의미 있는 함수로 만들어 가는 코드 설계 기법이다. 이번 장은 함수 조합의 토대가 되는 고차 함수와 커리, 그리고 이들을 이용한 함수 조합에 간해 살펴보자. 8-1 함수형 프로그래밍이란? 함수형 프로그래밍은 순수 함수와 선언형 프로그래밍의 토대 위에 함수 조합과 모나드 조합으로 코드를 설계하고 구현하는 기법이다. 함수형 프로그래밍은 다음 세 가지 수학 이론에 기반을 두고 있다. 람다 수학(ramda calculus) : 조합 논리와 카테고리 이론의 토대가 되는 논리 수학 조합 논리(combinatory logic) : 함수 조합의 이론적 배경 카테고리 이론(category theory) : 모나드 조..

    7장 비동기 콜백 함수

    이번 장은 비동기 API를 사용하는 코드를 쉽게 작성하게 하는 Promise 클래스와 async/await 구문에 대해 살펴보자 7-1 비동기 콜백 함수 이번 장은 노드제이에스가 제공하는 readFile과 같은 비동기 API를 예로 들고 있기 때문에 tsconfig.json 파일에 별도의 설정이 필요하다. // tsconfig.json { "compilerOptions": { "module": "commonjs", "esModuleInterop": true, "target": "es2015", "moduleResolution": "node", "outDir": "dist", "baseUrl": ".", "sourceMap": true, "downlevelIteration": true, // 이 부분을 t..

    6장 반복기와 생성기

    이번 장에서는 타입스크립트 언어가 제공하는 반복기와 반복기 제공자, 그리고 생성기에 대해 알아보자. 6-1 반복기 이해하기 실습 프로젝트 설정 이번 장에서 소개하는 예제는 Node.js 설정과 tsconfig.json 파일에 별도의 설정이 필요하다. 먼저 다음 명령을 터미널에서 실행하자. npm init -y npm i -D typescript ts-node @types/node mkdir src 다음, tsc —init 명령으로 tsconfig.json 파일을 생성하고 다음 내용으로 대체하자. // tsconfig.json { "compilerOptions": { "module": "commonjs", "esModuleInterop": true, "target": "es2015", "moduleReso..

    5장 배열과 튜플

    함수형 프로그래밍에서 배열은 매우 중요한 기능을 한다. 이번에는 순수 함수를 다루면서 배열과 튜플에 대해 살펴보자. 5-1 배열 이해하기 자바스크립트에서 배열은 Array 클래스의 인스턴스이며 다음처럼 선언한다. let 배열 이름 = new Array(배열 길이) 배열에 담긴 각각의 값을 아이템(item) 혹은 원소(element)라고 한다. [ ]단축구문 자바스크립트는 [ ]라는 단축 구문을 제공한다.. let numbers = [1,2,3]; let strings = ["Hello", "World"]; console.log(numbers, strings) // [1,2,3] ["Hello","World"] 자바스크립트에서 배열은 객체다 자바스크립트에서 배열은 다른 언어와 다르게 객체이다. 배열은 Ar..

    4장 함수와 메서드

    자바스크립트에서 함수는 function 키워드와 화살표 ⇒ 기호로 만드는 두 가지 방법이 있다. 타입스크립트 함수는 이를 바탕으로 타입 기능을 추가한 것이다. 이번 장은 함수를 효과적으로 구현하는 방법과 클래스의 메서드를 구현하는 방법을 알아보자. 4-1 함수 선언문 자바스크립트에서 함수는 function 키워드로 만드는 함수와 ⇒ 기호로 만드는 화살표 함수 두 가지 방법이 있다. 다음은 function 키워드로 만드는 함수 구조이다. function 함수이름(매개변수1, 매개변수2[,...]){ body } 타입스크립트 함수 선언문은 자바스크립트 함수 선언문에서 매개변수와 함수 반환 값에 타입 주석을 붙이는 형태로 구성된다. function 함수이름(매개변수:타입1, 매개변수:타입2[,...]):반환값..

    3장 객체와 타입

    3-1 타입스크립 변수 선언문 타입스크립트 기본 제공 타입 자바스크립트는 다음 표에서 보는 타입을 기본으로 제공한다. 타입스크립트는 자바스크립트와 호환성을 위해 자바스크립트 타입은 물론 그에 대응하는 타입스크립트 타입 도한 제공한다. 유형 자바스크립트 타입 타입스크립트 타입 수 타입 Number number 불리언타입 Boolean boolean 문자열 타입 String string 객체 타입 Object object let과 const 키워드 ES5 자바스크립트는 variable의 앞 에 글자를 딴 var라는 키워드를 사용해 변수를 선언할 수 있었다. 아지만 다른 프로그래밍 언어와는 다르게 동작하기 때문에 ESNext 자바스크립트는 let과 const라는 키워드를 도입해 다른 프로그래밍 언어와 같은 방..

    2장 타입스크립트 프로젝트 생성과 관리

    2-1 타입스크립 프로젝트 만들기 타입스크립트 개발은 노드제이에스 프로젝트를 만든 다음, 개발 언어를 타입스크립트로 설정하는 방식으로 진행. 노드제이에스 프로젝트는 디렉터리를 하나 만들고 여기에 package.json이란 이름의 파일을 만드는 것으로 시작한다. package.json은 노드제이에스가 관리하는 패키지 관리 파일로서 프로젝트 정보와 관련 패키지가 기록된다. 즉, 필요한 패키지를 관리할 수 있다. 프로젝트 생성자 관점에서 패키지 설치하기 npm install 혹은 npm i 명령으로 설치가능하다. 이때 패키지 설치 명령은 두 가지 옵션을 줄 수 있다. —save : 프로젝트를 실행할 대 필요한 패키지로 설치한다. 패키지 정보가 package.json dependencies 항목에 등록된다 —s..

    20장 코드 최적화 기법

    마지막 장에서는 코드 최적화 기법 몇 가지를 소개한다. 다음의 사고 전력 (mental strategy)은 지난 몇 년간 코드를 더 효율적으로 바꾸는 데 큰 역활을 했다. 20.1 전제 조건: 현재 빅 오 파악하기 최적화 기법으로 들어가기 전에 알고리즘 최적화에 앞서 반드시 해야 할 일은 현재 코드의 효율성을 파악하는 것이다. 즉, 현재 얼마나 빠른지 알아야 알고리즘을 더 빠르게 만들 수 있기 때문이다. 20.2 시작점: 상상할 수 있는 최상의 빅 오 “상상할 수 있는 최상의 빅 오”(가능한 최상의 실행 시간)를 생각하는 것은 모든 알고리즘에 유용하며, 반드시 최적화 프로세스의 첫 단계여야 한다. 배열의 각 항목을 출력하는 함수라면 항목 N개를 각각 처리해야 하므로 최상의 빅 오는 O(N)이다. 알고리즘..

    19장 공간 제약 다루기

    알고리즘의 효율성 척도에는 알고리즘이 얼마나 빠른지 시간 복잡도만 있는게 아니라 공간 복잡도 또한 존재한다. 즉, 알고리즘이 얼마나 많은 메모리를 소모하는가가 유용할 수 있다. 메모리 제한이 있다면 공간 복잡도가 중요한 요인이다. 대량의 데이터를 다루거나 메모리가 제한된 작은 장치를 프로그래밍할 때는 정말 중요하다. 19.1 공간 복잡도의 빅 오 시간 복잡도를 표현할 때와 마찬가지로 빅 오 표기법을 사용해 공간 복잡도를 표현한다. 공간 복잡도, 메모리 소모 관점에서 핵심 질문은 **“데이터 원소가 N개일 때 알고리즘은 메모리 단위를 얼마나 소모할까?”**이다 function makeUpperCase(array) { let newArray = []; for(let i = 0; i < array.length..