클래스 ES6의 클래스가 기존의 프로토타입 기반 객체지향 모델을 폐지하고 새롭게 클래스 기반 객체지향 모델을 제공하는 것은 아니다. 사실 클래스는 함수이며 기존 프로토타입 기반 패턴을 클래스 기반 패턴처럼 사용할 수 있도록 하는 문법적 설탕이다. 아니 새로운 객체 생성 메커니즘이다. 클래스는 생성자 함수와 매우 유사하게 동작하지만 몇가지 차이가 있다. 1. 클래스를 new 연산자 없이 호출하면 에러가 발생한다. 2. 클래스는 상속을 지원하는 extends와 super 키워드를 제공한다. 하지만 생성자 함수는 extends와 super 키워드를 지원하지 않는다. 3. 클래스는 호이스팅이 발생하지 않는 것처럼 동작한다. 하지만 함수 선언문으로 정의된 생성자 함수는 함수 호이스팅이 함수 표현식으로 정의한 생성..
실행 컨텍스트 ECMAScript 사양은 소스코드를 4가지 타입으로 구분한다. 4가지 타입의 소스코드는 실행 컨텍스트를 생성한다. 전역 코드, 함수 코드, eval 코드, 모듈 코드 모든 소스코드는 소스코드의 평가와 소스코드의 실행으로 나누어 처리한다. var x=1 => 평가 : x : undefined, 실행 : x : 1 전역 코드 평가 => 전역 코드 실행 => 함수 코드 평가 => 함수 코드 실행 실행 컨텍스트는 소스코드를 실행하는 데 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역 즉, 실행 컨텍스트는 식별자(변수, 함수, 클래스)를 등록하고 관리하는 스코프와 코드 실행 순서 관리를 구현한 내부 메커니즘으로, 모든 코드는 실행 컨텍스트를 통해 실행되고 관리된다. 식별자와 스코프..
strict mode strict mode는 자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킨다. ESLint 같은 린트 도구를 사용해도 좋다. 적용하려면 'use strict';를 추가 전역에 strict mode를 적용하는 것은 추천하지 않는다. 대신 즉시 실행 함수의 선두에 use strict를 적용하자 // 즉시 실행 함수의 선두에 strict mode 적용 (function () { 'use strict'; // Do something... }()); strict mode가 발생시키는 에러 1. 암묵적 전역 2. 변수, 함수, 매개변수의 삭제 3. 매개변수 이름의 중복 ..
프로토타입 1. 객체지향 프로그래밍 객체지향 프로그래밍은 프로그램을 명령어 또는 함수의 목록으로 보는 전통적인 명령어 프로그래밍의 절차지향적 관점에서 벗어나 여러 개의 독립적 단위, 즉 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임을 말한다. 추상화 : 다양한 속성 중에서 프로그램에 필요한 속성만 간추려 내어 표현하는 것 속성을 통해 여러 개의 값을 하나의 단위로 구성한 복합적인 자료구조를 객체라 한다. 객체지향 프로그래밍은 객체의 상태(state)를 나타내는 데이터와 상태 데이터를 조작할 수 있는 동작(behavior)을 하나의 논리적인 단위로 묶어 생각한다. 따라서 객체는 상태 데이터와 동작을 하나의 논리적인 단위로 묶은 복합적인 자료구조라고 할 수 있다. 이때 객체의 상태 데이터를 프로퍼..
객체 리터럴 객체는 변경 가능(mutable)한 값이다. 객체는 프로퍼티(프로퍼티 키, 프로퍼티 값)와 메서드로 구성된다. 자바스크립트는 프로토타입 기반 객체지향 언어다. 따라서 다양한 객체 생성 방법을 가진다. 1. 객체 리터럴 2. Object 생성자 함수 3. 생성자 함수 4. Object.creeate 메서드 5. 클래스 프로퍼티 키에는 네이밍 규칙을 따르거나 ''를 사용해야 한다. 프로퍼티에 접근할 때는 마침표 표기법과 대괄호 표기법이 있다. 대괄호 프로퍼티 접근 연산자 내부에 지정하는 프로퍼티 키는 반드시 따옴표로 감싼 문자열이어야 한다. 네이밍 규칙을 따르지 않았다면 반드시 대괄호 표기법으로 접근해야 한다. 추가 수정 삭제 가능(삭제는 delete person.age) ES6 객체 리터럴 확..
자바스크립트 특징 1. 인터프리터 언어 인터프리터 언어vs 컴파일러 언어 인터프리터 언어 : 한 줄씩 중간코드인 바이트코드로 변환한 후 실행한다. 실행 파일을 생성하지 않고, 인터프리터 단계와 실행 단계가 구분되어 있지 않고 반복 수행된다. 그래서 실행 속도가 비교적 느리다. 장점은 수정이 편하다. 컴파일러 언어 : 소스코드 전체를 한번에 머신 코드로 변환한 후 실행한다. 실행 파일을 생성하고, 컴파일 단계와 실행 단계가 분리되어 있다. 그래서 실행 속도가 빠르다. 장점은 속도. 그런데 대부분의 모던 자바스크립트 엔진은 인터프리터와 컴파일러의 장점을 결합해 속도가 빠르다. 2. 명령형, 함수형, 프로토타입 기반 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어 자바스크립트는 클래스 기반 객체지..