FE 기술/JavaScript

JavaScript) static 메서드와 class

Rulu_ 2023. 4. 24. 13:58

static과 class

static 메서드

  • "prototype"이 아닌 클래스 함수 자체에 메서드를 설정
  • 메서드를 프로퍼티 형태로 직접 할당하는 것과 동일한 일을 함
  • 어떤 특정한 객체가 아닌 클래스에 속한 함수를 구현하고 할 때 주로 사용

매개변수를 이용해 관련 정보가 담긴 클래스 객체생성 → constructor

비어있는 객체 생성 → static(?)

ex)

class Article{
	constructor(title, date) {
		this.title = title;
		this.date = date;
	}
	
	static createTodays() {
		return new this("Today's digest", new Date());
	}
}

🫧정적 메서드는 특정 클래스 인스턴스가 아닌 클래스 ‘ 전체’에 필요한 기능을 만들 때 사용

🫧인스턴스끼리 비교해주는 메서드나 팩토리 메스드를 만들 때 정적 메서드가 쓰임

+) 정적 프로퍼티는 데이터를 클래스 수준에 저장하고 싶을 때 쓰임! 개별 인스턴스에 묶이지 않음.

+) 정적 블록 내부의 this는 클래스의 생성자 객체를 참조한다.

+) 팩토리 메서드란 인스턴스 생성을 서브 클래스에 위임하는 것

프로토타입(Prototype)

자바스크립트의 모든 객체는 프로토타입이라는 객체를 가지고 있으며, 모든 객체는 그들의 프로토타입으로부터 프로퍼티와 메소드를 상속받는다.

상속되는 정보를 제공하는 객체를 프로토타입이라고 함

각각 인스턴스(객체)가 생성될 때마다 동일한 기능을 하는 메서드도 그만큼 생성되니 메모리를 소비한다. → 어차피 동일한 기능을 하는 메서드라면 공유하게끔!

= 공유할 메서드들이 담긴 객체가 따로 존재하고 인스턴트가 생성되면 이 객체를 상송받아서 객체가 갖고 있는 메소드를 사용하게 하자.

 

❓ 근데 왜 staic인 경우 클래스로 정의해

const 객체 안에 넣을 수도 있고 그냥 함수로 덩그라니 있을 수도 있는데? 근데 왜 굳이 클래스로 정의하는거임

(나의 판단)

→ 재사용을 해야할 때 변경점이 없다 (다시 초기 설정 해야할 필요 없음!) const

→ 다시 사용할 때 틀이 필요하다 class

+) 모든 메서드는 생성자로서 이용할 수 있음, 근데 static으로 정의하면 new 키워드로 생성된 인스턴스에 proto로써 참조 불가능하게 함

댓글수0