분류 전체보기
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..
Prefix Sum 기법 배워보기
Prefix sum Prefix sum 기법은 배열의 부분 합을 미리 구해놓고 계산의 횟수를 줄이는 기법이다. ex) [1, 2, 3, 4, 5] 이라는 배열이 있다면, 각 부분합인 [1, 3, 6, 10, 15] 를 저장해둔다. Prefix sum 을 미리 구해둔 상태에서 아래와 같은 계산을 쉽게 할 수 있다. 1~5 까지의 합 - 1~3 까지의 합 을 구하라고 한다면, 각각을 다시 반복문으로 반복할 필요 없이 15 - 6 을 구하면 된다. (15가 15까지의 합, 6이 13까지의 합이기 때문) 원본 배열에서 인덱스 2번부터 4번까지의 합(sum(array[2], array[3], array[4]))을 구하라고 한다면, prefixSum[4] - prefixSum[2] 로 쉽게 구할 수 있다. 하나의 ..
웹 개발자를 위한 자바스크립트의 모든 것 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..
자바스크립트 오브젝트 프로퍼티의 순서
오브젝트 프로퍼티의 순서 자바스크립트 오브젝트 프로퍼티에 순서가 있다. 자바스크립트는 이를 이용해 배열을 구현한다. 배열은 사실 length 속성을 가진 객체이다. 객체 프로퍼티 정렬 규칙 객체의 프로퍼티는 아래의 우선순위를 갖고 정렬된다. 1: 숫자 오름차순으로 정렬된다. 2: 문자열 생성된 순서대로 정렬된다. 3: 심볼 생성된 순서대로 정렬된다. const obj = { 2: "b", 3: "c", 1: "a", }; obj["test3"] = "test3"; obj["test1"] = "test1"; obj["test5"] = "test5"; obj[Symbol.for("test")] = "test symbol"; obj[0] = "zero"; console.log(obj); // {0: '..
Object.prototype.valueOf() 란?
Object.prototype.valueOf() 란? Object 에서는 기본 동작으로 this 를 Object 형태로 변환해 반환한다. 기본 정의를 오버라이드하여 쓰는 경우가 많다. 보통은 자바스크립트에서 오브젝트를 primitive value 로 변환하기 위해 사용하는 메서드이다. 직접 호출하는 경우는 드물고 보통은 자동으로 호출된다. const o = {}; const str = "test string"; console.log(Object.prototype.valueOf.call(o)); // {} console.log(Object.prototype.valueOf.call(str)); // String {'test string'} console.log(new Object(str)); ..
자바스크립트의 Symbol.toPrimitive 란?
Symbol.toPrimitive 란? 잘 알려진 심볼 중 하나이다. 강제 타입변환 시에 타입변환 힌트를 받아들이고, 어떤 원시 타입을 반환할지에 대한 메서드를 정의할 수 있다. 객체를 primitive value 로 변경하는 강력한 방법을 제공한다. JS 에서는 다양한 경우에 값을 강제로 변환한다. ex) +object 인 경우 숫자로 강제 변환한다. String(object) 인 경우엔 문자열로 변환한다. 내부적으로 hint 라는 인자를 받게 된다. number, string, default 중 하나를 받아 선호하는 타입이 무엇인지 체크할 수 있다. 모든 타입 변환 알고리즘에서 우선순위를 갖는다. toString() 이나 valueOf() 보다 앞선 우선순위를 갖는다. toString() 은 해당 타..