함수가 특정기능을 하는 구문(알고리즘, 로직)을 묶을 때 사용하는 문법이라면, 클래스는 이렇게 만들어진 수많은 변수와 함수 중 연관 있는 변수와 함수만을 선별해 포장하는 기술이다.
다시 말해서, 연관있는변수와 함수
를 하나로 묶을 때 사용하는 문법이다.
이렇게 클래스로 묶는 이유는 객체 단위로 코드를 그룹화 할 수 있으며 코드를 재사용이 용이하기 때문이다.
: Class는 사실 함수다. 함수를 함수 표현식과 함수 선언으로 정의할 수 있듯이 class 문법도 class 표현식과 class 선언 두 가지 방법을 제공한다.
함수 선언
과 클래스 선언
의 차이점은 함수 선언은 호이스팅
이 일어나지만, 클래스 선언은 그렇지 않다는 것이다. : 특정 기능을 하는 변수 + 알고리즘 등을 묶는 것
: 연관 있는 변수와 함수를 묶는 것
: 함수가 function 키워드로 선언하듯, 클래스도 class 라는 키워드로 선언할 수 있다.
class ClassName {
constructor(height, width) {
}
}
let ClassName = class {
constructor(height, width) {
}
};
: 붕어빵을 만든다고 했을때, 붕어빵틀은 class, 붕어빵은 instance가 된다.
var 인스턴스 = new 클래스이름
: 인스턴스를 만들때마다 생성자 메서드constructor()
를 사용해야한다.
class Dog {
constructor(name) {
this.name = name;
this.behavior = 0;
}
}
constructor 메서드
를 호출했고, 이 메서드는 인수로 name을 받는다.this
는 클래스인 Dog
를 말한다.: 아래와 같이 메서드를 만들 수 있고 call할 수 있다.
class Dog {
constructor(name) {
this._name = name;
this._behavior = 0;
}
get name() {
return this._name;
}
get behavior() {
return this._behavior;
}
incrementBehavior() {
this._behavior++;
}
}
let nikko = new Dog('Nikko'); // Create dog named Nikko
nikko.incrementBehavior(); // Add 1 to nikko instance's behavior
let bradford = new Dog('Bradford'); // Create dog name Bradford
console.log(nikko.behavior); // Logs 1 to the console
console.log(bradford.behavior); // Logs 0 to the console
: 위의 예시처럼 'dog' 외에 'cat'이라는 클래스가 있다고 하자.
이 경우 모든 프로퍼티와 메서드가 전부 동일하다면 부모 클래스 'animal'을 만들어 상속시키는 방법이 있다.
class Animal {
constructor(name) {
this._name = name;
this._behavior = 0;
}
get name() {
return this._name;
}
get behavior() {
return this._behavior;
}
incrementBehavior() {
this._behavior++;
}
}
: 위의 'animal' 클래스의 자식 클래스 'cat'을 만들어보자.
새로운 키워드인 extends
를 사용해서 자식 클래스를 만들 수 있다.
class Cat extends Animal {
constructor(name, usesLitter) {
super(name);
this._usesLitter = usesLitter; //얜 부모 클래스에 없었으니 super 안씀
}
}
자식클래스명
extends 부모클래스명
{}super
를 함수처럼 호출하면, 부모 클래스의 생성자가 호출됩니다.: 자바스크립트의 클래스에서 prototype에 할당되지 않고 클래스 자체에 할당된 함수를 정적 메서드
라고 한다.
클래스 자체에 할당되었기 때문에 클래스의 인스턴스를 통해서는 호출될 수 없으며 클래스를 통해 호출해야 한다.
클래스가 가지고 있지만 클래스의 인스턴스에 바인딩되지 않은 기능을 구현하고자 할때 사용된다.
static generatePassword() {
return Math.floor(Math.random() * 10000)
}
// 정적 메서드에는 static을 붙인다.