-
javascript에서 class 사용하기JavaScript 2023. 2. 4. 08:05
ES6부터 자바스크립트에서도 class 문법이 지원된다.
클래스는 객체를 생성하는 탬플릿으로 재사용할 수 있고, 내부의 변수와 메서드를 추상화할 수 있다.
class 사용하기
// class 표현식 const Data = class { constructor(name) { this.name = name; } get name() { return "이름은 " + this._name + "입니다."; } set name(name) { if (name.length <= 3) { alert("Too Short"); } else { this._name = name; } } } // class 선언식 class Data { constructor(name) { this.name = name; } get name() { return "이름은 " + this._name + "입니다."; } set name(name) { if (name.length <= 3) { alert("Too Short"); } else { this._name = name; } } }// 출력되는 값은 같다. const data = new Data("HI"); // alert("Too Short") 출력 console.log(data.name); // 이름은 undefined입니다. data.name = "HIHIHI"; console.log(data.name); // 이름은 HIHIHI입니다.- 위와 같은 방법들로 클래스를 사용할 수 있다.
class User { constructor(name) { // setter를 활성화합니다. this.name = name; } get name() { return this.name; } set name(value) { if (value.length < 4) { console.log("이름이 너무 짧습니다."); return; } this.name = value; } } let user = new User("lee"); // undefined- set 함수는 생성자가 실행될 때 실행될 수 있다. 참조
const Data3 = class Person { constructor(nickName) { Person.nickName = nickName; } get name() { return "이름은 " + this._name + "입니다."; } set name(name) { if (name.length <= 3) { alert("Too Short"); } else { this._name = name; } } } const data = new Data3("kim"); console.log(data.name); // 이름은 undefined입니다. data.name = "1245673"; console.log(data.name); // 이름은 1245673입니다. console.log(data3.name); // Person- class는 변수에 할당될 수 있다.
- named class에서 name은 이 클래스의 이름이다.
function makeClass() { return class { clg() { console.log("CLG"); } }; } const c = makeClass(); const cc = new c(); cc.clg();- class는 동적으로 생성될 수 있다.
extends 상속
- 클래스는 다른 클래스를 상속받아 사용할 수 있다.
class Person { constructor (name) { this.name = name; } } class Detail extends Person { constructor (name, age) { super(name); this.age = age; } }const data = new Detail("park", 15); console.log(data.name); // park console.log(data.age); // 15- super를 통해서 상속받은 부모 클래스의 생성자 함수를 호출할 수 있다.
- super.메서드 로 생성자뿐만 아니라 부모 클래스의 다른 메서드도 접근할 수 있다.
- 자바스크립트의 클래스는 다중 상속이 불가능하다.
- 다중 상속을 구현하고자 한다면, 믹스인 기능을 사용할 수 있다.
class JsClass { #id; #password; #vaildId() { // private method } getId() { return this.#id; } setId(id) { this.#id = id; } }- 클래스 내부에서 선언된 변수와 메서드는 기본적으로 public이며 외부에서 접근 가능하다.
- ES2019부터 추가된 기능으로, 변수나 메서드 이름 앞에 #을 붙이면, private 변수나 메서드가 된다.
- 이렇게 encapsulation된 클래스에서 private 변수는 해당 클래스의 scope 내부에서만 사용될 수 있고, 외부에서 private 변수나 메서드에 접근 시 syntax error가 발생한다.
참고 자료 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Classes, https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/class
class 식 - JavaScript | MDN
class 표현식은 ECMAScript 2015 (ES6)에서 클래스를 정의하는 한 방법입니다. function 식과 비슷하게, class 식은 기명(named) 또는 익명(unnamed)일 수 있습니다. 기명인 경우, 클래스명은 클래스 본체(body)에
developer.mozilla.org
Classes - JavaScript | MDN
Class는 객체를 생성하기 위한 템플릿입니다. 클래스는 데이터와 이를 조작하는 코드를 하나로 추상화합니다. 자바스크립트에서 클래스는 프로토타입을 이용해서 만들어졌지만 ES5의 클래스 의
developer.mozilla.org
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Classes/Private_class_fields
Private class fields - JavaScript | MDN
class 의 속성(property)들은 기본적으로 public 하며 class 외부에서 읽히고 수정될 수 있다. 하지만, ES2019 에서는 해쉬 # prefix 를 추가해 private class 필드를 선언할 수 있게 되었다.
developer.mozilla.org
'JavaScript' 카테고리의 다른 글
자바스크립트 코드 실행시간 측정하기 (0) 2023.02.11 NPM에 패키지 배포하고 사용해보기 (+ 타입스크립트) (0) 2023.02.09 자바스크립트 generator 함수란? (0) 2023.02.02 javascript 스코프와 실행 컨텍스트 (0) 2023.01.31 javascript의 호이스팅(hoisting) 알아보기 (1) 2023.01.24