본문 바로가기

Programming Language/TypeScript

[ TypeScript ] Class 예제

  • 접근제한자 사용
// 접근 제한자 (Acces modifier) - public , protected , private
// 아무것도 정의하지 않고 사용하면 public 이 할당된다.
// public - 모든 접근을 허용. 자식 class , class 인스턴스 모두 접근가능
// protected - 같은 객체와 상속관계의 객체들만 허용 . 자식 클레스에서 접근 가능
// private - 현재 객체 내에서만 허용 . 해당 클레스 내부에서만 접근 가능

class Car {
    // private 를 # 으로 사용할 수 있다 _ 현재 객체 내에서만 허용
    // #name: string = "car";
    name: string = "car";
    // color: string; => public 추가로 사용하지 않아도 됨.
    constructor (public color : string){
        this.color = color;
    }
    start(){
        console.log("start");
        console.log(this.name)
    }
}

class Bmw extends Car {
    constructor(color: string){
        // super 키워드는 부모 오브젝트의 함수를 호출할 때 사용됩니다.
        super(color);
    }
    showName(){
        console.log(super.name);
    }
}

const bmw = new Car ("red"); // 인스턴스
const z4 = new Bmw ("black") // 인스턴스
console.log(z4.name);
  • Class 에서 readonly 추가, 수정 방법
class Car {
		// readonly 추가. z4.name 을 수정할 수 없게 된다.
		// 수정하려면 constructor 에서 작업을 해주어야 한다.
    readonly name: string = "car";
    constructor (public color : string, name:string){
        this.color = color;
				this.name = name; // 여기서 this를 붙여주지 않으면 수정된 new name 값이 뜨지 않는다.
    }
    start(){
        console.log("start");
    }
}

class Bmw extends Car {
    constructor(color: string, name:string){
        // super 키워드는 부모 오브젝트의 함수를 호출할 때 사용됩니다.
        super(color,name);
    }
    showName(){
        console.log(super.name);
    };
}

// const bmw = new Car ("red");
const z4 = new Bmw ("black" , "new name")
console.log(z4.name); 
  • 정적 멤버 변수 (Static member variable) _ study note Class 참고
class Car {
    readonly name: string = "car";
    // 정적 멤버 변수 (static member variable)
    static wheels = 4;
    constructor (public color : string, name:string){
        color = color;
        this.name = name;
    }
    start(){
        console.log("start");
        // static 으로 선언한 맴버변수는 this 가 아닌 class 명을 적어준다.
        console.log(Car.wheels);
    }
}

class Bmw extends Car {
    constructor(color: string , name:string){
        super(color,name);
    }
    showName(){
        console.log(super.name);
    }
}

const z4 = new Bmw ("black", "new name")
console.log(z4.name);
console.log(Car.wheels)
  • 추상 Class _ abstract

추상화는 property 나 method 에 이름만 선언해주고 구체적인 기능은 상속받는 쪽에서 구현해주는것을 의미한다.

abstract class Car {
    constructor (public color : string){
        color = color;
    }
    start(){
        console.log("start");
    }
    // 아무작업도 하지 않는 함수를 생성하고 abstract 를 붙여주면 아래에서 에러가 발생한다.
    // 추상 메소드는 반드시 상속받은 쪽에서 고쳐주어야 한다.
    abstract doSomting():void;
}

// 추상 클레스는 이렇게 new 를 이용해서 객체를 만들수 없다.
// const car = new Car("red")

// 오직 이렇게 상속을 통해서만 사용이 가능하다.
class Bmw extends Car {
    constructor(color: string){
        super(color);
    }
		doSomting(){
        console.log("fixed");
        alert(3);
    }
}

const z4 = new Bmw ("black")