본문 바로가기

분류 전체보기

(894)
[Deep dive] 19장 프로토타입 (1) 19.1 객체지향 프로그래밍 - 객체(object)의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임 - 객체의 상태를 나타내는 데이터와 상태 데이터를 조작할 수 있는 동작을 하나의 논리적인 단위로 묶어서 생각하는 것 - 각 객체는 자신의 고유한 기능을 수행하면서 다른 객체와의 관계성(relationship)을 가질 수 있다. - 프로퍼티(property) : 객체의 상태 데이터 - 메서드 (method) : 객체의 동작 추상화(abstraction) - 다양한 속성 중에서 프로그램에 필요한 속성만 간추려 표현 ex) "이름"과 "주소"라는 속성을 갖는 person 객체 //이름과 주소 속성을 갖는 객체 const person = { name : 'Lee', address : 'Seoul' }; con..
[Deep dive] 18장 함수와 일급객체 18.1 일급 객체 일급 객체 조건 1) 무명의 리터럴로 생성할 수 있다. 즉, 런타임에 생성이 가능하다 2) 변수나 자료구조(객체,배열 등)에 저장할 수 있다. 3) 함수의 매개변수에 전달할 수 있다. 4) 함수의 반환값으로 사용할 수 있다. - 자바스크립트의 함수는 조건을 만족하므로 일급 객체이다. 1) 함수의 매개변수에 전달 가능 2) 함수의 반환값으로 사용 가능 3) 함수 객체는 호출 가능 4) 일반 객체에는 없는 함수 고유의 프로퍼티 소유 //1.함수는 무명의 리터럴로 생성할 수 있다. //2. 함수는 변수에 저장할 수 있다. //런타임(할당 단계)에 함수 리터럴이 평가되어 함수 객체가 생성되고 변수에 할당한다. const increase = function (num) { return ++num..
[Deep dive] 17장 생성자 함수에 의한 객체 생성 17.1 Object 생성자 함수 생성자 함수 (constructor) - new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수 인스턴스(instance) - 생성자 함수에 의해 생성된 객체 - new 연산자와 함께 Object 생성자 함수를 호출하면 빈 객체를 생성하여 반환 //빈 객체의 생성 const person = new Object(); //프로퍼티 추가 person.name = 'Lee'; person.sayHello = function () { console.log('Hi! My name is' + this.name); }; console.log(person); //{ name: 'Lee', sayHello: [Function (anonymous)] }] person.sayHello..
[Deep dive] 16장 프로퍼티 어트리뷰트 16.1 내부 슬롯과 내부 메서드 - 자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ESMAScript 사양에서 사용하는 의사 프로피터와 의사 메서드 - 자바스크립트 엔진의 내부로직이므로 개발자가 직접 접근 불가 - 일부 내부 슬롯과 내부 메서드에 한하여 간접적으로 접근할 수 있는 수단 제공 ex) - 모든 객체는 [[Prototype]]이라는 내부 슬롯을 가짐 - [[Prototype]]은 __proto__를 통해 간접적으로 접근 가능 const o = {}; 0.__proto__ //object.prototype 16.2 프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체 - 자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동정의 프로퍼티 어트리뷰트..
[Deep dive] 15장 let,const 키워드와 블록 레벨 스코프 15.1 var 키워드로 선언한 변수의 문제점 1) 변수 중복 선언 허용 - var 키워드로 선언한 변수는 중복 선언이 가능 - 의도치 않게 먼저 선언된 변수 값이 변경되는 부작용 발생 2) 함수 레벨 스코프 - var 키워드로 선언한 변수는 오로지 함수의 코드 블록만을 지역 스코프로 허용 - var키워드로 선언한 변수는 코드 블록 내에서 선언해도 모두 전역 변수가 됨 3) 변수 호이스팅 - var 키워드로 선언한 변수는 변수 호이스팅에 의해 변수 선언문 이전에 참조 가능 - 할당문 이전에 변수를 참조하면 언제나 undefined 반환 - "선언단계"와 "초기화 단계"가 동시에 진행 //이 시점엔는 변수 호이스팅에 의해 이미 foo 변수가 선언됨 (1.선언단계) //변수 foo는 undefined로 초기..
[Deep dive] 14장 전역 변수의 문제점 14.1 변수의 생명 주기 - 메모리 공간이 확보(allocate)된 시점부터 메모리 공간이 해제(release)되어 가용 메모리 풀(memory pool)에 반환되는 시점까지 14.1.1 지역 변수의 생명주기 - 함수 내부에서 선언된 지역 변수는 함수가 호출되면 생성되고 함수가 종료하며 소멸함 - 함수 내부에서 선언한 변수는 함수가 호출된 직후에 함수 몸체의 코드가 한줄씩 순차적으로 실행되기 이전에 자바스크립트 엔진에 의해 먼저 실행 - 지역 변수의 생명 주기는 함수의 생명 주기와 일치 - 지역 변수가 함수보다 오래 생존하는 경우도 있음 - 누군가가 메모리 공간을 참조하고 있으면 해제되지 않고 확보된 상태로 남아 있게됨 var x = 'global'; function foo () { //지역 변수 x는..
[Deep dive] 13장 스코프 13.1 스코프란? 스코프(scope) - 식별자가 유효한 범위 - 스코프(유효범위)를 통해 식별자인 변수 이름의 충돌을 방지하여 같은 이름의 변수를 사용 가능하게 함 식별자 결정 (identifier resolution) - 자바스크립트 엔진은 이름이 같은 두 개의 변수 중에서 어떤 변수를 참조해야 할 것인지 결정해야함 - 자바스크립트 엔진이 식별자를 검색할 때 사용하는 규칙 - 자바스크립트 엔진은 코드를 실행할 때 코드의 문맥(context)을 고려함 var x = 'global'; function foo() { var x = 'local'; console.log(x); //local } foo(); console.log(x); //global - 코드의 가장 바깥 영역의 선언된 x 변수는 어디서든 ..
[Deep dive] 12장 함수(2) 12.5 참조에 의한 전달과 외부 상태 변경 - changeVal 함수는 매개변수를 통해 전달받은 원시 타입 인수와 객체 타입 인수를 함수 몸체에서 변경 //매개 변수 primitive는 원시 값을 전달받고, 매개변수 obj는 객체를 전달받음 function changeVal(primitive, obj) { primitive += 100; obj.name = 'Kim'; } //외부 상태 var num = 100; var person = {name : 'Lee'}; console.log(num); //100 console.log(person); // {name : "Lee"} //원시 값은 값 자체가 복사되어 전달되고 객체는 참조 값이 복사되어 전달된다. changeVal(num, person); //원..