반응형
static
static element(속성), static method(메서드)
전역화 지역변수 또는 전역화 지역 메서드를 만들기 위한 키워드
- staitc은 전역 영역에 존재하기 때문에 static 입장에서 class는 "소속"의 개념일 뿐이다.
- static 변수, static 메서드는 class가 인스턴스화 되는지 여부와 전혀 관계없다.
- static 메서드의 this는 의미가 없다.
- static 변수도 접근제어가 가능하다.
* 프로그램이 시작해서 종료될 때 까지 메모리가 유지된다.
문법
static methodName() { ... }
<body>
<script>
class cs {
//static Element
static #stC = 999;
//static Method
static minus (a, b)
{
return this.#stC
//여기서 this는 객체가 아니라 해당 클래스의 정보를 의미한다.
}
constructor(_a) {
this.a = _a;
}
}
</script>
</body>
설명
정적 메서드는 클래스의 인스턴스 없이 호출이 가능하며 클래스가 인스턴스화 되면 호출할 수 없습니다.
정적 메서드는 종종 애플리케이션의 유틸리티 함수를 만드는 데 사용됩니다.
클래스의 인스턴스가 몇개가 되던지 상관없이 클래스의 인스턴스가 아닌 클래스 자체의 정보를 저장하고자 할 때에는 static 변수를 사용합니다.
문제
사각형 클래스를 만들고 사각형의 인스턴스 개수를 출력하시오.
<body>
<script>
class rectangle
{
#width
#height
static #rectNum = 0;
static getRectNum(){
return this.#rectNum;
}
static setRectNum(_rectNum){
this.#rectNum = _rectNum
}
constructor(_width, _height)
{
if (_width < 0 || _height < 0 || typeof(_width) !== 'number' || typeof(_height) !== 'number') {
throw 'parameter is not a number'
}
else {
this.#width = _width;
this.#height = _height;
let rectNum = rectangle.getRectNum();
rectangle.setRectNum(++rectNum)
}
}
}
class square extends rectangle
{
constructor(_length)
{
if (typeof(_length) === 'number' && _length > 0)
{
super(_length, _length)
}
else
{
throw 'parameter is not a number'
}
}
getLength(){
return this.width
}
}
const s1 = new square(5);
const r1 = new rectangle(10 ,7)
const r2 = new rectangle(6, 2)
const r3 = new rectangle(10, 3)
console.log(rectangle.getRectNum())
//4
</script>
</body>
참고
상속
https://cruella-de-vil.tistory.com/60
throw(예외 발생)
https://cruella-de-vil.tistory.com/59
class, private
https://cruella-de-vil.tistory.com/58
반응형
'JavaScript' 카테고리의 다른 글
[JavaScript] Event +예제 (0) | 2022.04.26 |
---|---|
[JavaScript] DOM (문서 객체) (0) | 2022.04.25 |
[JavaScript] 상속(Inheritance), super() (0) | 2022.04.21 |
[JavaScript] throw(예외 발생) (0) | 2022.04.21 |
[JavaScript] Class(클래스), private(접근제어) (0) | 2022.04.20 |