JS는 명령형, 함수형, 프로토타입 기반 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어 원시 값을 제외한 JS를 이루고 있는 모든 것이 객체이다 객체지향 프로그래밍 명령형 프로그래밍의 절차지향적 관점에서 벗어난, 여러 개의 독립적 단위, 즉 객체의 집합으로 프로그래밍을 표현하려는 패러다임 다양한 속성 중에서 필요한 속성을 간추려 내는 것을 추상화라 한다 속성을 통해 여러 개의 값을 하나의 단위로 구성한 복합 자료구조를 객체라고 한다 상태를 나타내는 데이터는 프로퍼티, 동작은 매서드 상속과 프로토타입 어떤 객체의 프로퍼티, 메서드를 다른 객체가 상속받아 그대로 사용할 수 있는 것 상속을 구현하여 불필요한 중복을 제거한다. function Circle(radius){ this.radius = ..
일급 객체 일급 객체란 무명의 리터럴로 생성할 수 있다. 즉 동적으로, 런타임에 생성이 가능하다. 변수나 자료구조(객체, 배열 등)에 저장할 수 있다. 함수의 매개변수에 전달할 수 있다. 함수의 반환값으로 사용할 수 있다. 함수는 일급 객체이다. 일반 객체와 동일하게 사용할 수 있다. 함수 객체의 프로퍼티 arguments 프로퍼티 arguments 프로퍼티의 값은 arguments 객체이다. 함수 호출 시 전달된 인수를 저장하는 순회 가능한 유사 배열 객체이다. 지역 변수처럼 사용된다. 매개변수의 개수보다 인수를 더 많이 전달한 경우 초과된 인수는 무시된다. 하지만 암묵적으로 arguments 객체의 프로퍼티로 보관된다. 매개변수 개수를 확정할 수 없는 가변 인자 함수를 구현할 때 유용하다. 유사 배열..
생성자 함수 객체 리터럴에 의한 객체 생성 방식의 문제점 동일한 프로퍼티를 갖는 객체를 여러 개 생성해야 하는 경우 같은 프로퍼티를 기술해야 하기 때문에 비효율적이다. 생성자 함수에 의한 객체 생성 방식의 장점 객체(인스턴스)를 생성하기 위한 템플릿(클래스)처럼 생성자 함수를 사용하여 프로퍼티 구조가 동일한 객체 여러 개를 간편하게 생성할 수 있다. function Circle(radius){ this.radius = radius; this.getDiameter = function () { return this.radius*2; } } const circle1 = new Cicle(5); cosnt circle2 = new Circle(10) 생성자 함수의 인스턴스 생성 과정 인스턴스 생성과 this 바..
내부 슬롯과 내부 메서드 내부 슬롯과 내부 메서드는 자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드다. 이중 대괄호 ([[…]]) 내부 슬롯과 내부 메서드다. 내부 슬롯과 내부 메서드에 직접적 접근하거나 호출할 수 있는 방법을 제공하지 않는다. 단 일부 내부 슬롯과 내부 메서드에 한하여 간접적으로 접근할 수 있는 수단을 제공하기는 한다. ex) [[Prototype]] 내부 슬롯은 __proto__를 통해 간접적으로 접근 가능. 프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체 자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티 상태를 나타내는 어트리뷰트를 기본값으로 자동 정의한다. 프로퍼티의 값 [[Value]] 값의 갱신 가능 여부 [[W..
let 키워드 변수 중복 선언 금지. 블록 레벨 스코프 변수 호이스팅 let 키워드로 선언한 변수는 변수 호이스팅이 발생하지 않는 것처럼 동작한다. 하지만 이는 아니다. let foo = 1; { console.log(foo) //Referenc Error let foo - 2; } b. 변수 호이스팅이 발생하여 위와 같은 결과가 나타난다. let 키워드로 선언한 변수는 “선언 단계”와 “초기화 단계”가 분리되어 진행된다. 스코프의 시작지점 부터 초기화 지점까지 변수를 참조할 수 없는 부분을 TDZ(Temporal Dead Zone)이라 한다. var 키워드로 선언한 전역변수, 전역 함수, 암묵적 전역은 전역 객체 window의 프로퍼티가 된다. 하지만 let 키워드로 선언한 전역 변수는 전역 객체의 프..
변수의 생명주기 변수는 호이스팅에 의해 가장 먼저 실행된다 전역 변수가 아닌 지역 변수일 경우, 함수가 실행된 직후 먼저 실행이 된다. 즉 지역 변수의 생명 주기는 함수의 생명 주기와 같다. 하지만 지역 변수가 함수보다 오래 생존하는 경우도 있다. 변수의 생명 주기는 메모리 공간의 확보 > 메모리 공간이 해체 > 가용 메모리 풀에 반환 되는 시점을 말한다. 따라서 변수는 자신이 등록된 스코프가 소멸(메모리 해체)될 때 까지 유효하다. 할당된 메모리 공간은 더 이상 그 누구도 참조하지 않을 때 가비지 콜렉터에 의해 해체> 가용 메모리 풀에 반환된다. 아래의 내용을 이해하자. var x = 'global' function foo(){ console.log(x); var x = 'local' } foo(); ..