Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- C#
- 오브젝트 풀링
- 2870번 c++
- 백준 1103번
- Lv2
- 백준 17070번
- 2870번 수학숙제 c++
- 백준 c++ 2468번
- dfs
- Unity
- 2870번
- 백준 17070번 c++
- 플레이어 이동
- 프로그래머스
- 2870번 수학숙제
- c++
- 수학숙제
- 코테
- 백준 1103번 c++
- 2468 c++
- Algorithm
- 유니티
- 17070번
- 코딩테스트
- 백준 c++ 2870번
- Lv.3
- 백준
- Beakjoon
- 백준 2870번
- 백준 1103번 게임
Archives
- Today
- Total
주녘공부일지
[Unity] 싱글톤 패턴 (Singleton Pattern) 본문
싱글톤 패턴 (Singleton Pattern) 이란?
특정 클래스의 객체(instance)가 오직 하나만 존재하기 원할 때 사용하는 디자인 패턴으로 최초 한번만 메모리를 할당하고 메모리에 인스턴스를 만들어 재사용하는 디자인 패턴
- 즉, 오직 한 개의 클래스 인스턴스만 갖도록 보장하며, 전역 접근점은 제공하는 디자인 패턴
1) 싱글톤 패턴의 장점
- 사용하지 않으면 인스턴스를 생성하지 않으며, 고정된 메모리 영역을 사용하므로 메모리 낭비 방지가 가능
- 다른 클래스의 인스턴스들이 데이터를 공유하기 편리한 등의 쉬운 접근성
2) 싱글톤 패턴의 단점 ( 전역 변수 )
- 코드 이해 난이도를 높일 수 있음 ( 참조가 너무 많아 버그 추적이 어려움, 등 )
- 인스턴스들 간에 결합도가 높아짐 ( 객체 지향 설계 원칙에 어긋남 )
- 전역 변수는 멀티스레딩 같은 동시성 프로그래밍에 알맞지 않음
-> 멀티 쓰레드 환경에서 동기화처리를 안하면 문제가 발생할 수 있음 ( 코드 성능 저하 )
싱글톤 패턴을 적용한 예제 ( Class Managers )
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Managers : MonoBehaviour
{
static Managers s_Instance; // 유일성 보장
public static Managers Instance { get{ Init(); return s_Instance; } }
void Start()
{
Init();
}
static void Init()
{
if(s_Instance == null)
{
GameObject go = GameObject.Find("@Managers");
if(go == null)
{
go = new GameObject { name = "@Managers" };
go.AddComponent<Managers>();
}
DontDestroyOnLoad(go);
s_Instance = go.GetComponent<Managers>();
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
void Start()
{
Managers mg = Managers.Instance;
}
}
'GameDevelopment > [Unity] Class, Pattern' 카테고리의 다른 글
[Unity] MonoBehaviour Life Cycle (생명주기) (0) | 2023.09.05 |
---|---|
[Unity] Animation Blending (0) | 2022.03.23 |
[Unity] StateMachineBehaviour (0) | 2022.03.23 |
[Unity3D] Camera (0) | 2022.03.01 |
[Unity3D] Physics.Raycast (+LayerMask) (0) | 2022.02.24 |