Javascript 32

모던 자바스크립트 Deep Dive 읽기 - 27장 : 배열

배열은 여러 개의 값을 순차적으로 나열한 자료구조이다. C Family 언어와 유사하게 자바스크립트의 배열도 요소와 인덱스, 길이를 가진다. 그러나 자바스크립트의 배열은 배열이 아니다. 자료구조에서 말하는 배열은 동일한 크기의 메모리 공간이 빈틈없이 연속적으로 나열된 자료구조를 말한다. 그러나 자바스크립트의 배열은 동일한 크기를 갖지 않아도 되며, 연속적으로 이어져 있지 않을 수도 있는 희소 배열의 성질을 가지고 있다. 따라서 자바스크립트의 배열은 일반적인 배열의 동작을 흉내 낸 특수한 객체이다. 객체와 마찬가지로 배열도 다양한 생성 방식이 있다. 리터럴, Array 생성자 함수, Array.of, Array.from 등을 사용할 수 있다. 배열의 요소를 참조할 때는 대괄호 표기법을 사용한다. 배열은 사..

Javascript 2022.04.07

모던 자바스크립트 Deep Dive 읽기 - 26장 : ES6 함수의 추가 기능

ES6 이전의 모든 함수는 일반 함수로서 호출할 수 있는 것은 물론 생성자 함수로서 호출할 수 있다. 그러나 객체에 바인딩된 함수나 보조 함수의 기능을 수행하는 콜백 함수도 생성자 함수로서 호출할 수 있는 것은 불필요한 프로토타입 객체를 생성한다. 이는 혼란스러우며 실수를 유발할 가능성이 있고 성능에도 좋지 않다. 이러한 문제를 해결하기 위해 ES6는 메서드와 화살표 함수를 도입했다. ES6에서 메서드는 축약 표현으로 정의된 함수만을 의미한다. const odj = { (...) foo () {(...)} ;//메서드 ES6에서 정의된 메서드는 인스턴스를 생성할 수 없는 non-constructor다. 따라서 메서드는 생성자 함수로서 호출할 수 없다. ES6 메서드는 자신을 바인딩한 객체를 가리키는 내부..

Javascript 2022.04.07

모던 자바스크립트 Deep Dive 읽기 - 25장 : 클래스

자바스크립트는 프로토타입 기반 객체지향 언어이다. 프로토타입 기반 객체지향 언어는 클래스가 필요 없는 객체지향 프로그래밍 언어다. 생성자 함수와 프로토타입을 통해 객체지향 언어의 상속을 구현할 수 있다. 그러나 클래스 기반 언어에 익숙한 프로그래머들은 프로토타입 기반 프로그래밍 언어에 혼란을 느낀다. ES6에 도입된 클래스는 그러한 배경을 통해 등장하였다. 클래스와 생성자 함수는 모드 프로토타입 기반의 인스턴스를 생성하지만 정확히 동일하게 동작하지는 않는다. 클래스는 생성자 함수보다 엄격하며, 생성자 함수에서는 제공하지 않는 기능도 제공한다. 클래스는 생성자 함수와 매우 유사하게 동작하지만, 다음과 같이 몇 가지 차이가 있다. 1. 클래스를 new 연산자 없이 호출하면 에러가 발생한다. 2. 클래스는 상..

Javascript 2022.04.07

모던 자바스크립트 Deep Dive 읽기 - 24장 : 클로저

클로저는 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어에서 사용되는 중요한 특성이다. 자바스크립트 엔진은 렉시컬 스코프를 따른다. 따라서 함수를 어디서 호출했는지가 아니라 함수를 어디에 정의했는지에 따라 상위 스코프를 결정한다. 함수가 정의된 환경과 호출되는 환경은 다를 수 있다. 렉시컬 스코프가 가능하기 위해서 함수는 자신이 정의된 환경을 기억해야 한다. 이를 위해 함수는 자신의 내부 슬롯에 상위 스코프의 참조를 저장한다. 함수 객체는 이 내부 슬롯에 자신이 존재하는 한 저장한 렉시컬 환경의 참조를 기억한다. const x = 1; // ① function outer() { const x = 10; const inner = function () { console.log(x); }; // ② ret..

Javascript 2022.04.07

모던 자바스크립트 Deep Dive 읽기 - 23장 : 실행 컨텍스트

실행 컨텍스트는 자바스크립트의 동작 원리를 담고 있는 핵심 개념이다. ECMAScript 사양은 소스코드를 전역 코드, 함수 코드, eval 코드, 모듈 코드의 4가지 타입으로 구분한다. 4가지 타입의 소스코드는 실행 컨텍스트를 생성한다. 소스코드의 타입이 구분되는 이유는 타입에 따라 생성 관리가 다르기 때문이다. 전역 코드는 최상위 스코프인 전역 스코프를 생성하고, 전역 변수와 전역 함수를 바인딩한다. 함수 코드는 지역 스코프를 생성하고 전역 스코프에서 시작하는 스코프 체인을 형성한다. eval 코드는 자신만의 독자적인 스코프를 생성한다. 모듈 코드는 모듈별로 독립적인 스코프를 생성한다. 모든 소스코드는 실행에 앞서 평가되며 평가 과정에서는 선언문만 먼저 실행되어 생성된 변수나 함수 식별자를 실행 컨텍..

Javascript 2022.04.07

모던 자바스크립트 Deep Dive 읽기 - 22장 : this

객체의 메서드는 자신이 속한 객체의 상태, 즉 프로퍼티를 참조하고 변경할 수 있어야 한다. 자신이 속한 객체의 프로퍼티를 참조하기 위해, 자신이 속한 객체를 가리키는 식별자를 참조해야 한다. this는 자신이 속한 객체, 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수이다. this는 자바스크립트 엔진에 의해 암묵적으로 생성되며 함수 내부에서 지역 변수처럼 사용할 수 있다. 단, this가 가리키는 값, 즉 this 바인딩은 함수 호출 방식에 의해 동적으로 결정된다. 객체 리터럴의 매서드 내부에서 this는, 메서드를 호출한 객체(. 앞의 식별자)를 가리킨다. 생성자 함수 내부의 this는 생성자 함수가 생성할 인스턴스를 가리킨다. 이처럼 this는 상황에 따라 가리키는 대상이 다르다. 함수에서의..

Javascript 2022.04.07

(Javascript) 백준 15649번 : N과 M (1)

https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수..

모던 자바스크립트 Deep Dive 읽기 - 21장 : 빌트인 객체

자바스크립트의 객체는 크게 표준 빌트인 객체, 호스트 객체, 사용자 정의 객체의 세 종류로 분류가 가능하다. 자바스크립트는 Object, String, Number, Boolean, Symbol, Date, Math 등 40여 개의 표준 빌트인 객체를 제공한다. https://developer.mozilla.org/ko/docs/Glossary/Global_object 전역 객체 - 용어 사전 | MDN 전역 객체 object 는 전역 범위 global scope (en-US) 에 항상 존재하는 객체를 의미합니다. developer.mozilla.org Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 함수 객체이다. 생성자 함수인 표준 빌트인 객체가..

Javascript 2022.04.06

모던 자바스크립트 Deep Dive 읽기 - 20장 : strict mode

strict mode란 자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 자바스크립트 엔진의 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시키는 모드이다. strict mode를 적용하려면 전역의 선두 또는 함수 몸체의 선두에 use strict를 추가한다. 그러나 전역의 선두에 추가하는 strict mode는 스크립트 단위로 적용되기 때문에 사용을 피해야 한다. 함수 단위로 사용하는 것도 참조 과정에서 문제가 생기며, 즉시 실행 함수로 감싼 스크립트 단위로 적용하는 것이 바람직하다. strict mode는 암묵적 전역, 함수 변수 매개변수의 삭제, 매개변수 이름의 중복, with문의 사용을 방지한다. 또한 일반 함수의 this 바인딩을 undefined..

Javascript 2022.04.06

(Javascript) 백준 1644번 : 소수의 연속합

https://www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 문제 하나 이상의 연속된 소수의 합으로 나타낼 수 있는 자연수들이 있다. 몇 가지 자연수의 예를 들어 보면 다음과 같다. 3 : 3 (한 가지) 41 : 2+3+5+7+11+13 = 11+13+17 = 41 (세 가지) 53 : 5+7+11+13+17 = 53 (두 가지) 하지만 연속된 소수의 합으로 나타낼 수 없는 자연수들도 있는데, 20이 그 예이다. 7+13을 계산하면 20이 되기는 하나 7과 13이 연속이 아니기에 적합한 표현이 아니다. 또한 한 소수는 반드시 한 번만 덧셈에 사용될 수 있기 때문에, 3+5+..

728x90