• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

싱글톤 및 인스턴스, C#파일간의 호출관계 질문

23.12.16 18:14 작성 조회수 266

0

static Managers s_Instance; //유일성이 보장된다

public static Managers instance { get { Init(); return s_Instance; } } // 유일한 매니저를 갖고온다

InputManager _input = new InputManager();

ResourceManager _resource = new ResourceManager();

public static InputManager input { get { return instance._input; } }

public static ResourceManager resource { get { return instance._resource; } }

 

c#파일간에 어떤식으로 호출되고 연관되는지 이해가 어렵습니다 질문이 모호해서 죄송합니다.

 

순서가 어떻게 되는지 잘모르겠습니다.

 

제일처음 start로 시작하는게 playerController.cs에서 시작해서 void start()안에 Managers.input.KeyAction += OnKeyboard; 로

inputManager.cs에 public Action KeyAction = null; 널로 되어있는 이 값에 OnKeyboard 가 저장되게하고 이 뒤부터 순서를 잘모르겠습니다.

 

 

Managers.cs

InputManager _input = new InputManager();

public static InputManager input { get { return instance._input; } }

_input 생성자 input메서드 이거 두개가 어떻게 사용되는지 모르겠습니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.18

안녕하세요, 인프런 AI 인턴입니다. 질문하신 내용은 C#에서의 싱글톤 패턴 사용과 static 변수를 통한 객체간의 호출 관계에 관련된 것으로 보입니다. 싱글톤 패턴은 특정 클래스의 인스턴스가 하나만 생성되어 전역에서 접근할 수 있도록 하는 디자인 패턴입니다.

여기서 Managers 클래스 안에 정의된 s_Instance는 싱글톤 객체를 참조하기 위한 static 변수로, Managers 클래스의 단 하나뿐인 인스턴스를 가리킵니다. instance라는 static property는 이 싱글톤 인스턴스에 접근할 때 사용됩니다. Init() 메소드는 싱글톤 인스턴스가 초기화되지 않았을 경우 초기화를 진행하는 메소드일 것으로 추정됩니다.

InputManager _input = new InputManager();

이 코드는 Managers 클래스 내에 InputManager 타입의 비-static 멤버 변수 _input을 선언하고 새로운 InputManager 인스턴스를 생성하여 할당합니다.

public static InputManager input { get { return instance._input; } }

input은 static property로, 이를 통해 외부에서 Managers의 싱글톤 인스턴스의 _input에 접근할 수 있습니다.

playerController.cs 파일에서 Managers.input.KeyAction += OnKeyboard; 코드는 playerController가 시작될 때 (void start() 내에서) Managers 클래스의 싱글톤 인스턴스가 가지고 있는 InputManagerKeyAction 이벤트에 OnKeyboard 메소드를 구독합니다. InputManagerKeyAction 이벤트가 발생하면 OnKeyboard 메소드가 호출됩니다.

이러한 흐름을 요약하면 다음과 같습니다:
1. Managers 클래스는 싱글톤 객체를 가지며, 이를 통해 InputManagerResourceManager의 인스턴스에 접근합니다.
2. playerController.cs에서 게임이 시작될 때 (start 메소드 내) InputManagerKeyAction에 대한 이벤트 핸들러로 OnKeyboard 메소드를 등록합니다.
3. 키보드 입력이나 다른 입력 이벤트가 발생하면 InputManager 내에서 이를 처리하고, KeyAction 이벤트가 발생하면 이에 등록된 OnKeyboard 메소드가 호출됩니다.
4. 이로 인해 입력에 대한 처리가 playerController에서 정의된 로직에 따라 실행됩니다.

간단히 말해 Managers 클래스는 각종 매니저 클래스(InputManager, ResourceManager 등)의 인스턴스를 싱글톤으로 관리하며, 여러 곳에서 이 클래스들을 쉽게 접근할 수 있도록 해주는 역할을 합니다. 이를 통해 다른 스크립트에서 Managers의 property를 통해 InputManager 또는 ResourceManager에 접근할 수 있게 됩니다.