static
은 프로그래밍에서 클래스 레벨의 속성이나 메소드를 정의할 때 사용되는 키워드입니다. static
키워드를 사용하면 그 속성이나 메소드는 클래스의 인스턴스가 아니라 클래스 자체에 속하게 됩니다. 이는 모든 인스턴스가 같은 값을 공유하게 되며, 인스턴스를 생성하지 않고도 해당 속성이나 메소드를 사용할 수 있다는 것을 의미합니다.
class Employee {
static String? building;
String name;
Employee(this.name);
void printNameAndBuilding() {
print('제 이름은 $name입니다. $building 건물에서 근무 중입니다.');
}
static void printBuilding() {
print('저는 $building 건물에서 근무 중입니다.');
}
}
위의 Dart 클래스 Employee
는 직원을 나타냅니다. 여기에는 두 가지 주요한 구성 요소가 있습니다:
Static Variable: static String? building;
building
은 static
변수로, Employee
클래스의 모든 인스턴스에 의해 공유됩니다. 이는 모든 Employee
객체가 같은 건물에서 일한다고 가정할 때 유용합니다.building
은 nullable
(?
가 붙어 있음)로 선언되었기 때문에, 이 변수는 null
값을 가질 수 있습니다.Instance Variable: String name;
name
은 각 Employee
인스턴스마다 고유한 값을 가질 수 있는 인스턴스 변수입니다.Instance Method: void printNameAndBuilding()
printNameAndBuilding
메소드는 인스턴스 메소드로, 각 직원의 이름과 건물을 출력합니다.static
변수 building
에 접근할 수 있습니다.Static Method: static void printBuilding()
printBuilding
은 static
메소드로, 클래스 레벨에서 정의되어 있어 인스턴스를 생성하지 않고도 호출할 수 있습니다.static
변수만 사용할 수 있습니다.메모리 효율성: 모든 인스턴스가 static
변수를 공유하기 때문에, 각 인스턴스마다 별도로 메모리를 할당할 필요가 없습니다. 이는 메모리 사용을 줄이는 데 도움이 됩니다.
인스턴스 생성 없이 접근 가능: static
메소드나 변수는 인스턴스를 생성하지 않고도 클래스 이름을 통해 직접 접근할 수 있습니다.
공유 데이터: static
변수는 모든 인스턴스에 의해 공유되므로, 한 곳에서 값을 변경하면 모든 인스턴스에 영향을 미칩니다.
static
변수나 메소드는 인스턴스 변수나 메소드와 독립적이므로, static
메소드 내에서는 this
키워드를 사용할 수 없습니다.static
변수나 메소드는 프로그램 실행 시점에 메모리에 로드되며, 프로그램이 종료될 때까지 메모리에 남아 있습니다. 따라서 과도한 static
사용은 메모리 낭비를 초래할 수 있습니다.