ES6 Class

2020. 4. 23. 23:42·개발/Javascript
728x90

ES6 Class 문법에 대한 정리에 앞서..

자바스크립트는 객체 기반 또는 프로토타입 기반(Prototype-based) 언어입니다.

그래서 클래스 기반(Class-based)의 객체지향 언어들과는 달리 프로토타입 체인과 클로저 등을 이용하여 상속과 캡슐화같은 개념들을 만들어 냈습니다.

 

하지만, ES6(ECMAScript 6)에서 Class문법이 추가되었습니다.

이 문법에 대해서 syntax sugar인가 아닌가에 대해 다양한 의견들이 있습니다.

이에 대해선 스스로 다양한 글을 읽고 판단하시는 것을 추천합니다.

 

자바스크립트에 Class문법이 추가되었다고 했지만,

사실은 Class로 선언된 객체의 속성을 알아보면 Function이라 나옵니다. (더보기 참고)

더보기
// ES5
function Human(name) {
	this.name = name;

	Human.prototype.hello = function () {
		console.log("안녕하세요, " + this.name);
	};
}

var mina = new Human("mina");
mina.hello();

// ES6 Class
class Human {
    constructor(name) {
      this.name = name;
    }

    hello() {
      console.log(`안녕하세요, ${this.name}`);
    }
  }

const mina = new Human("mina");
mina.hello();

다음과 같이 코드를 작성하고 Human의 속성을 알아보면,

Function 이라고 나와있는 것을 알 수 있습니다.

 

그럼으로 "기존의 Prototype 기반의 속성을 Class 문법으로 작성해 나타낸 것이구나" 라고 이해하시면 될 것 같습니다.


Class 문법 알아보기

Class 문법은 위에서 잠깐 보았듯이 class 키워드를 사용해 정의합니다.

우리가 함수를 함수 선언식과 함수 표현식으로 정의 하듯이 Class 문법도 선언식과 표현식으로 나타낼 수 있습니다.

Class는 호이스팅이 일어나지 않기 때문에 호출 이전에 선언 해주어야 합니다.

 

Class 선언식

// Class 선언식

class Human {
	constructor(name) {
		this.name = name;
}

	hello() {
		console.log(`안녕하세요, ${this.name}`);
	}
}

 

Class 표현식 

// Class 표현식

// 익명 Class
const Human = class {
	constructor(name) {
		this.name = name;
	}

	hello() {
		console.log(`안녕하세요, ${this.name}`);
	}
}

// 기명 Class
const Human = class Human {
	constructor(name) {
		this.name = name;
	}

	hello() {
		console.log(`안녕하세요, ${this.name}`);
	}
}

Constructor (생성자)

constructor 메서드는 객체를 생성하고 초기화하는 역할을 합니다. 

Class에서 constructor 메서드는 단 하나만 존재해야 합니다.

 

constructor 메서드는 생략할 수 있습니다.

constructor 메서드를 생략하면 Class에 빈 객체의 constructor 메서드가 생성됩니다.

그럼으로 인스턴스에 프로퍼티를 추가하려면 인스턴스를 생성한 이후, 프로퍼티를 동적으로 추가해야 합니다.


Class Field

Class Field는 Class 내부의 캡슐화된 변수를 말합니다.

Class Field는 인스턴스의 프로퍼티 또는 정적 프로퍼티가 될 수 있습니다.

쉽게 말해, 자바스크립트의 생성자 함수에서 this에 추가한 프로퍼티를 Class 기반의 객체지향 언어에서는 Class Field 라고 부릅니다.

class Human {
	constructor(name) {
		this.name = name; // 클래스 필드의 선언과 초기화
}

	hello() {
		console.log(`안녕하세요, ${this.name}`);
	}
}

 

constructor 메서드 내부에서 선언한 Class Field는 Class가 생성할 인스턴스를 가리키는 this에 바인딩 됩니다.

Class Field는 Class가 생성할 인스턴스의 프로퍼티가 되며, Class의 인스턴스를 통해 클래스 외부에서 언제나 참조할 수 있습니다.

 


getter와 setter

정적 메서드

extends, super 키워드

...

 

저작자표시 (새창열림)

'개발 > Javascript' 카테고리의 다른 글

OverRiding(오버라이딩)과 OverLoading(오버로딩) 간단 정리  (1) 2021.06.05
간단하게 훑어보는 함수형 프로그래밍 #1  (1) 2020.05.04
한 줄짜리 if 문, for 문 그리고 함수  (0) 2020.04.22
객체 리터럴 사용 시, 값이 undifined라고 뜬다면..  (0) 2020.04.22
ES6 Set과 Destructuring 을 이용한 로또 번호 생성기  (0) 2020.04.11
'개발/Javascript' 카테고리의 다른 글
  • OverRiding(오버라이딩)과 OverLoading(오버로딩) 간단 정리
  • 간단하게 훑어보는 함수형 프로그래밍 #1
  • 한 줄짜리 if 문, for 문 그리고 함수
  • 객체 리터럴 사용 시, 값이 undifined라고 뜬다면..
기짜낭
기짜낭
생각이 많지만, 지금 내가 해야할 것을 하자.
  • 기짜낭
    So tired
    기짜낭
    • 분류 전체보기 (199)
      • 개발 (11)
        • Javascript (19)
        • Typescript (5)
        • Canvas (8)
        • React (13)
        • C (3)
      • 활동 (63)
        • 개인 프로젝트 (33)
        • 나눔 서포터즈 3기 (9)
        • 멋쟁이 사자처럼 (7)
        • 0&1 C++ 자료구조 스터디 (0)
        • 제 9회 창업 아이디어톤 (3)
        • Poom (ZeroWasteShop) (3)
        • 해커톤 (2)
        • 우테코 프리코스 7기 (6)
      • 알고리즘 (27)
        • 알고리즘 정리 (5)
        • 백준 (18)
        • 프로그래머스 (4)
      • 강연 (7)
      • 독서 (18)
      • 회고 & 생각 (16)
        • 연간회고 (4)
      • 기타 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • ※ 예전 블로그
  • 인기 글

  • 태그

    알고리즘
    Erica
    타입스크립트
    3기
    ES6
    HTML5
    프론트엔드
    군대
    우테코
    1주 1권
    1주에 1권씩
    프로젝트
    독서
    한양대학교
    TypeScript
    디자인
    프로그래밍
    개발자
    에리카
    tutorial
    react
    대학
    개발
    HTML
    Javascript
    개념
    canvas
    독후감
    CSS
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
기짜낭
ES6 Class
상단으로

티스토리툴바