저번에 말한대로 오늘은 싱글톤 디자인패턴에 대해 공부해보자.
간단하게 설명하자면 특정 클래스의 인스턴스가 단 1개만 생성되는 것을 보장하는 디자인패턴이다.
클래스를 만들고 생성자를 통해 여러번 호출하더라도 최초의 호출된 인스턴스를 재활용하게된다.
크기가 크고 많은 연산을 가지고 있는 클래스의 경우 여러번 호출한다면 그 무거운걸
여러 번 메모리에 불러오게 되면서 많은 양의 리소스를 잡아먹게 된다.
하지만! 싱글톤 패턴을 이용한다면 최초의 호출 후에 그 객체를 사용할 수 있도록 공유하기 때문에
리소스의 낭비가 적어진다고 볼 수 있다.
또한 이 패턴은 Unity에서 굉장히 자주 쓰이는 패턴이다.
한창 C# 프로젝트 중이므로 C#에서의 예시를 들어보자.
internal class GameManager
{
private static GameManager instance; //인스턴스 필드 생성
public static GameManager Instance
{
get
{
if (instance == null)
instance = new GameManager();
return instance;
}
}
}
static영역에 최초로 instance객체를 선언하고
이후 Instance를 호출할 때 instance의 값이 null이라면 새로운 static값을 입력해주고
null이 아니라면 호출된 instance를 불러오게 된다.
즉 호출을 할 때마다 이미 실행중인 instance객체를 통해 클래스 필드를 구현하기 때문에
성능이 중요시되거나 큰 프로젝트에서 자주 애용되기도 하고
싱글톤 내부에 자주 사용하는 특정 클래스의 함수를 불러와서 가져다놓는다면
싱글톤.Instatnce.함수 로 간단하게 호출할 수 있다.
그리고 Queue를 통한 작업관리도 알아보자.
public class JobQueue
{
Queue<Action> _jobQueue = new Queue<Action>();
// 내부적으로 Queue 아이템을 삽입한다.
public void Push(Action job)
{
// Job을 Queue에 삽입한다.
_jobQueue.Enqueue(job);
}
// Job 이 있는지 확인 하고 Job을 실행한다.
public void Flush()
{
// Job이 모두 처리 될때까지 무한 반복
while (true)
{
// Job을 꺼내온다.
Action? action = Pop();
// 꺼내온 Job 이 null 이면 종료
if (action == null) return;
// Job이 있으면 실행
action.Invoke();
}
}
// Job을 꺼내온다.
Action? Pop()
{
// Job이 없으면 Null을 반환
if (_jobQueue.Count == 0)
return null;
// Job을 꺼내서 반환한다.
return _jobQueue.Dequeue();
}
}
어제 설명한대로
Action을 통한 람다 메소드를 Push를 통해 받아와서 그걸 Queue에 쌓은 뒤 들어온 순서대로 처리하는 방법이다.
자주 긁어 가려고 여기다가 올려놨다.
이 아래로는 일기인데
그리고 확실히 노션을 통해 칸반보드를 만들어서 프로젝트를 진행하니 편했다.
위 사진은 일부러 담당자를 안보이게 설정해놨지만
본인이 구현하고 싶은 내용을 선착순으로 담당자 배정해서 가져가서 구현하는 방식으로 진행했다.
장점으로는 누가 어느걸 작성 중인지 한 눈에 알아보기 편했으며
단점으로는 누가 얼마나 만들었는지 한 눈에 들어와서 눈치보인다.
반대로 생각하면 눈치보이니까 그 만큼 서로 열심히 할 수 밖에 없는 상황이 조성되었다.
TTE
1001 TIL - C# 프로젝트 4일차 (0) | 2024.10.01 |
---|---|
0930 TIL - 프로젝트 3일차 (1) | 2024.10.01 |
0926 TIL? - 팀 프로젝트 돌입 (0) | 2024.09.26 |
0925 TIL - C# 알고리즘1 (0) | 2024.09.25 |
0924 TIL - Re: C#으로 Text RPG 만들기 3 (0) | 2024.09.24 |