Javascript Class 알아보기

Views:
7
Category:
Post
Posted on:
2024. 1. 12.

Javascript Class

갑자기 class??

이유는 javascrip class를 활용한 코딩을 거의 하지 않아

다시 공부해 보려고 한다.

또한, 추후 기회가 된다면 라이브러리를 사용하지 않고

바닐라로 spa 만들기에 대해 포스팅 할 기회가 있다면 class를 활용할 예정.

1. 인스턴스 생성해 보기

class Product {
    //* 인자를 받아 초기화
    //* 생략 가능
    //* 암묵적으로 this를 반환 한다고 함
   constructor(name, price) {
        this.name = name;
        this.price = price;
    };
    //* method
    //* prototype에 등록됨
    ProductLog () {
        ...
    };
    //* prototype에 등록되지 않음
    ProductLog2 = () => {           ...
    }
    //* 메소드를 등록할때 화살표  함수로 등록하게 되면
    //* prototype에 등록되지 않기 때문에
    //* 상속받은 인스턴스에서는 사용할 수 없음.
 };

2. field(필드)

class Product {
    //* 필드
    //* this.name = name이런 식으로 설정할 필요 없음.
    name = 'tom';
    price = 3000;
    constructor() {
    }
};

3. 정적 필드와 메소드(static)

class Product {
    //* Class자체에서 접근 가능
    //* 정적 메소드는 정적 프로퍼티만 접근 가능
    static name = 'tom';
    static getPrice {};
    constructor() {
    }
};

4. private

class Product {
    #name = "doney;
    #price = 0;
   constructor(name, price) {
        this.#name = name;
        this.#price = price;
    };
    //* private로 선언되면 접근이나 수정이 불가능
    //* 필드에 같이 정의 해야 한다
    get getPrice () {
        return this.#price;
    //* 클래스 내에서는 접근 가능
    }
 };

5. 상속

class Product {
    constructor(name, price) {
        this.name = name;
        this.price = price;
    };

    intoroduce () {
        return `${this.name}의 가격은 ${this.price}원 입니다.`
    };
};
//* extends 키워드로 상속 가능
class Sample extends Product {
    constructor(name, price, type) {
          //* 부모의 constructor를 호출
          super(name, price);
          this.type = type;
    };
    // *프로토타입 체이닝으로 introduce라는 메소드를
    //* 사용할 수 있음
    //* But 재 선언해 오버라이딩 됨.
    introduce () {
        return `이것의 타입은 ${this.type}의 한 종류 입니다.`
    };
    //* 부모의 메소드를 호출해 사용
    introduce2 () {
       return  super.introduce + ", " + this.introduce();
    };
};

class Product {
    static name = "막걸리";
    static price = 5000;
    static introduce() {
        console.log(`이것은 ${this.name} 입니다.`);
    };
};

class Sample() extends Product {
    static introduce () {
        super.introduce();
        console.log("이것의 종류는 술입니다.")
    };
};
Sample.introduce();
// 이것은 막걸리 입니다.
// 이것의 종류는 술입니다.
// 이렇게 사용 할 수 있다.

# Javascript Class

갑자기 class??

이유는 javascrip class를 활용한 코딩을 거의 하지 않아

다시 공부해 보려고 한다.

또한, 추후 기회가 된다면 라이브러리를 사용하지 않고

바닐라로 spa 만들기에 대해 포스팅 할 기회가 있다면 class를 활용할 예정.

### 1. 인스턴스 생성해 보기

```
class Product {
    //* 인자를 받아 초기화
    //* 생략 가능
    //* 암묵적으로 this를 반환 한다고 함
   constructor(name, price) {
        this.name = name;
        this.price = price;
    };
    //* method
    //* prototype에 등록됨
    ProductLog () {
        ...
    };
    //* prototype에 등록되지 않음
    ProductLog2 = () => {           ...
    }
    //* 메소드를 등록할때 화살표  함수로 등록하게 되면
    //* prototype에 등록되지 않기 때문에
    //* 상속받은 인스턴스에서는 사용할 수 없음.
 };

```

### 2. field(필드)

```
class Product {
    //* 필드
    //* this.name = name이런 식으로 설정할 필요 없음.
    name = 'tom';
    price = 3000;
    constructor() {
    }
};

```

### 3. 정적 필드와 메소드(static)

```
class Product {
    //* Class자체에서 접근 가능
    //* 정적 메소드는 정적 프로퍼티만 접근 가능
    static name = 'tom';
    static getPrice {};
    constructor() {
    }
};

```

### 4. private

```
class Product {
    #name = "doney;
    #price = 0;
   constructor(name, price) {
        this.#name = name;
        this.#price = price;
    };
    //* private로 선언되면 접근이나 수정이 불가능
    //* 필드에 같이 정의 해야 한다
    get getPrice () {
        return this.#price;
    //* 클래스 내에서는 접근 가능
    }
 };

```

### 5. 상속

```
class Product {
    constructor(name, price) {
        this.name = name;
        this.price = price;
    };

    intoroduce () {
        return `${this.name}의 가격은 ${this.price}원 입니다.`
    };
};
//* extends 키워드로 상속 가능
class Sample extends Product {
    constructor(name, price, type) {
          //* 부모의 constructor를 호출
          super(name, price);
          this.type = type;
    };
    // *프로토타입 체이닝으로 introduce라는 메소드를
    //* 사용할 수 있음
    //* But 재 선언해 오버라이딩 됨.
    introduce () {
        return `이것의 타입은 ${this.type}의 한 종류 입니다.`
    };
    //* 부모의 메소드를 호출해 사용
    introduce2 () {
       return  super.introduce + ", " + this.introduce();
    };
};

class Product {
    static name = "막걸리";
    static price = 5000;
    static introduce() {
        console.log(`이것은 ${this.name} 입니다.`);
    };
};

class Sample() extends Product {
    static introduce () {
        super.introduce();
        console.log("이것의 종류는 술입니다.")
    };
};
Sample.introduce();
// 이것은 막걸리 입니다.
// 이것의 종류는 술입니다.
// 이렇게 사용 할 수 있다.

```