타입스크립트는 많은 OOP 언어에서 가능하듯이 하나의 클래스에 여러 생성자 본문을 지원하지 않습니다. 대신, 여러 생성자 시그니처(오버로드)를 선언한 다음, 인자를 수동으로 처리하는 단일 생성자 본문을 구현할 수 있습니다:
class User { name: string; age: number; constructor(name: string); constructor(name: string, age: number); constructor(name: string, age?: number) { this.name = name; this.age = age ?? 18; } } const u1 = new User('Alice'); // age = 18 const u2 = new User('Bob', 32); // age = 32
중요한 세부사항:
«생성자를 이렇게 구현할 수 있나요?»
undefined
class Test { constructor(x: number) {} constructor(x: string) {} }
**정답:** 아닙니다, 이 코드는 "중복 생성자 구현" 오류를 발생시킵니다. 타입스크립트는 생성자 본체에 대해 단 하나의 구현만 허용하며, 오버로드는 시그니처 형태로 정의해야 합니다.
### 주제에 대한 미숙지로 인한 실제 오류 사례.
---
> 이야기
프로젝트에서 Java의 경험을 복사하여 서로 다른 매개변수를 가진 두 생성자로 클래스를 구현하려고 했습니다. 결과적으로 타입스크립트는 컴파일 오류를 발생시키며, 프로젝트가 빌드되지 않아 오버로드를 시그니처로 변경해야 했습니다.
---
> 이야기
팀의 한 구성원이 오버로드된 생성자를 작성했지만, 선택적 매개변수(정의되지 않은 상태를 처리하지 않음)를 고려하는 것을 잊었습니다. 이로 인해 존재하지 않는 값에 접근하려고 하여 최소 매개변수 집합으로 인스턴스를 생성할 때 충돌이 발생했습니다.
---
> 이야기
생성자 오버로드가 선언되었지만, 생성자 본체가 호출 패턴과 일치하지 않았습니다. 한 경우에 필수 두 번째 인자가 예상되었지만, 시그니처에서는 선택적으로 지정되어 있었습니다. 이러한 충돌은 즉시 발견되지 않았지만, 단위 테스트를 작성할 때 드러났고 디버깅을 어렵게 만들었습니다.