728x90
반응형
SMALL
// static
        // 정적 프로퍼티 및 메소드를 생성
        // 클래스 레벨 메소드(스테틱을 사용한 메소드)에서는 this를 참조할수 없다.
        // 메모리에 먼저 올라가기 때문에 값을 받아올수가 없음
        class Fruit {
            static count_fruits = 10; // 객체를 생성하지 않아도 메모리에 올라가 있다.

            constructor(name, emogi){
                this.name = name;
                this.emogi = emogi;
            }
            dispaly = () => {
                console.log(`${this.name}: ${this.emogi}`);
            }

            static makeBanana(){
                return new Fruit('banana', '🍌')
            }
        }

        const apple = new Fruit('apple', '🍎')
        const orange = new Fruit('orange', '🍊')
        console.log(apple);
        console.log(apple.name);
        console.log(orange);
        console.log(orange.name);
        console.log(Fruit.count_fruits);
        const banana = Fruit.makeBanana();
        console.log(banana);
        console.log('-----------------------------');

        class Dog{
            #name; // private 해당 속성이 적용된 클래스 외에서는 접근이 불가능함
            #color;
            constructor(name, color){
                this.#name = name;
                this.#color = color;
            }

            // 프로퍼티명과 꼭 일치할 필요는 없음
            set name(value){
                console.log('set', value);
                this.#name = value;
            }

            get name(){
                return `이름: ${this.#name}`;
            }

            run = () => {
                console.log(`${this.#color} 색상의 이로치 ${this.#name}이(가) 달립니다.`);
            }

            #eat = () => {
                console.log(`${this.name}는 먹습니다.`);
            }

            colorEat = () => {
                this.#eat();
            }
        }
       
        const Rucy = new Dog('루시', 'white');
        // Rucy.name = '류씨'; // name이 새로 생성됨
        console.log(Rucy);
        //Private field '#name' must be declared in an enclosing class
        // Rucy.#name = '류씨';
        console.log(Rucy);
        Rucy.name = '피카츄';
        console.log(Rucy);
        console.log(Rucy.name);
        Rucy.run();
        // Rucy.eat();
        Rucy.colorEat();
console.log('------------------------------');
        // 문제 카운터 만들기
        // 카운터를 0으로 값을 초기화 한뒤 하나씩 숫자를 증가할 수 있는 메소드를 구현
        class Counter {
            #value
            constructor(value){
                if(isNaN(value) || value < 0) this.#value = 0;{
                    this.#value = 0;
                }else{
                    this.#value = value;
                }
            }

                get value(){
                    return this.#value;
                }
                increment = () => {
                    this.#value++;
                }

        }
           

        const cnt = new Counter(0);
        cnt.increment(); //1
        cnt.increment(); //2
728x90
반응형
LIST

'JavaScript' 카테고리의 다른 글

JavaScript - Wrapper  (0) 2023.04.11
JavaScript - 클래스 상속 예시  (0) 2023.04.11
JavaScript - 객체 활용법 예시  (0) 2023.04.11
JavaScript - 함수 작성법 예시  (0) 2023.04.11
JavaScript - 정규 표현식  (0) 2023.04.07

+ Recent posts