TypeScript에서는 클래스 내에 정적 메서드와 인스턴스 메서드를 정의할 수 있습니다. 이 두 종류의 메서드는 호출 방식과 사용 시 주의할 점에서 차이를 보입니다.
정적 메서드와 인스턴스 메서드란?
정적 메서드는 클래스의 인스턴스화 없이 호출할 수 있는 메서드이며, 주로 특정 로직을 수행하거나 유틸리티 함수를 정의하는 데 사용됩니다. 반면, 인스턴스 메서드는 클래스의 인스턴스에 속한 메서드로, 해당 인스턴스의 상태나 속성을 조작하는 데 사용됩니다.
암묵적인 호출 규칙
만약 정적 메서드에서 클래스 내부의 다른 메서드를 호출하려면, 이 작업을 할 때 몇 가지 주의할 점이 있습니다. TypeScript에서는 정적 메서드에서 인스턴스 메서드를 암묵적으로 호출할 수 없습니다. 이는 정적 메서드와 인스턴스 메서드 간의 구분을 명확히 하기 위한 것입니다.
다음은 이를 보다 명확히 보여주는 TypeScript 코드 예시입니다.
class MyClass {
static staticMethod() {
this.instanceMethod(); // Error: "this" cannot be referenced in a static method.
}
instanceMethod() {
console.log('Instance method');
}
}
const obj = new MyClass();
MyClass.staticMethod(); // 정상 호출
obj.instanceMethod(); // 정상 호출
위 코드에서 staticMethod
내부에서 instanceMethod
를 호출하려고 하면 TypeScript 컴파일러는 오류를 발생시킵니다. 이를 통해 정적 메서드 내에서는 인스턴스 메서드를 암묵적으로 호출할 수 없다 는 사실을 확인할 수 있습니다.
따라서, 정적 메서드에서 인스턴스 메서드를 호출해야 할 경우에는 직접적으로 클래스 인스턴스를 생성하여 해당 메서드를 호출하거나, 정적 메서드에서 인스턴스 메서드로 코드를 재구성해야 합니다.
결론
TypeScript에서는 정적 메서드와 인스턴스 메서드를 사용함에 있어서, 메서드 간의 호출 관계에 주의해야 합니다. 명확한 호출 규칙을 이해하고 코드를 설계함으로써 불필요한 오류를 방지할 수 있습니다.
이상으로 정적 메서드와 인스턴스 메서드의 암묵적인 호출 규칙에 대해 알아보았습니다. 감사합니다.
참고 문헌: