Dart 언어 오답노트 : 25. static

샤워실의 바보·2023년 10월 26일
0
post-thumbnail

static은 프로그래밍에서 클래스 레벨의 속성이나 메소드를 정의할 때 사용되는 키워드입니다. static 키워드를 사용하면 그 속성이나 메소드는 클래스의 인스턴스가 아니라 클래스 자체에 속하게 됩니다. 이는 모든 인스턴스가 같은 값을 공유하게 되며, 인스턴스를 생성하지 않고도 해당 속성이나 메소드를 사용할 수 있다는 것을 의미합니다.

예제 코드 분석

class Employee {
  static String? building;
  String name;
  
  Employee(this.name);
    
  void printNameAndBuilding() {
    print('제 이름은 $name입니다. $building 건물에서 근무 중입니다.');
  }
  
  static void printBuilding() {
    print('저는 $building 건물에서 근무 중입니다.');
  }
}

위의 Dart 클래스 Employee는 직원을 나타냅니다. 여기에는 두 가지 주요한 구성 요소가 있습니다:

  1. Static Variable: static String? building;

    • buildingstatic 변수로, Employee 클래스의 모든 인스턴스에 의해 공유됩니다. 이는 모든 Employee 객체가 같은 건물에서 일한다고 가정할 때 유용합니다.
    • buildingnullable(?가 붙어 있음)로 선언되었기 때문에, 이 변수는 null 값을 가질 수 있습니다.
  2. Instance Variable: String name;

    • name은 각 Employee 인스턴스마다 고유한 값을 가질 수 있는 인스턴스 변수입니다.
  3. Instance Method: void printNameAndBuilding()

    • printNameAndBuilding 메소드는 인스턴스 메소드로, 각 직원의 이름과 건물을 출력합니다.
    • 이 메소드 안에서 static 변수 building에 접근할 수 있습니다.
  4. Static Method: static void printBuilding()

    • printBuildingstatic 메소드로, 클래스 레벨에서 정의되어 있어 인스턴스를 생성하지 않고도 호출할 수 있습니다.
    • 이 메소드 안에서는 인스턴스 변수에 접근할 수 없고 static 변수만 사용할 수 있습니다.

Static의 특징 및 장점

  1. 메모리 효율성: 모든 인스턴스가 static 변수를 공유하기 때문에, 각 인스턴스마다 별도로 메모리를 할당할 필요가 없습니다. 이는 메모리 사용을 줄이는 데 도움이 됩니다.

  2. 인스턴스 생성 없이 접근 가능: static 메소드나 변수는 인스턴스를 생성하지 않고도 클래스 이름을 통해 직접 접근할 수 있습니다.

  3. 공유 데이터: static 변수는 모든 인스턴스에 의해 공유되므로, 한 곳에서 값을 변경하면 모든 인스턴스에 영향을 미칩니다.

주의할 점

  • static 변수나 메소드는 인스턴스 변수나 메소드와 독립적이므로, static 메소드 내에서는 this 키워드를 사용할 수 없습니다.
  • static 변수나 메소드는 프로그램 실행 시점에 메모리에 로드되며, 프로그램이 종료될 때까지 메모리에 남아 있습니다. 따라서 과도한 static 사용은 메모리 낭비를 초래할 수 있습니다.
profile
공부하는 개발자

0개의 댓글