* static (static 키워드는 클래스의 정적 메서드를 정의한다.)
// static 정적 프로퍼티, 메서드
class Fruit {
static MAX_FRUITS = 4;
// 생성자: new 키워드로 객체를 생성할때 호출되는 함수
constructor(name, emoji) {
this.name = name;
this.emoji = emoji;
}
// 클래스 레벨의 메서드
static makeRandomFruit() {
// 클래스 레벨의 메서드에서는 this를 참조할 수 없음
// 주어진 데이터가 없는 템플릿 자체이므로 this를 참조할 수 없다.
return new Fruit('banana', '🍌');
}
// 인스턴스 레벨의 메서드
display = () => {
console.log(`${this.name}: ${this.emoji}`);
};
}
const banana = Fruit.makeRandomFruit();
console.log(banana);
console.log(Fruit.MAX_FRUITS);
// apple은 Fruit 클래스의 인스턴스이다.
const apple = new Fruit('apple', '🍎');
// orange은 Fruit 클래스의 인스턴스이다.
const orange = new Fruit('orange', '🍊');
console.log(apple);
console.log(orange);
console.log(apple.name);
console.log(apple.emoji);
apple.display();
// static이 사용된 예시 (내장객체에서 static이 사용된 예시)
Math.pow();
Number.isFinite(1);
[인스턴스(instance)레벨]
* Class에 정의된 프로퍼티와 메서드는 인스턴스(instance)레벨의 프로퍼티와 메소드이다.
> Class를 이용해서 만든 인스턴스에 Class에서 정의한 프로퍼티와 메서드들이 중복적으로 만들어지기 때문이다.
> 템플릿을 지정해두고 필요한 데이터를 주입해서 동일한것을 지속적으로 만들어 나갈 수 있다.
> 이때 동일한 프로퍼티와 메서드가 들어가기 때문에 인스턴스 레벨의 프로퍼티와 메서드라고 볼 수 있다.
> 그래서 만들어진 인스턴스를 통해서 객체.속성 // 객체.함수()를 통해서 호출이 가능하다.
[클래스(Class)레벨]
* 인스턴스 레벨의 프로퍼티와 메소드는 객체마다 서로 다른 데이터를 가지고 있다.
하지만 만약 우리가 모든객체마다 동일하게 참조해야하는 속성이나 행동이 있다면? 어떻게 해야할까?
> Class레벨의 프로퍼티와 메서드를 사용한다.
> Class안에서 static이라는 키워드를 프로퍼티나 메서드앞에 추가 가능하다.
> static이 붙은 프로퍼티나 메서드는 만들어진 인스턴스에 포함이 되지 않고 Class에 그대로 남아있게된다.
> 즉, Class에 딱 한번만 만들어지고 각각의 인스턴스에는 들어있지않다. (Class에 한번만 정의하고 재사용 가능)
> 그래서 호출할때도 클래스이름.함수()를 통해 Class레벨에 있는 메서드를 호출가능하다.
'Study > JavaScript' 카테고리의 다른 글
[JavaScript_study] setter, getter (0) | 2022.04.11 |
---|---|
[JavaScript_study] 필드(field) (0) | 2022.04.11 |
[JavaScript_study] 클래스(class) (0) | 2022.04.11 |
[JavaScript_study] 객체란? (0) | 2022.04.11 |
[JavaScript_study] 함수(function)에 대해서 (0) | 2022.04.10 |