본문 바로가기

전체 글

(59)
[모던 자바스크립트 Deep Dive] 19 프로토타입 자바스크립트는 명령형 imperative, 함수형 functional, 프로토타입 기반 prototype-based, 객체지향 프로그래밍 OOP; Object Oriented Programming을 지원하는 멀티 패러다임 프로그래밍 언어 ES6에서 클래스 도입. 클래스는 생성자 함수보다 엄격하며 생성자 함수에서는 제공하지 않는 기능도 제공 객체지향 프로그래밍 객체지향 프로그래밍은 프로그램을 명령어 또는 함수의 목록으로 보느 전통적인 명령형 프로그래밍 imperative programming의 절차지향적 관점에서 벗어나 여러 개의 독립적인 단위, 즉 객체 object의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임 실체는 특징이나 성질을 나타내는 속성 attribute/property를 가지고 있고, ..
[모던 자바스크립트 Deep Dive] 18 함수와 일급 객체 일급 객체의 조건 무명의 리터럴로 생성 가능. 즉, 런타임에 생성이 가능 변수나 자료구조(객체, 배열 등)에 저장 가능 함수의 매개변수에 전달 가능 함수의 반환 값으로 사용 가능 // 1. 함수는 무명의 리터럴로 생성 가능 // 2. 함수는 변수에 저장 가능 // 런타임(할당 단계)에 함수 리터럴이 평가되어 함수 객체가 생성되고 변수에 할당 const increase = function (num) { return ++num; }; const decrease = function (num) { return --num; }; // 2. 함수는 객체에 저장 가능 const auxs = { increase, decrease }; // 3. 함수의 매개변수에 전달 가능 // 4. 함수의 반환 값으로 사용 가능 fu..
[모던 자바스크립트 Deep Dive] 17 생성자 함수에 의한 객체 생성 Object 생성자 함수 생성자 함수 constructor란 new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수 생성자 함수에 의해서 생성된 객체를 인스턴스 instance라 함 new 연산자와 함께 Object 생성자 함수를 호출하면 빈 객체를 생성하여 반환 Object 외에도 String, Number, Boolean, Function, Array, Date, RegExp, Promise 등의 빌트인 생성자 함수 제공 // 빈 객체의 생성 const person = new Object(); // 프로퍼티 추가 person.name = "Jin"; person.sayHello = function () { console.log("Hi! My name is " + this.name); }; co..
[모던 자바스크립트 Deep Dive] 16 프로퍼티 어트리뷰트 내부 슬롯과 내부 메서드 내부 슬롯 internal slot과 내부 메서드 internal method는 자바스크립트 엔지의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에 사용하는 의사 프로퍼티 pseudo property와 의사 메서드 pseudo method ECMASciprt 사양에 등장하는 이중 대괄호([[...]])로 감싼 이름에 해당 자바스크립트의 내부 로직이므로 원칙적으로 내부 슬롯과 내부 메서드에 직접적으로 접근하거나 호출할 수 있는 방법을 제공하지는 않음 (일부에 한하여 간접적으로 접근 가능) const o = {}; // 내부 슬롯은 직접 접근 불가능 o.[[Prototype]] // SyntaxError // 일부에 한해 간접적으로 접근 가능 o.__proto__; // O..
[모던 자바스크립트 Deep Dive] 15 let, const 키워드와 블록 레벨 스코프 var 키워드로 선언한 변수의 문제점 변수 중복 선언 허용 var 키워드로 선언한 변수는 중복 선언 가능 선언한 변수를 중복 선언하면 초기화문이 있는 변수 선언문은 var 키워드가 없는 것처럼 동작 초기화문이 없는 변수 선언문은 무시되고 에러 발생되지 않음 var x = 1; var y = 1; // var 키워드로 선언된 변수는 같은 스코프 내에서 중복 선언 허용 // 초기화문이 있는 경우: var 키워드가 없는 것처럼 동작 var x = 100; console.log(x); // 100 // 초기화문이 없는 경우: 변수 선언문 무시 var y; console.log(y); // 1 함수 레벨 스코프 var 키워드로 선언한 변수는 오로지 함수의 코드 블록만을 지역 스코프로 인정 var x = 1; //..
[모던 자바스크립트 Deep Dive] 14 전역 변수의 문제점 전역 변수의 무분별한 사용은 위험 전역 변수를 반드시 사용해야할 이유를 찾기 못한다면 지역 변수를 사용해야 함 변수의 생명 주기 지역 변수의 생명 주기 일반적으로 지역 변수의 생명 주기는 함수의 생명 주기와 일치 변수의 생명 주기는 메모리 공간이 확보 allocate된 시점부터 메모리 공간이 해체 release되어 가용 메모리 풀 memory pool에 반환되는 시점 지역 변수의 스코프가 함수 종료 이후에도 참조되고 있다면 스코프는 해체되지 않고 생존, 지역 변수는 함수가 생성한 스코프에 등록되므로 해당 경우에는 함수가 종료되더라도 지역 변수가 생존할 수 있음 호이스팅은 스코프 단위로 동작. 변수 선언이 스코프의 선두로 올려진 것처럼 동작하게 됨 function foo() { var x = "local"..
[모던 자바스크립트 Deep Dive] 13 스코프 스코프란? 스코프 scope (유효범위): 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정, 식별자가 유효한 범위 식별자를 검색할 때 사용하는 규칙 네임스페이스 식별자 결정 identifier resolution: 자바스크립트 엔진이 이름이 같은 두 개의 변수 중에서 어떤 변수를 참조해야할 것인지 결정 식별자는 어떤 값을 구별할 수 있으므로 유일 unique 해야함, 즉 하나의 값은 유일한 식별자에 연결 name binding 되어야 함 var var1 = 1; // 코드의 가장 바깥에서 선언한 변수 if (true) { var var2 = 2; // 코드 블록 내에서 선언한 변수 if (true) { var..
[모던 자바스크립트 Deep Dive] 12 함수 수학의 함수: 입력을 받아 출력을 내보내는 일련의 과정 프로그래밍의 함수: 일련의 과정을 문 statement로 구현하고, 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것 함수의 구성 요소 매개변수 parameter: 함수 내부로 입력을 전달받는 변수 인수 argument: 입력 출력 return value: 출력 함수는 함수 정의 function definition을 통해 생성 함수 호출 function call/invoke: 인수를 매개 변수를 통해 함수에 전달하면서 함수의 실행을 명시적으로 지시 // 함수 정의 function add(x, y) { return x + y; } // 함수 호출 add(2, 5); 함수를 사용하는 이유 코드의 재사용 유지보수의 편의성 코드의 신뢰성 코드의 가독성 함..