static 키워드는 클래스의 인스턴스가 아닌 클래스 자체에 속하며 클래스의 변수, 메서드 등을 공유하는데 사용됨
이를 통해 해당 클래스로 만들어지는 객체사이에서 중복되는 메서드, 속성을 효율적으로 정의할 때 쓰이며 단순히 전역변수가 아니라 클래스내의 static키워드로 선언하여 이 클래스의 객체들끼리 사용되는 메서드 또는 속성이다 라는것을 나타내주는 명시성이라는 장점이 생기기 때문에 사용 함
즉 static 키워드를 사용해 정의된 메서드는 클래스를 통해서 사용 가능하지, 인스턴스를 통해 사용은 불가능 함
static 키워드로 선언된 변수, 블록, 메서드 등은 선언과 동시에 메모리에 할당 됨 따라서 클래스가 객체로 쓰이지 않더라도 메모리에 할당되기 때문에 메모리 낭비가 될 수 있음
(JAVA)
heap 영역이 아닌 method area 메모리 영역에 할당되며 프로그램이 종료 될 때까지 GC(garbege collector)에 의해 메모리가 회수되지 않기 때문에 만약 클래스가 객체로 쓰이지 않는다면 메모리 낭비를 불러올 수 있다
class Person {
constructor(name = "alanwalker", IQ = 100, str = 100) {
this.name = name;
this.IQ = IQ;
this.str = str;
}
levelup() {
this.IQ++;
this.str++;
console.log(this.name + "의 지능과 힘이 증가했습니다! " + this.IQ + " / " + this.str);
}
static add(a, b) {
return a + b;
}
}
const a = new Person();
a.levelup();
const b = new Person("홍철", 1, 1000);
b.levelup();
정적 메서드나 정적 프로퍼티를 정의할때 사용 함
정적메서드는 클래스의 인스턴스가 아닌 클래스 자체에 속한 메서드
위 코드에서
//정적메서드는 이런식으로 사용 함
Person.add();
//인스턴스메서드는 클래스를 사용해서 or 생성자 함수를 사용해서
const a = new Person();//인스턴스르 만들고 변수에 할당해서
a.levelup();//그 변수에 메서드를 호출해서 사용
정적메서드는 보통 클래스 레벨에서 공통적으로 사용되는 유틸리티 함수나 특정 인스턴스에 종속되지 않은 메서드를 정의할 떄 사용
인스턴스 메서드는 특정 인스턴스에 종속된 동작을 정의할 때 사용