본문 바로가기
공부/TypeScript

TypeScript - Class

by 아찌방 2024. 11. 30.

 

클래스는 객체를 정의하기 위한 청사진 역할을 하며, 속성과 메서드를 포함할 수 있습니다.

(*청사진이란 미례 계획, 구상 등을 말하는 겁니다.)

 

기본 구조

class 클래스이름 {
  // 필드(속성) 선언
  propertyName: 타입;

  // 생성자
  constructor(매개변수: 타입) {
    this.propertyName = 매개변수;
  }

  // 메서드
  methodName(): 반환타입 {
    return this.propertyName;
  }
}

 

 


1. 선언과 사용

class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  greet(): string {
    return `Hello, my name is ${this.name} and I am ${this.age} years old.`;
  }
}

// 클래스 인스턴스 생성
const person = new Person("Alice", 30);
console.log(person.greet()); // Hello, my name is Alice and I am 30 years old.

 


2. 접근 제한자(Access Modifiers)

public 모든 곳에서 접근 가능 (기본값).
private 클래스 내부에서만 접근 가능.
protected 클래스 내부 및 상속받은 클래스에서만 접근 가능.
class Animal {
  public name: string;       // 어디서나 접근 가능
  private age: number;       // 클래스 내부에서만 접근 가능
  protected type: string;    // 내부 및 상속 클래스에서만 접근 가능

  constructor(name: string, age: number, type: string) {
    this.name = name;
    this.age = age;
    this.type = type;
  }

  public getAge(): number {
    return this.age; // private 속성 접근 가능
  }
}

class Dog extends Animal {
  constructor(name: string, age: number) {
    super(name, age, "Dog");
  }

  public getType(): string {
    return this.type; // protected 속성 접근 가능
  }
}

const dog = new Dog("Buddy", 5);
console.log(dog.name); // "Buddy"
// console.log(dog.age); // 오류! private 속성은 외부에서 접근 불가
console.log(dog.getType()); // "Dog"

 


3. 읽기 전용(Read only) 속성

readonly 키워드를 사용하면, 속성의 값을 초기화 후 변경할 수 없도록 설정할 수 있습니다.

class Car{
	readonly brand: string;
    
    constructor(brand: stirng){
    	this.brand = brand;
    }
    
    getBrand(): string{
    	return this.brand;
    }
}

const car = new Car("Toyota");
consol.log(car.getBrand()); // "Toyota"
//car.brand = "Honda"; // 오류! readonly 속성은 수정 불가

 


4. Getter와 Setter

getset 키워드를 사용해 속성을 캡슐화하여 속성의 접근과 값 설정 방식을 제어할 수 있습니다.

class Employee{
	private _salary: number = 0;
    
    get salary(): number {
    	return this.salary
    }
    
    set salary(amount: number{
    	if(amount < 0){
        	throw new Error("Salary cannot ne negative");
        }
        this._salary = amount
    }
}

const employee = new Employee();
employee.salary = 5000 // setter 호출
console.log(employee.salary); // getter 호출 : 500

5. 상속(Inheritance)

extands 키워드를 사용해 다른 클래스를 상속할 수 있습니다.

class Parent {
  sayHello(): string {
    return "Hello from Parent!";
  }
}

class Child extends Parent {
  sayHello(): string {
    return "Hello from Child!";
  }
}

const child = new Child();
console.log(child.sayHello()); // "Hello from Child!"

6. 추상 클래스(Abstract Class)

abstract 키워드를 사용해 추상 클래스를 정의할 수 있습니다. 추상 클래스는 인스턴스를 생성할 수 없으며, 상속된 클래스에서 구현해야 할 메서드를 정의할 때 사용됩니다.

abstract class Shape {
  abstract getArea(): number; // 구현을 강제하는 추상 메서드
}

class Circle extends Shape {
  radius: number;

  constructor(radius: number) {
    super();
    this.radius = radius;
  }

  getArea(): number {
    return Math.PI * this.radius * this.radius;
  }
}

const circle = new Circle(10);
console.log(circle.getArea()); // 314.159...

7. 인터페이스와 클래스

클래스는 인터페이스를 구현(implement)하여 구조를 정의할 수 있습니다.

interface Flyable{
	fly(): void;
}

class Bird implements Flyable {
	fly(): void{
    	console.log("Flying!");
    }
}

const bird = new Bird();
bird.fly(); // "Flying!"
728x90

'공부 > TypeScript' 카테고리의 다른 글

TypeScript란?  (0) 2024.11.30