ProgrammingLang/typescript

[typescript] 8. class 와 instance

jinkwon.kim 2019. 5. 1. 18:47
728x90
반응형

[typescript] 8. class 와 instance

 

1. Class 개념

  Class는 자동차 부품 설계도로 비유할 수 있습니다. 차동차 부품 설계도에는 부품의 재료, 부품의 기능 정의되어 있습니다. 이를 Class에 비유하면 재료는 속성, 기능은 method가 됩니다. 또한 부품의 기능이 여러 개 있듯이 Class도 여러 개의 method를 가질 수 있습니다.

 

- 부품 설계도를 Class와 비교

부품 설계도 Class
재료 속성
기능 method

* 속성 동의어 = 멤버 변수 

* method 동의어 =  멤버 함수

 

2. Class 설계의 핵심

  1) Class 설계시 속성과 연과 된 method만을 정의해야 합니다. (가장 중요)

  2) Class는 다른 Class와 결합도가 적어야 합니다.

    - 결합도(의존성)이 높을 수록 Class 설계를 잘 못 한 것입니다.

 

3. Class를 사용하면 좋은점

  1) 유지 보수에 좋다.

    - 프로그램을 만들 때 여러 개의 class를 사용하기 때문에 문제가 발생된 class만 수정하면 됩니다.

  2) 재 사용성이 뛰어나다.

    - 의존성이 낮은 class를 다른 곳에서 얼마든지 재 사용이 가능합니다. 예를 들면 debug loging하는 class를

      상속 받으면 모든 프로그램에서 사용 할 수 있습니다. 

4. instance(객체)

  instance(객체)는 class를 통해서 생성한 실체 입니다. 프로그램에서는 instance를 가지고 모두 조작을 하며, class를 가지고 조작을 하지 않습니다. 왜냐 하면 class는 개념 적인 것이고 instance가 실제이기 때문 입니다.

5. typescript에서 class 사용법

  1) Class의 구조

    typescript에서 class는 3박자로 이루어 집니다.

    (1) 속성

      - method를 사용해서 상태를 변경 시킬 변수 입니다.

    (2) 생성자 ( constructor() )

      - 객체를 생성 할 때 수행되는 method를 의미 합니다.

      - 생략 가능합니다.

    (3) method

      - 속성의 상태를 변화 시키는 동작을 합니다.

      - 속성과 관련된 다른 동작을 합니다.

      - method 내에서 속성을 접근 하기 위해서는 this 키워드를 사용합니다. this 는 객체 자체를 가리킵니다.

 

  2) instance 생성 밥법

      new 연산자를 이용하여 instance를 생성면 실제 메모리 할당 받았다는 것을 의미합니다. 이후 객체의 모든 제어는

    객체 참조 변수를 통해서 모두 제어 합니다.

  3) sample code

class Engine {
    /**
     * 속성
     */
    fuel: number ;      // 엔진 연료통
    power: number;      // 엔진 파워
    cylinder0: number;  // 엔진 실린더0
    cylinder1: number;  // 엔진 실린더1

    /**
     * 생성자
     * 기본 값 10으로 설정
     */
    constructor(fuel: number = 10) {
        this.fuel = fuel;
    }

    /**
     * method
     */
    powerOnOff(powerFlag: number ) {
        this.power = powerFlag;
        this.engineWork();
    }

    engineWork() {
        for (let i = 0; i < this.fuel; i++) {
            if (i % 2) {
                this.cylinder0 = 0;
                this.cylinder1 = 1;
            } else {
                this.cylinder1 = 0;
                this.cylinder0 = 1;
            }

            if (this.cylinder0) {
                console.log("쿵!");
            }

            if (this.cylinder1) {
                console.log("쾅!!!");
            }
        }
    }
}

let realEngine: Engine = new Engine();
realEngine.powerOnOff(1);

 

  * 번외 : 솔직히 Class가 없어도 프로그램은 만들 수 있습니다. 예를 들면 C언어에는 Class가 존재하지 않습니다. 그런데도 프로그래밍하는데 전혀 지장은 없습니다. 다만 C언어에는 구조체와 함수 포인터가 존제하여 Class를 유사하게 구현은 할 수 있습니다. 실제로 C언어로 배포되는 OpenSource Library들은 구조체와 함수로 포이터로 Class처럼 구현해서 많이 사용합니다.

728x90
반응형