클래스는 객체를 정의하기 위한 청사진 역할을 하며, 속성과 메서드를 포함할 수 있습니다.
(*청사진이란 미례 계획, 구상 등을 말하는 겁니다.)
기본 구조
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
get과 set 키워드를 사용해 속성을 캡슐화하여 속성의 접근과 값 설정 방식을 제어할 수 있습니다.
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 |
---|