# 프로퍼티 attribute
자바스크립트 엔진은 프로퍼티를 생성할 때
프로퍼티의 상태를 나타내는 프로퍼티 attribute를
기본값으로 자동 정의한다.
# 함수 일급객체
다음 조건을 만족하는 객체를 일급객체라 한다.
- 무명의 리터럴로 생성할 수 있다. 런타임에 생성이 가능하다.
- 변수나 자료구조(객체, 배열)에 저장할 수 있다.
- 함수의 매개변수에 전달할 수 있다.
- 함수의 반환값으로 사용할 수 있다.
# 객체란?
객체는 상태 데이터와 동작을 하나의 논리적인 단위로
묶어 놓은 복합적인 자료주고라고 할 수 있다.
객체의 상태 데이터를 프로퍼티, 동작을 메서드라 부른다.
생성자 함수의 프로토타입은 상속을 위해 사용된다.
모든 객체는 __proto__ 접근자 프로퍼티를 통해
자신의 프로토타입, 즉 [[Prototype]] 내부슬롯에
간접적으로 접근할 수 있다.
__proto__ 는 접근자 프로퍼티다.
생성자 함수로서 호출할 수 있는 함수 즉 constructor는
함수 정의가 평가되어 함수 객체를 생성하는 시점에
프로토타입도 더불어 생성된다.
프로토타입 체인
자바스크립트는 객체의 프로퍼티(메서드 포함)에 접근하려고
할 때, 해당 객체에 접근하려는 프로퍼티가 없다면
[[Prototype]] 내부 슬롯의 참조를 따라 자신의 부모 역할을
하는 프로토타입의 프로퍼티를 순차적으로 검색한다.
이를 프로토타입 체인이라고 부른다. 프로토타입 체인은
자바스크립트가 객체지향 프로그래밍의 상속을 구현하는
메커니즘이다.
프로퍼티 섀도잉
인스턴스 프로퍼티로 프로토타입 프로토타입을 오버라이딩
하는 과정을 프로퍼티 섀도잉이라 부른다. 상속관계에서
프로퍼티가 가려지는 현상이다.
오버라이딩이란 상위 클래스가 가지고 있는 메서드를
하위클래스에서 재정의하여 사용하는 방식이다.
오버로딩이란 함수의 이름은 동일하지만, 매개변수의
타입 또는 개수가 다른 메서드를 구현하고 매개변수에 의해 메서드를
구별하여 호출하는 방식이다. 자바스크립트는 오버로딩을
지원하지 않는다. 다만 arguments객체를 사용하여 구현할 수 있다.
빌트인 객체
자바스크립트 객체는 3가지로 분류된다.
- 표준 빌트인 객체 : 애플리케이션 전역의 공통 기능을 제공한다. 별도의 선언없이 전역 변수처럼 사용할 수 있다.
- 호스트 객체 : ECMAScript에는 정의되어 있지 않지만 자바스크립트 실행환경에서 추가로 제공하는 객체
- 사용자 정의 객체 : 기본 제공되는 객체가 아닌 사용자가 직접 정의한 객체를 의미한다.
문자열, 숫자, 불리언 값에 대해 객체처럼 접근하면 생성되는 임시 객체를 Wrapper 객체라 한다.
this KEYWORD
this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수
self-referencing variables 이다. this를 통해 자신이 속한 객체 또는 자신이 생성할
인스턴스의 프로퍼티나 메서드를 참조할 수 있다.
자바스크립트에서는 this가 함수가 호출되는 방식에 따라 this에 바인딩 될 값, 즉
this바인딩이 동적으로 결정된다.
일반적으로 일반 함수로 호출된 모든 함수(중첩 함수, 콜백 함수) 내부의 this에는
전역객체가 바인딩된다.
함수 호출 방식 | this 바인딩 |
일반 함수 호출 | 전역 객체 |
메서드 호출 | 메서드를 호출한 객체 |
생성자 함수 호출 | 생성자 함수가(미래에) 생성할 인스턴스 |
Function.prototype.apply/call/bind 메서드에 의한 간접 호출 | Function.aprototype.apply/call/bind 메서드에 첫번째 인수로 전달한 객체 |
실행 컨텍스트
실행 컨텍스트는 소스코드를 실행하는 데 필요한 환경을
제공하고 코드의 실행 결과를 실제로 관리하는 영역이다.
실행 컨텍스트는 식별자(변수, 함수, 클래스 등의 이름)을
등록하고 관리하는 스코프와 코드 실행 순서 관리를 구현한
내부 메커니즘이다.
모든 코드는 실행 컨텐스트를 통해 실행되고 관리된다.
소스 코드 타입 |
전역 코드 global code |
함수 코드 function code |
eval 코드 eval code |
모듈 코드 module code |
실행 컨텍스트는 스택 자료구조로 관리된다. 실행컨텍스트 스택.
렉시컬 스코프
자바스크립트 엔진은 함수를 어디서 호출했는가가 아니라
함수를 어디에 정의했는지에 따라서 상위 스코프를 결정한다.
이를 렉시컬 스코프(정적 스코프)라 한다.
'Programming > JavaScript' 카테고리의 다른 글
JavaScript 객체 생성방식의 종류? (0) | 2021.10.29 |
---|---|
JavaScript 프로토타입이란 (0) | 2021.10.29 |
JavaScript global variable을 최소로 사용해야 하는 이유 (0) | 2021.10.27 |
JavaScript 기초 문법 #5 let, const 변수 (0) | 2021.10.20 |
JavaScript 기초 문법 #4 함수 스코프, 전역변수 문제점 (0) | 2021.10.20 |
JavaScript 기초 문법 #3 제어문, 객체, 함수 (0) | 2021.10.14 |
댓글