본문 바로가기
Dart

[Dart] 언어 기본기 - Static편

by 가드 2022. 12. 13.
728x90

※ 시작 전 참고사항 : 다트패드테스트 진행

Static

static 키워드는 변수나 메소드에 사용되며 static 키워드를 사용하면 클래스가 메모리에 로딩될 때 자동으로 생성이 된다. 즉, static은 instance에 귀속되지 않고 class에 귀속된다. 그래서 객체를 생성하지 않아도 사용이 가능하며 속도가 빠르다.

void main() {
  Employee dudu = Employee('두두');
  Employee bobo = Employee('보보');
  dudu.printInfo(); // 이름은 두두입니다. null 건물에서 근무하고 있습니다.
  bobo.printInfo(); // 이름은 보보입니다. null 건물에서 근무하고 있습니다.
  
  Employee.building = '트레지움';
  dudu.printInfo(); // 이름은 두두입니다. 트레지움 건물에서 근무하고 있습니다.
  bobo.printInfo(); // 이름은 보보입니다. 트레지움 건물에서 근무하고 있습니다.
  
  Employee.printBuilding(); // 저는 트레지움 건물에서 근무하고 있습니다.
}

class Employee {
  static String? building;
  final String name;
  
  Employee(this.name);
  
  printInfo() {
    print('이름은 ${name}입니다. $building 건물에서 근무하고 있습니다.');
  }
  
  static printBuilding() {
    print('저는 $building 건물에서 근무하고 있습니다.');
  }
}
  • Employee 클래스에 static String? building 변수와 String name 변수가 정의되어 있고 생성자로는 name 변수 값을 받아 대입하며 이름과 건물명 정보를 출력해주는 printInfo() 메소드와 static printBuilding() 메소드를 가지고 있다.
  • main() 메소드에서 '두두'와 '보보'의 이름을 가진 Employee Instance가 각각 생성되었고 printInfo()를 호출했더니 이름은 각 두두와 보보가 출력이 되었지만 building 변수는 null이기에 null로 출력이 되었다.
  • 그럼 Employee.buling = '트레지움' 이라는 빌딩명을 대입했고 다시 printInfo() 메소드를 호출했더니 이름은 서로 다르지만 빌딩 이름은 동일하게 '트레지움'으로 출력이 되었다.

이것이 Instance와 static의 차이이다. 이름 정보인 '두두'와 '보보'는 Instance화 되어 있어서 서로 다른 정보를 가지고 있지만 static building 변수는 클래스에 귀속이 되어 있기 때문에 builiding에 접근하면 모두 동일한 값이 조회가 된다.

static method도 마찬가지이다. 클래스에 귀속이 되어 있기 때문에 Employee.printBuilding()으로 바로 실행이 가능하다.

이런식으로 static 키워드를 이용하여 변수 또는 메소드에 적용할 수 있다.

300x250

댓글