이번 글에서는 클래스와 상속을 중심으로 객체 지향 프로그래밍(OOP) 사례를 살펴봅니다. 이러한 개념을 통해 실제 엔티티를 구조화되고 유지 관리 가능한 방식으로 모델링할 수 있습니다. 모듈식 재사용 가능한 코드 작성에 대한 인사이트를 제공하는 TypeScript에서 OOP의 심층적인 내용을 살펴보세요.
1. 클래스
클래스는 프로퍼티와 메서드가 있는 객체를 만들기 위한 청사진입니다. 코드에서 실제 엔티티를 모델링하는 방법을 제공합니다.
기본 클래스 예제:
class Animal {
// 속성
name: string;
age: number;
// 생성자
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
// 메서드
makeSound(): void {
console.log('Some generic sound');
}
}
// Animal 클래스의 인스턴스 생성
const myAnimal = new Animal('Leo', 5);
console.log(myAnimal.name); // Output: Leo
myAnimal.makeSound(); // Output: Some generic sound
이 예제에서 Animal
은 속성(name
과 age
), 이러한 속성을 초기화하는 생성자, 메서드(makeSound
)를 가진 클래스입니다.
2. 상속
상속을 사용하면 클래스가 다른 클래스로부터 프로퍼티와 메서드를 상속하여 코드 재사용을 촉진하고 계층적 관계를 만들 수 있습니다.
class Dog extends Animal {
// 추가 속성
breed: string;
// 생성자
constructor(name: string, age: number, breed: string) {
// 기본 클래스(Animal)의 생성자 호출하기
super(name, age);
// 파생 클래스 속성 초기화
this.breed = breed;
}
// makeSound 메서드 재정의
makeSound(): void {
console.log('Woof! Woof!');
}
// Dog 전용 추가 메서드
fetch(): void {
console.log('Fetching the ball!');
}
}
// Dog 클래스의 인스턴스 생성
const myDog = new Dog('Buddy', 3, 'Labrador');
console.log(myDog.name); // Output: Buddy
console.log(myDog.breed); // Output: Labrador
myDog.makeSound(); // Output: Woof! Woof!
myDog.fetch(); // Output: Fetching the ball!
이 예제에서 Dog
는 Animal
의 서브클래스입니다. Animal
의 프로퍼티와 메서드를 상속받으며 자체 프로퍼티와 메서드를 가질 수도 있습니다. super
키워드는 기본 클래스의 생성자를 호출하는 데 사용됩니다.
3. 접근 제어자
접근 제어자(Access Modifier)는 클래스 멤버(프로퍼티 및 메서드)의 표시 여부를 제어합니다. 타입스크립트는 public
, private
, protected
접근 제어자를 지원합니다.
class Person {
private age: number;
constructor(private name: string, age: number) {
this.age = age;
}
getDetails(): string {
return `${this.name}, ${this.age} years old.`;
}
}
const john = new Person('John', 30);
console.log(john.getDetails()); // Output: John, 30 years old.
// console.log(john.age); // Error: Property 'age' is private and only accessible within class 'Person'.
이 예제에서 age
은 private
로 표시되어 Person
클래스 내에서만 액세스할 수 있습니다.
4. 추상 클래스
추상 클래스는 인스턴스화할 수 없는 클래스이며 다른 클래스의 베이스 클래스로 사용되는 경우가 많습니다.
abstract class Shape {
abstract calculateArea(): number;
}
class Circle extends Shape {
constructor(private radius: number) {
super();
}
calculateArea(): number {
return Math.PI * this.radius ** 2;
}
}
const myCircle = new Circle(5);
console.log(myCircle.calculateArea()); // Output: 78.53981633974483
여기서 Shape
는 calculateArea()
추상 메서드를 가진 추상 클래스입니다. Circle
클래스는 Shape
를 확장하고 calculateArea()
에 대한 구현을 제공합니다.
결론
타입스크립트에서 클래스와 상속을 사용하는 이러한 OOP 관행을 사용하면 모듈화되고 재사용 가능하며 체계적으로 정리된 코드를 만들 수 있습니다. 이를 통해 실제 엔티티와 관계를 반영하는 방식으로 복잡한 시스템을 모델링할 수 있습니다.
'Language > TypeScript' 카테고리의 다른 글
[TypeScript] 고급 타입, 매핑된 타입, keyof/typeof (4) | 2024.04.30 |
---|---|
[TypeScript] Set/Get, Protected, Private/Public/Static Members (6) | 2024.04.24 |
[TypeScript] Any, Void, Never, Null, Strict Null Checks (2) | 2024.04.19 |
[TypeScript] Typing Functions and Signatures (1) | 2024.04.18 |
[TypeScript] Union, Literal, Tagged Types (2) | 2024.04.17 |
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!