안녕하세요! 이번 포스팅은 유니티에서의 싱글톤패턴에 대한 포스팅 입니다!
싱글톤이란 프로그래밍 디자인 패턴 중 게임에서 가장 빈번하게 쓰이는 패턴중 하나인데요!
싱글톤 패턴은 오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공합니다!
쉽게 설명 하자면 한개의 클래스 인스턴스를 갖는걸 보장하고, 전역적인 접근점을 제공한다는 것은 어디에서나 해당 클래스의 인스턴스에 접근할 수 있다는 뜻입니다!
더쉽게 말해서 어디에서나 가져다 쓸 수 있는 클래스를 제공하게 된다! 라고 하면 좋겠네요!
유니티에 적용을 해보자면 게임을 관리하는 매니저(Manager) 계열의 클래스가 싱글톤패턴에 적합하다고 할 수 있겠습니다.
그럼 싱글톤에 대한 요약은 여기 까지 하고 싱글톤이 어떤 역할을 할지 요약해 보자면.
싱글톤의 역할
1. 게임 시스템에서 전체를 관장
2. 게임 시스템의 전역 변수
3. 씬 로드 시 데이터가 파괴되지 않고 유지
4. 여러 오브젝트가 접근 할 수 있는 데이터 활용
등 게임이 동작함에 있어서 전반적인 데이터를 쉽게 조율하는 역할을 할 수 있는게 싱글톤 패턴입니다!
유니티에서 싱글톤패턴을 사용하지 않은 채로 다른씬을 로드하게 되면 모든 객체와 데이터 들이 파괴되는데요.
싱글톤 패턴을 사용하면 다른 씬을 로드해도 파괴되지 않은 채로 데이터를 가져갈 수 있게 됩니다!
코드와 예제를 통해 더 자세히 알아 보도록 하겠습니다!
우선 유니티에서 Hierarchy창에 Create Empty를 눌러 Objact를 생성 후 이름을 GamaManager 로 바꿔 보도록 하겠습니다.
그리고 GameManager의 Inspector 창에서 new script를 생성해 주겠습니다! 이름은 GameManager로 할게요!
짜잔 Script가 생성 된걸 볼 수 있습니다! GameManager 같은 경우 사람들이 많이사용하는 개념이기 때문에 유니티 상의 Script도 다른 Script들의 아이콘 과는 좀 다르게 생겼다는걸 볼 수 있습니다!
이제 스크립트를 편집 해 보도록 하겠습니다!
예제는 아래의 스틱코드의 글을 참고 하였습니다!
https://stickode.com/detail.html?no=1214
예제에 나와있는 코드들을 그대로 사용해 보도록 하겠습니다! 이 코드는 GameManager를 static으로 선언하고 만약 GamaManager 스크립트를 가진 다른 오브젝트가 존재하면 모든 오브젝트를 파괴한다는 예제입니다!
여러 GamaManager를 남용 할 수 없게 만드는 기본적인 안전장치 코드라고 보면 좋겠네요!
이제 이렇게 만들어진 스크립트 안의 변수 또는 함수들은
GameManager.instance.(변수 혹은 함수명)
이 간단한 코드를 통해서 어디서든 불러내서 사용 할 수 있게됩니다! 정말 쉽죠?
하지만 이런 간편한 싱글톤 패턴으로 도 주의해야 할 점이 있는데요 그것은!!
주의 할 점!
쉽게 사용 가능하다 보니 모든 데이터나 객체를 이곳에 마구잡이로 넣어서 사용하게 될 수 있는데 그러면 안되요!
접근이 쉬운만큼 마구잡이로 사용하다 보면 그 간편함이 규모가 커질수록 더 복잡한 상황을 만들어 낼 수 있어요!
그래서 나중에 재정리 할 떄가 더 고통스러운 상황이 생깁니다!
꼭! Script는 용도에 맞게 분리해서 사용하도록 해요~!
이번 싱글톤 포스팅은 여기 까지 하겠습니다!
'C#' 카테고리의 다른 글
[C#][Unity] On Click()에 대해서. (0) | 2021.08.23 |
---|---|
[C#][Unity] 로딩 화면 만들기 (0) | 2021.08.15 |
[C#][Unity]타이머 만들기! (0) | 2021.08.12 |
[C#][Unity] 유니티 생명주기 (0) | 2021.07.11 |
[C#][JAVA]C# 클라이언트 JAVA 서버 간 TCP/IP Socket 데이터 통신 (0) | 2021.06.21 |