static 클래스 멤버를 만드는 이유는 다음과 같습니다:
1. 공유 데이터 및 동작: static 클래스 멤버는 해당 클래스의 모든 인스턴스 간에 공유됩니다. 이는 데이터나 동작을 모든 인스턴스가 공유해야 할 때 유용합니다. 예를 들어, 로그인 정보나 애플리케이션 설정과 같은 데이터를 static 멤버로 관리할 수 있습니다.
2. 유틸리티 함수: static 메서드는 특정 인스턴스에 종속되지 않고 클래스 레벨에서 사용할 수 있는 유틸리티 함수를 제공합니다. 이러한 함수는 인스턴스의 상태에 액세스하지 않고 독립적으로 작동해야 할 때 유용합니다. 예를 들어, 수학적인 계산이나 문자열 조작과 같은 유틸리티 함수는 정적 메서드로 구현할 수 있습니다.
3. 인스턴스 생성 없이 사용: static 멤버는 클래스 이름을 통해 직접 액세스할 수 있으므로 클래스의 인스턴스를 생성하지 않고도 사용할 수 있습니다. 이는 편의성과 코드의 가독성을 높일 수 있습니다.
4. 네임스페이스 기능: static 클래스 멤버를 사용하면 관련된 기능이나 상수를 하나의 클래스로 그룹화하여 네임스페이스로 사용할 수 있습니다. 이를 통해 코드 구조를 체계적으로 유지하고 충돌을 방지할 수 있습니다.
static 클래스 멤버는 클래스의 인스턴스와 별개로 존재하므로 전역 변수를 피하고 모듈화된 구조를 유지할 수 있습니다. 또한, 클래스의 인스턴스에 의존하지 않고 공통적인 동작이나 데이터를 관리할 수 있어 유지 보수성과 확장성을 향상시킬 수 있습니다.
static 클래스 멤버의 사용 예시를 몇 가지 제시해 드리겠습니다:
1. 유틸리티 함수: 유틸리티 함수를 정적 메서드로 구현하여 다양한 곳에서 사용할 수 있습니다. 예를 들어, 다음은 숫자 배열에서 최대값을 찾는 유틸리티 함수를 static 메서드로 구현한 예입니다:
class MathUtils {
static findMax(numbers: number[]): number {
return Math.max(...numbers);
}
}
const numbers = [5, 2, 8, 1, 9];
const maxNumber = MathUtils.findMax(numbers);
console.log(maxNumber); // 출력: 9
2. 상수 값: static 멤버를 사용하여 클래스 수준에서 상수 값을 관리할 수 있습니다. 예를 들어, 다음은 수학적인 상수인 파이(π) 값을 static 속성으로 가지는 MathConstants 클래스의 예입니다:
class MathConstants {
static readonly PI: number = 3.141592653589793;
}
console.log(MathConstants.PI); // 출력: 3.141592653589793
3. 데이터 공유: static 속성을 사용하여 클래스의 모든 인스턴스 간에 데이터를 공유할 수 있습니다. 예를 들어, 다음은 Car 클래스에서 모든 Car 인스턴스의 총 생성 개수를 추적하는 static 속성을 사용한 예입니다:
class Car {
static totalCarsCreated: number = 0;
constructor() {
Car.totalCarsCreated++;
}
}
const car1 = new Car();
const car2 = new Car();
console.log(Car.totalCarsCreated); // 출력: 2
4. 네임스페이스 기능: 클래스의 static 멤버를 활용하여 네임스페이스 기능을 구현할 수 있습니다. 예를 들어, 다음은 Geometry 네임스페이스 내에서 도형의 넓이를 계산하는 static 메서드를 가진 클래스를 구현한 예입니다:
namespace Geometry {
export class Rectangle {
static calculateArea(width: number, height: number): number {
return width * height;
}
}
export class Circle {
static calculateArea(radius: number): number {
return Math.PI * radius * radius;
}
}
}
const rectangleArea = Geometry.Rectangle.calculateArea(5, 10);
const circleArea = Geometry.Circle.calculateArea(3);
console.log(rectangleArea); // 출력: 50
console.log(circleArea); // 출력: 28.274333882308138
위의 예시에서 static 클래스 멤버를 사용하여 유틸리티 함수, 상수 값, 데이터 공유, 네임스페이스 기능을 구현하고 활용한 것을 확인할 수 있습니다.