Dart에서 static 키워드: 궁금증 해결 가이드

2024. 6. 21. 16:00Flutter/Dart Language

반응형

Dart에서 static 키워드는 클래스, 함수, 변수를 정적으로 선언하는 데 사용됩니다.

마치 집의 기둥처럼, static으로 선언된 요소들은 객체와 독립적으로 존재하며, 모든 인스턴스에서 공유됩니다.

 

1. static 클래스

  • 클래스 선언 앞에 static 키워드를 사용하면 클래스 자체를 정적으로 만듭니다.
  • 정적 클래스는 객체 생성 없이도 클래스 내부의 static 요소들을 사용할 수 있습니다.
  • 마치 집의 지붕이나 벽처럼, 모든 방에서 공통적으로 사용되는 공간을 의미합니다.
class MathUtils {
  // 정적 클래스 MathUtils
  static int add(int a, int b) {
    return a + b;
  }

  static int multiply(int a, int b) {
    return a * b;
  }
}

void main() {
  print(MathUtils.add(10, 20)); // 30 출력
  print(MathUtils.multiply(5, 3)); // 15 출력
}
 

2. static 함수

  • 함수 선언 앞에 static 키워드를 사용하면 함수를 정적으로 만듭니다.
  • 정적 함수는 객체 생성 없이도 클래스 이름으로 직접 호출할 수 있습니다.
  • 마치 집 안의 전기 스위치처럼, 어디에서나 작동하는 공통적인 기능을 의미합니다.
class Counter {
  int count = 0;

  static int getCount() {
    return count;
  }

  void increment() {
    count++;
  }
}

void main() {
  print(Counter.getCount()); // 0 출력

  Counter counter1 = Counter();
  counter1.increment();

  print(Counter.getCount()); // 1 출력
}
 

3. static 변수

  • 변수 선언 앞에 static 키워드를 사용하면 변수를 정적으로 만듭니다.
  • 정적 변수는 모든 인스턴스에서 공유되는 단 하나의 변수입니다.
  • 마치 집 안의 공동 화장실처럼, 모든 사람이 공용으로 사용하는 공간을 의미합니다.
class Calculator {
  static int _counter = 0; // 정적 변수 _counter

  static int calculate(int a, int b, String operator) {
    switch (operator) {
      case "+":
        _counter++;
        return a + b;
      case "-":
        _counter++;
        return a - b;
      default:
        return 0;
    }
  }

  static int get counter => _counter; // getter를 통해 정적 변수 _counter 접근
}

void main() {
  print(Calculator.calculate(10, 5, "+")); // 15 출력
  print(Calculator.calculate(15, 7, "-")); // 8 출력
  print(Calculator.counter); // 2 출력
}
 

4. static 키워드 사용 시 주의 사항

  • static 요소는 객체와 독립적으로 존재하기 때문에, 인스턴스 변수나 메서드를 직접 접근하거나 변경할 수 없습니다.
  • static 요소는 클래스 자체와 관련된 데이터나 기능을 표현하는 데 사용해야 합니다.
  • static 키워드를 무분별하게 사용하면 코드의 이해도를 저하시킬 수 있으므로 주의해야 합니다.

5. static 키워드 활용 심화 가이드

 

5.1 상수 정의

  • static 키워드와 const 키워드를 함께 사용하면 컴파일 타임 상수를 정의할 수 있습니다.
  • 컴파일 타임 상수는 프로그램 실행 중에 변경되지 않는 고정된 값입니다.
  • 마치 집의 벽돌처럼, 변하지 않는 기본적인 구조를 의미합니다.
class MathConstants {
  static const double pi = 3.14159265358979323846;
  static const int e = 2.7182818284590452354;
}

void main() {
  print(MathConstants.pi); // 3.14159265358979323846 출력
  print(MathConstants.e); // 2.7182818284590452354 출력
}
 

5.2 클래스 유틸리티

  • static 함수와 변수를 사용하여 클래스 관련 유틸리티를 제공할 수 있습니다.
  • 마치 집의 도구 상자처럼, 클래스와 관련된 다양한 기능을 담아 사용할 수 있습니다.
class StringUtils {
  static String toUpperCase(String input) {
    return input.toUpperCase();
  }

  static String toLowerCase(String input) {
    return input.toLowerCase();
  }

  static bool isBlank(String input) {
    return input.trim().isEmpty;
  }
}

void main() {
  print(StringUtils.toUpperCase("Hello, Dart!")); // HELLO, DART! 출력
  print(StringUtils.toLowerCase("WORLD")); // world 출력
  print(StringUtils.isBlank("")); // true 출력
}
 

5.3 성능 향상

  • static 변수는 메모리 공간을 효율적으로 사용하여 성능을 향상시킬 수 있습니다.
  • 모든 인스턴스에서 공유되는 변수이기 때문에, 반복적으로 생성되는 데이터를 줄일 수 있습니다.
  • 마치 집의 공동 공간처럼, 여러 사람이 공동으로 사용하는 자원을 의미합니다.
class Point {
  static final int _originX = 0;
  static final int _originY = 0;

  int x;
  int y;

  Point(this.x, this.y);

  factory Point.fromOrigin(int dx, int dy) {
    return Point(_originX + dx, _originY + dy);
  }
}

void main() {
  Point point1 = Point(10, 20);
  Point point2 = Point.fromOrigin(30, 40);

  print(point1.x); // 10 출력
  print(point2.y); // 40 출력
}
 

5.4 주의 사항 및 고려 사항

  • static 요소는 객체와 독립적으로 존재하기 때문에, 인스턴스 변수나 메서드를 직접 접근하거나 변경할 수 없습니다.
  • static 요소는 클래스 자체와 관련된 데이터나 기능을 표현하는 데 사용해야 합니다.
  • static 키워드를 무분별하게 사용하면 코드의 이해도를 저하시킬 수 있으므로 주의해야 합니다.
  • static 요소는 메모리 누수를 발생시킬 수 있으므로 주의해서 사용해야 합니다. 특히, static 변수에 대한 참조가 해제되지 않으면 메모리 누수가 발생할 수 있습니다.

6. 맺음말

 

Dart에서 static 키워드는 다양한 방식으로 활용될 수 있는 강력한 도구입니다.

이 블로그를 통해 static 키워드 활용의 심화적인 내용과 실제 개발에서 유용한 팁들을 이해하셨기를 바랍니다.

 

 

수발가족을 위한 일기장 “나비일기장”

 

https://play.google.com/store/apps/details?id=com.maccrey.navi_diary_release

 

구글플레이 앱 배포의 시작! 비공개테스트 20명의 테스터모집을 위한 앱 "테스터 쉐어"

 

https://play.google.com/store/apps/details?id=com.maccrey.tester_share_release

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

카카오톡 오픈 채팅방

https://open.kakao.com/o/gsS8Jbzg

반응형