[Flutter] static keyword

jiyoung·2022년 7월 1일
1

🎃static이란?

인스턴스에 귀속되지 않고, 클래스 통째로 귀속이 되는것. 즉, 함수 또는 변수가 통째로 클래스에 귀속이 되는것을 말한다.

class Employee{
  static String building;
  String name;
  
  Employee(
    String name,
  ):this.name = name;
  
  void printNameAndBuilding(){
    //static을 사용하였기 때문에, building에서는 this를 사용하지 않는다.(사용자체 불가)
    print('제 이름은 ${this.name}이고, ${building} 건물에서 근무 중 입니다.');
  }
  
}

building 변수에만 static을 사용한것을 볼수있다.
또한 printNameAndBuildingname앞에는 this를 붙였으나, building에는 붙이지 않은것을 볼수있다.

이는 하나의 인스턴스 별이 아닌, 클래스 자체에 귀속되기 때문이다.

void main() {
	Employee chulsoo = new Employee('철수');
    Employee youngHee = Employee('영희');
    
    chulsoo.printNameAndBuilding(); //제 이름은 철수이고, null 건물에서 근무 중 입니다.
    youngHee.printNameAndBuilding(); //제 이름은 영희이고, null 건물에서 근무 중 입니다.
}

printNameAndBuilding() 호출시엔 당연히 building값을 할당해 주지않았기 때문에 null값이 나온다.

이제 건물정보를 넣어줘야 하는데, 이때 인스턴스별로 지정해주는것이 아닌 클래스자체에 직접접근하여 변경한다.(building변수가 static이기 때문)

void main(){
	Employee.building = '여의도 공유오피스';
    chulsoo.printNameAndBuilding(); //제 이름은 철수이고, 여의도 공유오피스 건물에서 근무 중 입니다.
    youngHee.printNameAndBuilding(); //제 이름은 영희이고, 여의도 공유오피스 건물에서 근무 중 입니다.
}

건물정보의 변수값이 변경된 것을 확인할 수 있다.

Static keyword이기 때문에, 위와 같이 클래스에 직접 접근하여 사용한다.
Static변수가 아닌 name은 기존처럼 "chulsoo.name="이런식으로 인스턴스별로 바꿔줘야 하지만 Static은 위와 다르게, 인스턴스 자체에 귀속되지 않고 클래스통째로 귀속되기 때문에 해당 클래스로 생성된 인스턴스의 모든 값이 변경된다.

🎃static 변수를 사용하지 않는다면?

아래와 같이 각각 인스턴스 별로 변경해줘야 했을것이다.

"chulsoo.building = '강남';"

"youngHee.building = '판교';"

static처럼 고정되는 값을 하나로 두면, for문같은 반복문을 가지고 인스턴스별로 설정해주는등의 일을 줄일수 있다.

0개의 댓글