Static의 위험성

static : 정적, 고정

변할 일이 없고 객체와 상관없는 필드나 메소드에 사용이 가능하다. 풀어서 이야기 하자면,

Static이란,
변수 / 함수 / 클래스에 정적(static) 속성을 부여하여 클래스에서 객체를 생성하지 않고 변수나 함수를 호출 기능

굉장히 편해보이는 기능이지만, 남발 해서는 안되는 이유가 있다.

static을 선언하는 즉시(컴파일 타임) 데이터에 저장이 된다.(런타임 이전에 이미 생성)

그리고 어플리케이션을 종료하기 전까지 쭉 가지고 있다.

 

사용하지 않을 때나 필요하지 않을 때에도 갈비지컬렉터(GC)가 실행되지 않기 때문에 메모리 낭비가 심하다.

 

따라서 거의 변할 일이 없는 변수나 함수에만 사용하는 것을 권장한다.

편하다고 막 사용하다가 본인이 만들고 있는 프로젝트의 악영향을 많이 끼칠 수 있기 때문이다.

 

Static의 사용방법

 

예시 1) static 함수가 

한번 선언하면 없어지지 않는 특징을 이용하여 이런 식으로 사용이 가능하다.

// static 속성의 변수 생성
using ~~~

public Class Settings
{
	// static으로 만들어진 값은 모든 클래스의 인스턴스 공유
	public static int playerCount = 0;
    
    public Settings()
    {
    // 이 클래스로 만든 객체의 개수 파악용. 참조할 때마다 1씩 늘어날 것이다.
   	 playerCount++;
    }
}

만약 다른 클래스에서 객체로 생성한다면,

// Settings 클래스의 static 변수 사용
Public Class Game()
{
	void Start()
    {
    	Settings gameStart1 = new Settings();
        Settings gameStart2 = new Settings();
        Settings gameStart3 = new Settings();
        
        int callCount = Settings.PlayerCount;
        
        Debug.Log(callCount);
    }
}

callCount의 디버그는 3이 찍힐 것이다.

 

 

글 쓰다 보니까 static을 쓸곳이 있긴 할까? 싶어서 나중에 중요하다 생각하면 글을 갱신해야겠다

일단 여기까지.