이 책을 기준으로 작성했습니다
# ECMAScript (European Computer Manufacturers Association)
핵심 언어로 변수, 함수, 루프 등을 포함한다. 이 부분은 브라우저와 독립적이며, 다른 여러 환경에서 사용될 수 있다.
# ECMAScript5 (ES5)
새로운 객체와 속성
엄격모드 도입 (strict mode)
엄격모드(strict mode)란?
- 좀 더 엄격하게 문법검사를 하겠다.
- 옵트인(opt-in)이며 필수는 아님.
- "use strict"; 함수당 한번, 또는 전체 프로그램에서 한번.
- 자바스크립트 문자열로, 문자열을 변수에 할당되지 않은 상태로 둠으로써 ES5를 지원하지 않는 구형 브라우저는 이를 무시하므로 이전버전과 호환되고 구형 브라우저를 손상시키지 않음.
# ECMAScript6 (ES6)
모든 ES6 모듈과 클래스는 엄격모드(strict mode)가 디폴트(default)
왜? ES6에서 작성한 대부분의 코드는 모듈에 있기 때문
모듈(module)?
모듈은 구현 세부 사항을 캡슐화하고 공개 API를 노출해 다른 코드에서 쉽게 로드하고 사용할 수 있도록 재사용 가능한 코드 조각이다.
엄격모드가 디폴트이지만 다른구조에서는 암시적으로 엄격모드가 적용되지 않음. 예) 화살표, 제너레이터함수
클래스(class) 와 프라미스(promise), 제너레이터(generator) 추가
ES6가 모든브라우저와 서버 프레임워크에 완벽히 지원되지않는다.
트랜스파일러(transpiler) : 소스를 소스로 컴파일하는 컴파일러 예) 바벨(Babel)
트랜스파일러를 통해 ES6로 작성한 구문을 ES5구문으로 컴파일/변환하여 ES6 기능을 지원하지 않는 브라우저에서 실행
# 바벨(Babel) : transpiler
좌측에 ES6로 작성하면 우측에 ES5로 변환
mac nvm설치 : https://gist.github.com/falsy/8aa42ae311a9adb50e2ca7d8702c9af1
# nvm 설치 후 terminal에서 아래 명렁어를 통해 nvm 명령어 추가
$ source ~/.nvm/nvm.sh
이 명령어를 입력하면 nvm 명령어를 사용 가능
# 객체지향 프로그래밍 (OOP Object-Oriented Programming)
객체와 메서드, 속성
클래스
캡슐화 (Encapsulation)
집합 (Aggregation)
재사용성 (Reusability) / 상속 (Inheritance)다형성 (Polymorphism)
다형성 (Polymorphism)
# 자바스크립트에서의 OOP 및 특징
클래스
자바스크립트에는 클래스가 없다. 자바스크립트는 모든것을 객체를 기반으로 한다.
예) Person클래스의 Bob객체 가 아니라 Bob의 아빠라고 불리는 객체를 가지고 Bob이라는 새로운객체의 프로토타입으로 재사용.
캡슐화
정보은닉 → 어떻게 동작하는지 내부적으로 알 필요가 없다.
메서드와 속성의 가시성 → public, protected, private
집합
여러 객체를 새로운 하나의 객체로 결합하는것 (=컴포지션(Composition))
상속
상속을 통해 코드의 재사용성을 높임
재정의 (overriding)가능
다형성
서로 다른 객체에서 동일한 메서드를 호출하고 각각의 고유한 방식으로 응답하도록 하는 기능
예) A.say(), B.say() 객체가 다르므로 다른 응답을 함
# Node.js를 통해 자바스크립트 콘솔 실행
$ source ~/.nvm/nvm.sh
$ node
.exit 을 입력하면 종료.
'복습 > Javascript' 카테고리의 다른 글
[Javascript] 객체지향 자바스크립트 [클로저] (0) | 2018.02.07 |
---|---|
[Javascript] 객체지향 자바스크립트 [함수는 데이터, 콜백함수, 함수반환, 내부함수] (0) | 2018.02.06 |
[Javascript] 객체지향 자바스크립트 [함수, 호이스팅, 블록범위] (0) | 2018.02.06 |
[Javascript] 객체지향 자바스크립트 [조건문, 반복문, 주석] (0) | 2018.02.05 |
[Javascript] 객체지향 자바스크립트 [원시 데이터형식, 배열] (0) | 2018.02.05 |