class변수를 어떤 방식으로 선언할지 고민해보게되는 계기가 있었다.
class변수에는 총 세가지가 있다
1. static 변수
2. instance 변수
3. local 변수
각각의 특성에 대해 알아보고 언제 어떻게 선언하는게 프로그램에 도움이 되는지 고민해보자.
1. static변수
class HumanLifeCycle {
static morningRoutine = 'coffee';
...
}
위에서 보이는 static키워드를 이용한 선언 방식이 static변수이다. 변수를 static으로 선언하게 되면 해당 클래스러 몇개의 인스턴스를 생성하던지 상관없이 메모리상 하나의 변수만 참조하게된다. 따라서, 메모리를 절약할수 있다는 장점이 있다.
그렇다고 늘 static으로 선언해서는 안된다. 단 하나의 변수라는 개념인 만큼 여러 인스턴스에서 하나의 값을 공유하게 되기 때문에 각 인스턴스가 독립적으로 변수를 다뤄야 한다면 static을 써서는 안된다.
static이란 이름에 걸맞게 정적이고(변동이 없고) 클래스 인스턴스 간 글로벌하게 쓰이는 경우에 static변수를 쓰도록 하면 어떨까?
2. instance변수
class HumanLifeCycle {
constructor() {
this.pattern = {
morning: '',
afternoon: '',
};
}
}
위 코드에서 보이는 this.pattern이 instance변수에 해당한다. new연산자를 통해 인스턴스를 생성할때 마다 메모리에 해당 변수에 대한 공간을 할당한다. 즉, 인스턴스간 독립적인 변수를 갖게된다.
static이 클래스 레벨에서 변수를 공유하는것과 달리 인스턴스 레벨에서 변수를 다룬다는 차이가 있다. 메모리에 예민한 프로그램이 아니라면 직관적인 instance변수를 주로 즐겨쓰지만 최고의 프로그래머가 되려면 최적화에 대해 더 고민해볼 필요가 있을것 같다.
3. local변수
클래스 내 메소드에서 선언한 변수에 해당한다. 메소드 내에서 잠시 값을 담아두기 위해 쓰이곤 한다.
'개발, 코딩 > Javascript' 카테고리의 다른 글
javascript, Map과 Set (0) | 2022.03.04 |
---|---|
[JS/OOP] 3. 상속? Composition! (0) | 2021.12.16 |
[JS/OOP] 2. 코드로 객체지향 이해하기 (0) | 2021.12.09 |
[JS/OOP] 1. 객체지향 프로그램의 의미를 알아보자. (0) | 2021.12.09 |
이미지 로드, 부드럽게 처리하기 (js + css + react) (0) | 2021.07.13 |