Dart static get

이건선·2023년 8월 13일
0

Flutter

목록 보기
26/30

static get

dart 언어에서 staticget은 클래스 내에서 사용되는 키워드들입니다. 그러나 이 두 키워드는 완전히 다른 목적과 기능을 가지고 있습니다.

  1. static

    • static 키워드는 해당 멤버 변수나 메서드가 인스턴스에 속하지 않고 클래스 자체에 속한다는 것을 나타냅니다.

    • 따라서 static으로 선언된 멤버는 클래스의 인스턴스를 생성하지 않고도 사용할 수 있습니다.

    • static 멤버는 클래스의 모든 인스턴스에 걸쳐 공유됩니다. 즉, 이는 모든 인스턴스가 동일한 메모리 주소의 static 멤버를 공유한다는 것을 의미합니다. 따라서 하나의 값만 가지게 됩니다.

예시

class MyClass {
  static int staticVariable = 0;  // static 멤버 변수
  int instanceVariable = 0;
  
  testStatic (instanceVariable) {
    return staticVariable + instanceVariable; // static 멤버 + 멤버 변수
  }
}

void main() {
  MyClass obj1 = MyClass();
  MyClass obj2 = MyClass();

  // 인스턴스 변수는 각 객체마다 독립적입니다.
  obj1.instanceVariable = 10;
  print(obj1.instanceVariable);  // 출력: 10
  print(obj2.instanceVariable);  // 출력: 0

  // static 변수는 모든 객체에 걸쳐 공유됩니다.
  MyClass.staticVariable = 5;
  print('1. static 변수 수정 ${MyClass.staticVariable}');  // 출력: 5
  print('1. 테스트 메서드 ${obj1.testStatic(10)}'); // 테스트 메서드 15
  print('1. 테스트 메서드 ${obj2.testStatic(100)}'); // 테스트 메서드 105

  MyClass.staticVariable = 10000;  // static 변수를 수정
  print('2. static 변수 수정 ${MyClass.staticVariable}');  // 출력: 10000
  print('2. 테스트 메서드 ${obj1.testStatic(10)}'); // 테스트 메서드 10010
  print('2. 테스트 메서드 ${obj2.testStatic(100)}'); // 테스트 메서드 10100

  // obj1과 obj2 모두 동일한 staticVariable 값을 참조합니다.
  // staticVariable은 MyClass를 통해서만 접근할 수 있습니다.
}
  1. get

    • get 키워드는 Dart에서 getter 메서드를 정의할 때 사용합니다.

    • 클래스의 프로퍼티 값을 가져오기 위한 메서드로, 직접 프로퍼티에 접근하는 것처럼 사용될 수 있습니다.

    • set 키워드와 함께 사용되어 값을 설정할 수도 있습니다.

    • 캡슐화: 객체의 내부 상태를 외부로부터 숨기고, 특정 방법으로만 접근을 허용하면서 객체의 내부를 외부의 직접적인 조작으로부터 보호할 수 있습니다.

    • 유지보수: 외부에서 직접 변수에 접근하는 대신 getter를 사용하면, 나중에 내부 구현이 변경되더라도 외부 코드에 영향을 주지 않아 유지보수가 쉽습니다.

예시

class MyClass {
  int _privateVariable = 0;

  // getter 메서드
  int get variable => _privateVariable;

  // setter 메서드
  set variable(int value) {
    _privateVariable = value;
  }
}

void main() {
  MyClass obj = MyClass();
  print('getter 호출 ${obj.variable}');  // getter 호출
  obj.variable = 5;     // setter 호출
  print('다시 getter 호출하여 수정된 값을 출력 ${obj.variable}');  // 다시 getter 호출하여 수정된 값을 출력
}
profile
멋지게 기록하자

1개의 댓글

comment-user-thumbnail
2023년 8월 13일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기