TypeScript에서의 "Entities"란?
TypeScript에서 "entities"는 주로 데이터베이스와 관련된 데이터 모델을 정의할 때 사용되는 클래스나 스키마를 의미합니다. ORM(Object-Relational Mapping) 라이브러리에서 특히 많이 사용되며, 데이터베이스의 테이블이나 컬렉션을 TypeScript 클래스로 표현한 것입니다.
예를 들어, TypeORM을 사용하는 경우, 엔티티 클래스는 데이터베이스 테이블의 구조를 정의하고 데이터를 다루기 위한 청사진 역할을 합니다. 다음은 TypeORM을 사용한 간단한 예제입니다:
// user.entity.ts
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
username: string;
@Column()
email: string;
// 추가적인 속성 및 메서드
}
위 코드에서 User 클래스는 데이터베이스의 users 테이블에 매핑됩니다. 각 속성은 테이블의 열(Column)을 나타내며, ORM은 이를 사용해 데이터베이스와 상호작용합니다. 이러한 구조를 사용하면 데이터베이스 스키마를 코드로 정의하고 유지보수하기가 훨씬 수월해집니다.
TypeScript의 클래스 개념
클래스는 객체 지향 프로그래밍(OOP)의 핵심 요소로, 객체(Instance)를 생성하기 위한 템플릿(Template)입니다. 클래스는 상태를 나타내는 속성과 동작을 정의하는 메서드로 구성됩니다. TypeScript에서 클래스는 다음과 같이 정의됩니다:
class Person {
private name: string;
public age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public 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."
위 코드에서 주요 요소는 다음과 같습니다:
- 속성: 클래스 내부에 정의된 변수로, 객체의 상태를 나타냅니다.
- 생성자: 객체 생성 시 초기화를 수행하는 특별한 메서드입니다.
- 메서드: 객체가 수행할 동작을 정의합니다.
Type 인터페이스
다음과 같은 코드도 TypeScript에서 자주 사용됩니다:
export interface Type<T = any> extends Function {
new (...args: any[]): T;
}
이 코드는 TypeScript에서 클래스 타입을 나타내는 인터페이스를 정의한 것입니다. 주요 특징은 다음과 같습니다:
- Function을 확장하며, 생성자 함수의 시그니처를 정의합니다.
- 제네릭을 지원하여 반환 타입을 유연하게 설정할 수 있습니다.
- new 키워드를 사용해 인스턴스를 생성할 수 있도록 정의됩니다.
이 인터페이스는 의존성 주입이나 런타임에서 클래스 인스턴스를 생성하는 작업에서 자주 사용됩니다.
TypeScript에서 클래스와 엔티티를 잘 활용하면 더 유지보수성이 높은 코드를 작성할 수 있습니다.