JavaScript

[JavaScript] Static

SangRok Jung 2022. 4. 21. 22:12
반응형

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

 

[JavaScript] 상속(Inheritance), super()

상속(Inheritance) 개념 코드의 재활용성을 높이는 프로그래밍 기법 - 자바스크립트의 정의 코드의 재활용성을 높이고 공통적인 규약을 제공하기 위한 객체지향의 특성. - 설계 측면의 정의 부모 클

cruella-de-vil.tistory.com

throw(예외 발생)

https://cruella-de-vil.tistory.com/59

 

[JavaScript] throw(예외 발생)

throw throw문은 사용자 정의 예외를 발생(throw)할 수 있습니다. 예외가 발생하면 현재 함수의 실행이 중지되고 (throw 이후의 명령문은 실행되지 않습니다.), 제어 흐름은 콜스택의 첫 번째 catch 블

cruella-de-vil.tistory.com

class, private

https://cruella-de-vil.tistory.com/58

 

[JavaScript] Class(클래스), private(접근제어)

Class (클래스) 개념 ES5에서는 클래스가 없으며 객체형, 클로저, 생성자, 프로토타입 등을 이용해 클래스와 유사한 구조를 만들어 사용한다. ES5와 다르게 ES6에서는 클래스 문법을 직접적으로 지원

cruella-de-vil.tistory.com

 

 

반응형