본문 바로가기

[C#] static에 관한 글

@Xenawn2025. 7. 21. 10:07
반응형

급 싱글톤 작성중인데 이런 코드를 짰었다

아래는 안되는 코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    private static GameManager instance;
    public static GameManager Instance { get { Init();  return instance; } }

 

    public  void Init()
    {
        if(instance == null)
        {
            GameObject go = (GameObject.Find("GameManager"));
            if(go == null)
            {
                go = new GameObject("GameManager");
                go.AddComponent<GameManager>(); 
                
            }
            DontDestroyOnLoad(go);
            instance = go.GetComponent<GameManager>();
            
               
            
        }
    }
}

 

이 코드를 보고 static 프로퍼티에서 왜 그냥 Init()은 안될까?라는 의문점을 갖기 시작

깊게 생각하면 너무 당연한 거였다. 너무 성급하게 생각한 듯하다.

# Static은 정적 메모리 영역에 있는 걸 잊지말자.

static은 정적 메모리에 올라가는

즉, 실행시 미리 메모리에 올라간다.

하지만 Init()과 같은 인스턴스를 동적 메모리에 올라가는 것이기 때문에 실행중에 올라간다.

 

미리 올라가있는  static Instance 프로퍼티에

실행중에 동적으로 생성되는 Init()을 부른다면 당연히 부르지 못한다. (실행전에 Init은 미리 생성되지 못하였으니까)

 

아래는 수정된 코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    private static GameManager instance;
    public static GameManager Instance { get { Init();  return instance; } }


    static  void Init()
    {
        if(instance == null)
        {
            GameObject go = (GameObject.Find("GameManager"));
            if(go == null)
            {
                go = new GameObject("GameManager");
                go.AddComponent<GameManager>(); 
                
            }
            DontDestroyOnLoad(go);
            instance = go.GetComponent<GameManager>();
            
               
            
        }
    }
}

 

 

반응형

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

[C#] C#에서 string 비교 연산  (0) 2025.08.21
[C#] 박싱과 언박싱  (2) 2025.08.18
인터페이스  (0) 2025.03.04
[C#] delegate  (0) 2025.02.28
[C#] TextRPG  (0) 2025.02.13
Xenawn
@Xenawn :: Xenawn

제넌 게임개발 블로그

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차