[C#] static, 싱글톤

< static 변수, 메서드 >

 1. static 변수, 메서드가 되면 인스턴스끼리 공유하게 된다.

 2. 클래스 이름을 통해서만 접근이 가능하다.

 3. static 변수는 데이터 영역에 할당된다.

 

< static 클래스 >

1. static 클래스는 객체를 생성할 수 없다.

2. static 클래스의 모든 멤버는 static이어야 한다. => 데이터 영역에 저장되니까!

3. static 클래스는 상속될 수 없다.

4. static 클래스는 프로그램이 끝날 때까지 메모리에 남아있다.

5. static 클래스 멤버에 접근하려면 클래스명.멤버명을 사용한다.

 

< static을 사용하면? >

 - 런타임 이전에 만들어진다. 즉, 컴파일타임에 만들어진다.

 

< static이 필요한 상황 >

 - 인스턴스끼리 공유하는 멤버가 필요할 때(게임 점수, 플레이어 상태 등)

 - Awake()나 Start()에서 반복적으로 사용되는 게임 오브젝트나 컴포넌트의 참조를 저장할 때(지이이인짜 많은 참조가 필요한 경우!!)

 

< static 사용 예시 >

1. 클래스 내부에 static 변수를 둔다.

그 클래스의 인스턴스가 만들어질 때마다 static변수++ 하면 인스턴스가 만들어진 개수를 알 수 있다.

 

2. 한 씬에 50개의 적이 있고 모든 적이 player의 transform을 필요로 할 때, static을 사용하지 않으면 find함수 호출이 50번 일어나고 다른 스크립트에 static으로 player의 transform을 저장하고 이를 사용하면 find를 1번만 호출하면 된다.

 

< 컴파일타임과 런타임 >

컴파일타임 -> 런타임

컴파일타임 : 소스코드가 컴파일되어 기계어로 변환하는 과정

런타임 : 컴파일을 마친 프로그램이 사용자에 의해 실행되는 때

(static(컴파일타임에 할당, 데이터영역) <-> dynamic(동적할당)(런타임에 할당, 힙영역))

 

< static 사용을 피해야하는 이유 >

가비지컬렉터가 수거하지 않기 때문에 프로그램 시작~끝까지 메모리를 할당받아 성능 이슈가 있다.(메모리 낭비!)

그래서 static이 성능 향상에 도움이 되는 것이 명확하지 않을 때는 static을 사용하지 말아야 한다.

 

< 싱글톤 >

Manager 클래스, Audio 클래스와 같이 클래스가 메모리에서 하나의 인스턴스만 존재해야한다면, 싱글톤을 쓸 수 있다.

근데...싱글톤 역시 사용을 지양해야한다.

 

< static클래스 VS 싱글톤 >

또, 게임 재시작할 때 싱글톤은 개체가 삭제되면 null로 만들어주지만 static변수는 우리가 초기화를 해줘야한다.


출처

https://fiftiesstudy.tistory.com/219

 

유니티35_C#_20_static 스태틱

static (스태틱; 정적인, 고정된) static은 객체를 생성하지 않고도 멤버에 접근할 수 있게 만드는 키워드이다. class(클래스), field(필드), method(메서드) 등에 붙여서 static 멤버로 만들 수 있다. 정상적

fiftiesstudy.tistory.com

 

https://luv-n-interest.tistory.com/774

 

유니티에서 Static이란 [Unity]

static.. Dynamic의 반대로 알고 있다. 정적을 의미한다. 즉, 런타임 이전에 훨씬 이전에 수행되어 만들어진다는 뜻으로 알고 있다. 사실 선언했을 때 만들어진다. ** 메모리에서의 Data에 저장된다. 그

luv-n-interest.tistory.com

 

https://unityindepth.tistory.com/51

 

유니티에서 정적(static) 변수 사용하기

원문 보기 유니티에서 정적(static) 변수 사용하기이 글은 유니티3D 엔진에서 스크립트를 작성할 때, 정적 변수를 사용하는 방법에 대해서 설명하는 글이다. 이 글에 나와있는 예제 스크립트는 C#

unityindepth.tistory.com

 

https://moondongjun.tistory.com/27

 

디자인 패턴, Singleton Pattern (단일 인스턴스 패턴)

싱글턴 패턴이란? 디자인 패턴하면 가장 흔하게 접하게 되는 패턴으로, static 클래스와 비슷하게 단일 인스턴스로 클래스를 사용하는 개념입니다. 예제 Singleton.cs public abstract class Singleton where T :

moondongjun.tistory.com

 

https://luv-n-interest.tistory.com/1100

 

Singletone Pattern, 싱글톤 패턴 [디자인패턴]

아마도 디자인 패턴은 몰라도 그냥 싱글톤이라는 말은 어디서든 한 번쯤 들어봤을만한 단어가 아닌가 나도 디자인 패턴을 배우기 전에도 이미 뭐 싱글 뭐시기는 들어봤었다. 그럼 진짜로 알아

luv-n-interest.tistory.com

 

https://www.youtube.com/watch?v=C6CczyrkYXU 

https://blog.naver.com/PostView.naver?blogId=hjine01&logNo=222520302988 

 

[Unity, Tip] Static 변수 쓰지말자

개발을 하다보면 이것저것 계속해서 생각의 변화, 프로그래밍 구조의 메타가 바뀔때가 있다 이전에 프로그...

blog.naver.com

 

'CS > C#' 카테고리의 다른 글

[C#] Thread  (2) 2025.08.13
[C#] readonly  (1) 2025.07.21
[C#] 상속과 가상함수, 추상함수  (0) 2022.07.31
[C#] 델리게이트(Delegate)와 이벤트(Event)  (0) 2022.07.28
[C#] 컬렉션(Collection)과 제네릭 컬렉션(Generic Collection)  (0) 2022.07.26