728x90
    
    
  - 클래스는 함수임
 - 새로운 객체 생성 방식
 
클래스 정의
class키워드 사용
class Car {} // 클래스 선언문
const a = class {}; // 익명 클래스 표현식
const b = class Person {}; // 기명 클래스 표현식
- 클래스를 표현식으로 정의할 수 있다는 것 --> 일급 객체
 - 클래스 몸체에는 0개 이상의 메서드 정의 가능
 - 메서드 종류
constructor, 프로토타입 메서드, 정적 메서드
 
클래스 호이스팅
- 런타임 이전에 평가되어 함수 객체 생성 --> 이때 생성된 생성자 함수 객체 === 
constructor - 클래스 선언문 이전에 일시적 사각지대 발생
 - 클래스는 클래스 정의 이전에 참조 불가능
 
인스턴스 생성
- 인스턴스 생성이 유일한 목표 --> 
new연산자와 함께 호출 
메서드
- 클래스 몸체에는 0개 이상의 메서드만 선언할 수 있음
 constructor- 이름을 변경할 수 없음
 - 메서드로 해석되지 않고 클래스가 평가돼 생성한 함수 객체 코드의 일부가 됨
 - 1개만 존재 가능
 - 생략 가능
 - 인스턴스를 초기화하려면 반드시 작성해야 함
 
- 프로토타입 메서드
- 클래스 몸체에 정의한 메서드는 기본이 프로토타입 메서드임
 - 클래스가 생성한 인스턴스는 프로토타입 체인 안에 속함
 - 인스턴스로 호출
 - 인스턴스의 프로퍼티 참조 가능
 
 - 정적 메서드
static키워드를 붙이면 정적 메서드가 됨- 프로토타입 체인이 프로토타입 메서드와 다름
 - 클래스로 호출
 - 인스턴스의 프로퍼티 참조 불가능
 
 
인스턴스 생성 과정
- 인스턴스 생성, this 바인딩
 - 인스턴스 초기화
 - 인스턴스 반환
 
프로퍼티
- 
인스턴스 프로퍼티
constructor내부에서 정의해야 함constructor내부에서 this에 추가한 프로퍼티는 인스턴스의 프로퍼티가 됨
 - 
접근자 프로퍼티
- 인스턴스에서 사용
 - 프로퍼티처럼 참조 O --> 내부적으로 호출됨
 
 - 
클래스 필드 정의
- this 없이 프로퍼티를 클래스 몸체에 선언
 - 클래스 필드를 참조하는 경우 반드시 this로 참조해야 함
 - 초기값이 없으면 
undefined할당 - 모든 클래스 필드는 인스턴스 프로퍼티, 함수 할당 --> 인스턴스 메서드
 - private 사용하려면 필드 이름 앞에 # 추가
 - 정적 필드 사용하려면 
static키워드 선언 
 
상속에 의한 클래스 확장
- 기존 클래스를 상속받아 새로운 클래스를 확장함
 - 서브클래스의 
constructor에 반드시super를 호출해야 함 --> 서브클래스는 수퍼클래스에게 인스턴스 생성을 위임하기 때문 
학습 도서
- '모던 자바스크립트 Deep Dive', 이웅모 저, 위키북스
 
'Language | Basic > JavaScript' 카테고리의 다른 글
| [JavaScript 스터디] 클로저 (0) | 2021.02.01 | 
|---|---|
| [JavaScript 스터디] 실행 컨텍스트 (0) | 2021.02.01 | 
| [JavaScript 스터디] this (0) | 2021.02.01 | 
| [JavaScript 스터디] 빌트인 객체 (0) | 2021.01.31 | 
| [JavaScript 스터디] strict mode (0) | 2021.01.30 |