"클래스는 객체를 찍는 틀이기 전에, 상태를 누가 어떻게 바꿀 수 있는지 정하는 경계야."
인스턴스가 가질 모양 선언하기
TypeScript 클래스에서는 필드를 먼저 선언하고 생성자에서 초기화하는 흐름이 기본이야. Counter 클래스의 count 필드에 초기값을 바로 줄 수도 있고, 생성자 인자로 받아 넣을 수도 있어. this는 현재 인스턴스를 가리키므로 메서드마다 같은 상태를 공유하지.
strictPropertyInitialization이 켜져 있으면 컴파일러는 필드가 생성 과정에서 반드시 값이 생기는지 확인해. 나중에 채울 거라는 막연한 약속 대신 생성자에서 초기화하거나, 실제로 선택적인 필드라면 타입에 ?나 undefined를 드러내야 해.
getter와 setter
get elapsed(): number처럼 getter는 프로퍼티처럼 읽히지만 내부에서 값을 계산해. setter는 대입 문법을 메서드 호출로 연결하고 입력을 검사할 수 있어. 둘은 실행되는 클래스 멤버이므로 타입만 남기고 지워지는 선언이 아니야.
클래스 선언은 값과 인스턴스 타입을 함께 만들어
class Counter {
count: number = 0;
increment(): void { this.count++ }
reset(): void { this.count = 0 }
}
클래스 선언은 생성자 값 Counter와 인스턴스 타입 Counter를 동시에 만들어. const c: Counter = new Counter()에서 왼쪽은 타입 이름이고 오른쪽은 생성자 호출이야.
클래스의 핵심은 문법 묶음이 아니라 상태 변경의 소유권이야. 필드, 생성자, 메서드가 같은 불변식을 지킬 때 클래스가 좋은 경계가 돼.