인스턴스에 귀속되지 않고, 클래스 통째로 귀속이 되는것. 즉, 함수 또는 변수가 통째로 클래스에 귀속이 되는것을 말한다.
class Employee{
static String building;
String name;
Employee(
String name,
):this.name = name;
void printNameAndBuilding(){
//static을 사용하였기 때문에, building에서는 this를 사용하지 않는다.(사용자체 불가)
print('제 이름은 ${this.name}이고, ${building} 건물에서 근무 중 입니다.');
}
}
building 변수에만 static
을 사용한것을 볼수있다.
또한 printNameAndBuilding에 name앞에는 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
은 위와 다르게, 인스턴스 자체에 귀속되지 않고 클래스통째로 귀속되기 때문에 해당 클래스로 생성된 인스턴스의 모든 값이 변경된다.
아래와 같이 각각 인스턴스 별로 변경해줘야 했을것이다.
"chulsoo.building = '강남';"
"youngHee.building = '판교';"
static처럼 고정되는 값을 하나로 두면, for문같은 반복문을 가지고 인스턴스별로 설정해주는등의 일을 줄일수 있다.