자바스크립트
Currying function (커링 함수) 이란 무엇인가요?
Currying function 이란? 수학자 Haskell Curry 의 이름을 딴 함수입니다. 여러 개의 인자를 받는 함수를 단 하나의 인자만 받는 함수(unary) 로 만드는 과정을 커링(Currying) 이라고 합니다. 커링을 적용하려면, 여러 인자를 받는 함수(n-ary) 를 하나의 인자만 받는 함수 (unary) 로 변환해야 합니다. 커링 기본 개념 예제 const multiArgFunction = (a, b, c) => a + b + c; console.log(multiArgFunction(1, 2, 3)); // 6 const curryUnaryFunction = (a) => (b) => (c) => a + b + c; curryUnaryFunction(1); // returns a fun..
unary function 이란 무엇인가요?
unary function 이란? 인자를 단 하나만 받는 함수를 말한다. const unaryFunction = (a) => a + 10;
웹 개발자를 위한 자바스크립트의 모든 것 6장 이터러블, 이터레이터, 제너레이터
이터레이터(iterator) 란? next() 메서드가 있는 객체이다. next() 를 호출할 때마다 시퀀스의 다음 값과 완료 여부를 나타내는 플래그를 반환한다. 이터러블(ietrable) 이란? 이터레이터를 가져오는 표준 메서드가 있는 객체이다. Symbol.iterator 프로퍼티에서 iterator 를 반환하는 메서드를 구현하면 된다. 프로퍼티로 얻어오는 것이 아니라, 메서드로 얻어오는 이유는 매번 가장 첫번째 원소를 가리키는 iterator 를 반환하고 싶기 때문일 것이라 추측한다. 이터레이터 명시적으로 사용해보기 const a = ["a", "b", "c"]; const it = a[Symbol.iterator](); console.log("it", it); // Object [Array Ite..
Higher Order Function (고차함수) 란 무엇인가요?
Higher Order Function (HOF) 란 무엇인가요? 한국어로는 '고차함수' 라고 표현하며, 아래의 두가지 조건 중 하나라도 만족하면 고차함수라고 할 수 있습니다. 함수를 파라미터로 받는다. 함수를 반환한다. 고차함수를 사용하는 이유는 무엇인가요? 고차함수는 함수형 프로그래밍에 뿌리를 두고 있습니다. 함수형으로 코드를 작성하는데 필수적입니다. 함수형 프로그래밍에서는 사이드이펙트를 피하고 불변성을 지켜 에러를 최소화합니다. 그렇다면 함수형 프로그래밍의 장점은 무엇인가요? 보통 하나의 함수가 다른 함수에 의존하지 않아 코드를 변화시킬 때 사이드 이펙트에 대한 걱정이 덜합니다. 외부 요소에 의존하지 않아, 작성한 함수가 매번 같은 동작을 보장받습니다. 상태가 없다는 것은 동시성 프로그래밍에서 생기..
First Order Function (일차 함수) 란 무엇인가요?
first order function 이란 무엇인가요? 일차 함수로 불립니다. 함수의 파라미터로 함수를 받지 않아야 합니다. 함수의 결과로 함수가 나오지 않아야 합니다. const firstOrder = () => console.log("I am a first order function!");
First Class Function (일급 함수) 이란 무엇인가요
first class function 이란 무엇인가요 first class function 은 한국어로 번역했을 때, "일급 함수" 라고들 번역합니다. 특정 프로그래밍 언어에서 함수가 변수처럼 다뤄지는 경우, 이를 first class function, 일급 함수라고 합니다. 자바스크립트는 위에서 말한 특정 언어 중 하나입니다. 함수가 변수처럼 다뤄진다는 것은 아래와 같습니다. 함수를 특정 변수에 할당할 수 있습니다. 함수 호출의 인자로 함수를 넘길 수 있습니다. 함수를 반환할 수 있습니다. const a = () => { return "ABC"; }; // 변수에 함수를 할당 setTimeout(() => { console.log("HELLO"); }, 1000); // 함수의 인자로 함수를 넣음 co..
자바스크립트의 대표적인 함수 정의 문법 두가지에 대해 알고 있나요?
자바스크립트의 대표적인 함수 정의 문법 두가지에 대해 알고 있나요? function 키워드를 이용해 함수를 정의할 수 있습니다. 괄호와 중괄호만을 이용해 (() => {}) 화살표 함수라 불리는 arrow function 문법으로 함수를 정의할 수 있습니다. function 키워드로 함수를 선언하면 arrow function 과 어떤 점이 다른가요? function 키워드는 생성자로도 쓰일 수 있으며, prototype 프로퍼티를 갖습니다. function 키워드는 함수 선언에도 이용되지만, user-defined object 를 만드는데도 이용됩니다. new 연산자를 앞에 붙이고 해당 함수를 호출하면, prototype 의 constructor 를 호출하여 user-defined object 를 생성합..
== (non strict euality) 와 === (strict euality) 의 차이를 말해보세요.
== 와 === 의 차이 둘의 차이를 요약하자면, 묵시적으로 타입을 변환해서 비교하냐 (==) / 타입을 변환하지 않고 비교하냐 (===) 로 축약할 수 있다. == 을 사용하지 않고 === 만 사용하는 컨벤션 하나만 채용하더라도 수많은 버그의 가능성을 막을 수 있다. 동작을 예측하기 힘든 연산자나 키워드를 회피하는 전략이다. == (non strict equality operator) non strict equality operator, 엄격하지 않은 동등성 연산자라고 불린다. 타입 변환 동등성 비교 (type-converting equality comparison) 라고 말할 수 있다. 값 비교를 위해 타입 변환을 진행한 뒤에 값을 비교한다. 이 때문에, === 과 다르게 아래의 결과가 true 가 ..
자바스크립트의 Object 와 Map 의 차이점에 대해서 얘기해보세요.
Object 와 Map 비교 Object 는 이전부터 존재했다. 여러 필드와 그에 맞는 데이터, 메서드를 가진 '객체' 로서 사용되기 위해 만들어졌다. Map 은 ES6 에서 새롭게 도입되었다. key 와 value 쌍을 가진 데이터를 손쉽게 다루기 위한 것이 기본 목적이다. 차이 Object 와 Map 은 얼핏보면 Object 가 Map 의 상위호환으로 느껴질 수 있다. 그러나, Object 와 Map 은 특징에 따른 명백한 차이가 있다. 객체의 key 는 String 혹은 Symbol 만 가능하다. const obj1 = {}; const obj2 = {}; const o = { [obj1]: "obj1", [obj2]: "obj2", }; console.log(o); // {[obje..
웹 개발자를 위한 자바스크립트의 모든 것 5장 새로운 객체 기능
계산된 속성 이름 (computed property name) 계산된 속성 이름 (computed property name) 은 표현식의 결과를 프로퍼티의 이름으로 쓸 수 있게 해준다. 예제1 const name = "answer"; const obj = { [name]: 100, }; console.log(obj); 예제2: 작동 순서 알아보기 let counter = 0; const obj = { [counter++]: counter++, [counter++]: counter++, }; console.log(obj); // {"0": 1, "2": 3} 단축 속성 (shorthand property) 단축 속성 (shorthand property) 은 프로퍼티의 키와 값이 동일할 때 아래와 같이 표현..
전개 구문, 속성 스프레드 구문 (Spread Syntax) 이란?
전개 구문, 속성 스프레드 구문 (Spread Syntax) 이란? ... 이라는 표현을 통해, 오브젝트 내부의 요소들을 전개할 수 있다. iterable 한 오브젝트에 사용 가능하다. ex) string, array, {} 오브젝트 리터럴 ({}) 의 경우에는 enumerable 한 프로퍼티를 순회하는 형식이다. 생긴 건 Rest Syntax 와 흡사한데, 역할이 다르다. Rest Syntax 는 파라미터나 프로퍼티를 모으는 역할 이지만 Spread Syntax 는 오브젝트 내부의 요소들을 하나씩 늘어뜨리는 역할이다. 다른 객체의 속성이 모두 포함된 객체를 만들 때 유용하다. "불변" 방식으로 프로그래밍할 때 일반적이다. null 이나 undefined 가 뒤에 와도 에러를 내뱉지 않는다. 의도된 것이..
자바스크립트 Object.assign() 메서드란?
Object.assign() 이란? target 이 된 오브젝트에 source 오브젝트의 프로퍼티 내용을 덧씌우고 싶을 때 유용한 메서드이다. 단, enumerable own properties 만 복사되므로 유의해야 한다. 새로운 객체를 만드는 방식이 아닌, 기존의 객체를 수정하는 방식으로 불변 작업이 아니다. 예제 코드들 const defaultOptions = { title: "ABC", text: "default text", }; const customOptions = { text: "custom text", }; const finalOptions = Object.assign({}, defaultOptions, customOptions); console.log(finalOptions); // {t..