상세 컨텐츠

본문 제목

0927 TIL - 프로젝트 2일차

스파르타 코딩캠프/'24 Today I Learned

by lucar 2024. 9. 27. 21:05

본문

저번에 말한대로 오늘은 싱글톤 디자인패턴에 대해 공부해보자.

 

간단하게 설명하자면 특정 클래스의 인스턴스가 단 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

관련글 더보기