static 키워드에 대해 알아보자
static은 "객체가 아닌 클래스 자체"에 속한다는 뜻이다.
보통 클래스의 멤버(변수or함수)는 new로 생성해야만 사용할 수 있다.
public class Mouse
{
public int weight = 1;
public void WeightUp()
{
weight++;
}
}
//일반 멤버는 이렇게 사용 한다.
Mouse m = new Mouse();
m.WeightUP();
하지만 static은,
public class GameManager
{
public static int score = 0;
public static void AddScore()
{
score++;
]
}
new 없이도 바로 접근 가능하다.
GameManager.AddScore();
즉, static 멤버는 모든 객체가 공유, 클래스 이름으로 접근이 가능하다.
1. static 변수
- 프로그램 전체에서 하나만 존재하는 전역 변수의 느낌.
- 두 객체를 만들어도 static 멤버변수를 가지고 있다면 두 객체 모두 같은 변수를 공유한다.
2. static 함수
- 객체 없이 호출할 수 있는 함수이다.
- new로 생성할 필요 없이 사용이 가능하고, 내부에서 인스턴스 멤버는 사용할 수 없다.
3. static 클래스
- 모든 멤버가 static이어야 하고, 인스턴스 생성 자체가 불가능하다.
- 프로그램 전체에서 공통적으로 사용할 유틸리티 클래스에 자주 쓰인다.
- static 멤버는 프로그램이 끝날 때까지 살아있다.
그래서 전역 변수처럼 작동하지만, 메모리도 계속 점유한다는 점을 기억해야 한다.
Unity에서는 static을 자주 볼 수 있다.
- 싱글톤패턴, ManagerClass, 유틸리티 클래스에 자주 사용된다.
- 주의해야 할 점으론 메모리 해제가 복잡하고 테스트가 어렵다.
- 남용은 지양하고 정말 전역적으로 공유되어야 하는 필요한 정보에만 사용하는게 좋다.