Flutter/Dart - Static 변수, 메소드 선언

Dart에서 static 변수를 선언하거나 메소드를 선언하는 방법을 소개합니다.

1. Static 변수

클래스 안에 Static으로 변수를 선언하면, 클래스 객체를 생성하지 않아도 변수에 접근할 수 있습니다. 또한, 클래스의 static 변수를 다른 객체나 외부와 공유할 수 있습니다.

Syntax

아래와 같이 static 변수를 정의할 수 있습니다.

  • 외부에서 ClassName.staticVariable로 접근하여 값을 읽거나 변경할 수 있음
class ClassName {
  static int staticVariable = 0;
}

Example

아래와 같이 static 변수를 사용할 수 있습니다.

Person.counter는 static 변수이며, 서로 다른 클래스 객체에서 이 변수를 공유합니다.

  • p1과 p2 객체를 생성하면 공유하고 있는 static 변수 counter가 2로 증가됨
  • Person.counter으로 외부에서 값을 읽을 수 있음
  • Person.counter = 10 처럼 외부에서 접근하여 값을 변경할 수 있음
class Person {
  String name;

  Person(String n) : name = n {
    counter = counter + 1;
  }

  static int counter = 0;
}

void main() {
  Person p1 = Person("Alex");
  Person p2 = Person("Alex");
  print("Person.counter = ${Person.counter}");

  Person.counter = 10;
  print("Person.counter = ${Person.counter}");
}

Output:

Person.counter = 2
Person.counter = 10

2. Static 메소드

Static 메소드는 클래스의 객체 생성 없이 사용할 수 있는 메소드입니다.

Syntax

Static 메소드는 클래스 안에서 아래와 같이 선언할 수 있습니다.

  • Static 메소드 안에서 멤버 변수를 사용할 수 없고, Static 변수나 인자만 접근할 수 있음
  • Static 메소드에서 다른 Static 메소드를 호출할 수 있음, 멤버 메소드는 호출 안됨
  • ClassName.methodName()으로 객체 생성 없이 Static 메소드를 호출할 수 있음
class ClassName{
  static returnType methodName() {
    // statements
  }
}

Example

다음과 같이 Static 메소드를 선언하고 호출할 수 있습니다.

  • Static 메소드에서 멤버 변수 접근 시 컴파일 에러 발생
  • Static 변수는 사용 가능
class Person {
  String name;

  Person(String n) : name = n {
    counter = counter + 1;
  }

  static int counter = 0;

  static String getNameAndCounter(String yourName) {
    return "name: ${yourName}, counter: ${counter}";
  }
}

void main() {
  print("getNameAndCounter() = ${Person.getNameAndCounter("Alex")}");

  Person.counter = 10;
  print("getNameAndCounter() = ${Person.getNameAndCounter("John")}");
}

Output:

getNameAndCounter() = name: Alex, counter: 0
getNameAndCounter() = name: John, counter: 10
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha