이번 스터디에서는 static 키워드에 대해 알아보려 한다.
간단하게 Static키워드에 대해 말하자면,
인스턴스에 귀속되지 않고, 클래스 통째로 귀속이 되는것. 함수 또는 변수가 통째로 클래스에 귀속이 되는것을 말한다.
빠른 이해를 위해 소스 코드 확인 및 실행해보자.
간단한 직원이라는 클래스를 생성해보자.
조건은 아래와 같다.
1. 근무하고 있는 직원의 이름은 사람마다 다르다.
2. 직원들이 근무하는 건물은 동일하다.(한 건물)
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에는 붙이지 않은것을 볼수있다.
이는 하나의 인스턴스별로가 아닌, 클래스 자체에 귀속되기 때문이다.
바로 main함수에서 실행을 통해 자세히 알아보자.
void main() {
Employee chulsoo = new Employee('철수');
Employee youngHee = Employee('영희');
chulsoo.printNameAndBuilding();
youngHee.printNameAndBuilding();
}
제 이름은 철수이고, null 건물에서 근무 중 입니다.
제 이름은 영희이고, null 건물에서 근무 중 입니다.
최초 호출시엔 당연히 building값을 할당해 주지않았기 때문에 null값이 나온다.
이제 건물정보를 넣어줘야 하는데, 이때 인스턴스별로 지정해주는것이 아닌, 클래스자체에 직접접근하여 변경한다.
void main(){
Employee.building = '여의도 공유오피스';
chulsoo.printNameAndBuilding();
youngHee.printNameAndBuilding();
}
제 이름은 철수이고, 여의도 공유오피스 건물에서 근무 중 입니다.
제 이름은 영희이고, 여의도 공유오피스 건물에서 근무 중 입니다.
건물정보의 변수값이 변경된 것을 확인할 수 있다.
Static keyword기 때문에, 위와 같이 클래스에 직접 접근하여 사용한다.
Static변수가 아닌 name은 기존처럼 "chulsoo.name="이런식으로 인스턴스별로 바꿔줘야 하지만
Static은 위와 다르게, 인스턴스 자체에 귀속되지 않고 클래스통째로 귀속되기 때문에
해당 클래스로 생성된 인스턴스의 모든 값이 변경된다.
void main(){
Employee.building = '강남 공유오피스';
chulsoo.printNameAndBuilding();
youngHee.printNameAndBuilding();
}
제 이름은 철수이고, 강남 공유오피스 건물에서 근무 중 입니다.
제 이름은 영희이고, 강남 공유오피스 건물에서 근무 중 입니다.
위와 같이 해도 마찬가지로 변경이된다.
아무리 많은 인스턴스를 생성한다 하더라도, static으로 선언된 변수는 클래스에
직접 접근하여 한번만 변경해도 모든게 바뀐다.
만약 static을 사용하지 않았더라면 각각 인스턴스 별로 변경해줘야 했을것이다. (아래처럼)
"chulsoo.building = '영등포';"
"youngHee.building = '일산';"
......
이렇게 고정되는 값을 하나로 두면, for문같은 반복문을 가지고 인스턴스별로 설정해주는등의 일을 줄일수 있다.
따라서 이런경우엔 클래스 자체에 귀속시키는 static을 사용하는것이 좋다.
예제로 보니 이해하기 조금 더 빠른듯 싶다.
Static 스터디 끝.