Unity 디자인패턴 - 오브젝트 풀(Object Pool)
오브젝트 풀 오브젝트 풀(Object Pool)은 게임 개발에서 자주 사용되는 디자인 패턴 중 하나로, 오브젝트의 생성과 소멸을 최소화하여 성능을 향상시키는 방법입니다. 주로 게임 내에서 빈번하게 생성되고 삭제되는 오브젝트를 미리 생성해두고, 필요할 때마다 재활용하여 메모리 할당 및 해제 오버레드를 줄입니다. 오브젝트 풀의 구성 요소: 1. 풀(Pool): 미리 생성된 오브젝트들을 보관하고 있는 컨테이너입니다. 2. 오브젝트 생성 및 초기화: 초기에 풀에 포함될 오브젝트를 생성하고 초기화합니다. 3. 오브젝트 재사용: 오브젝트가 필요한 경우, 풀에서 빼내서 사용하고 필요한 상태로 초기화합니다. 4. 오브젝트 반환: 사용이 끝난 오브젝트를 다시 풀에 반환합니다. 오브젝트 풀 패턴의 예시 코드: C# 유니티..
2023.08.17
Unity 디자인패턴 - 싱글톤(Singleton)
싱글톤 패턴 싱글톤(singleton)패턴의 정의는 단순하다. 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 싱글톤 패턴을 구현하는 방법은 여러가지가 있지만, 여기서는 객체를 미리 생성해두고 가져오는 가장 단순하고 안전한 방법을 소개하겠다. public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { //생성자는 외부에서 호출을 하지 못하게 private으로 지정. } public static Singleton getInstance() { return instance; } public void Say() { Console.WriteLine("Hello"); } } 싱글톤 패턴은..
2023.08.17
홀짝 구분하기
문제 설명 자연수 n이 입력으로 주어졌을 때 만약 n이 짝수이면 "n is even"을, 홀수이면 "n is odd"를 출력하는 코드를 작성해 보세요. 제한사항 1 ≤ n ≤ 1,000 입출력 예 입력 #1 100 출력 #1 100 is even 입력 #2 1 출력 #2 1 is odd using System; public class Example { public static void Main() { String[] s; Console.Clear(); s = Console.ReadLine().Split(' '); int a = Int32.Parse(s[0]); if(a%2 == 0){ Console.WriteLine("{0} is even", a); } else{ Console.WriteLine("{0}..
2023.07.13
문자열 돌리기
문제 설명 문자열 str이 주어집니다. 문자열을 시계방향으로 90도 돌려서 아래 입출력 예와 같이 출력하는 코드를 작성해 보세요. 제한사항 1 ≤ str의 길이 ≤ 10 입출력 예 입력 #1 abcde 출력 #1 a b c d e using System; public class Example { public static void Main() { String s; Console.Clear(); s = Console.ReadLine(); foreach(char c in s){ Console.WriteLine(c); } } }
2023.07.13
문자열 붙여서 출력하기
문제 설명 두 개의 문자열 str1, str2가 공백으로 구분되어 입력으로 주어집니다. 입출력 예와 같이 str1과 str2을 이어서 출력하는 코드를 작성해 보세요. 제한사항 1 ≤ str1, str2의 길이 ≤ 10 입출력 예 입력 #1 apple pen 출력 #1 applepen 입력 #2 Hello World! 출력 #2 HelloWorld! using System; public class Example { public static void Main() { String[] input; Console.Clear(); input = Console.ReadLine().Split(' '); String str1 = input[0]; String str2 = input[1]; String result = s..
2023.07.13
덧셈식 출력하기
문제 설명 두 정수 a, b가 주어질 때 다음과 같은 형태의 계산식을 출력하는 코드를 작성해 보세요. a + b = c 제한사항 1 ≤ a, b ≤ 100 입출력 예 입력 #1 4 5 출력 #1 4 + 5 = 9 using System; public class Example { public static void Main() { String[] s; Console.Clear(); s = Console.ReadLine().Split(' '); int a = Int32.Parse(s[0]); int b = Int32.Parse(s[1]); Console.WriteLine("{0} + {1} = {2}", a, b, a+b); } }
2023.07.13
특수문자 출력하기
문제 설명 다음과 같이 출력하도록 코드를 작성해 주세요 출력 예시 !@#$%^&*(\'"?:; . using System; public class Example { public static void Main() { Console.WriteLine("!@#$%^&*(\\'\"?:;"); } } 이러한 특수 문자들을 문자열 안에서 그대로 출력하고 싶을 수 있습니다. 이를 위해서는 해당 문자들을 이스케이프(escape) 시켜야 합니다. 이스케이프란, 특정 문자 앞에 백슬래시 \를 두어 해당 문자의 특별한 의미를 해제하는 것을 의미합니다. 예를 들어, 작은따옴표 '를 문자열 안에서 출력하려면, \'와 같이 작은따옴표 앞에 백슬래시를 추가하여 이스케이프시킵니다. 동일하게 큰따옴표 "도 \"와 같이 이스케이프시켜야..
2023.07.13
대소문자 바꿔서 출력하기
문제 설명 영어 알파벳으로 이루어진 문자열 str이 주어집니다. 각 알파벳을 대문자는 소문자로 소문자는 대문자로 변환해서 출력하는 코드를 작성해 보세요. 제한사항 1 ≤ str의 길이 ≤ 20 str은 알파벳으로 이루어진 문자열입니다. 입출력 예 입력 #1 aBcDeFg 출력 #1 AbCdEfG using System; public class Example { public static void Main() { String s; Console.Clear(); s = Console.ReadLine(); string fullstr = ""; foreach(char c in s){ if(char.IsLower(c)){ fullstr += char.ToUpper(c); } else if(char.IsUpper(c..
2023.07.13
반응형

오브젝트 풀

오브젝트 풀(Object Pool)은 게임 개발에서 자주 사용되는 디자인 패턴 중 하나로, 오브젝트의
생성과 소멸을 최소화하여 성능을 향상시키는 방법입니다. 주로 게임 내에서 빈번하게 생성되고
삭제되는 오브젝트를 미리 생성해두고, 필요할 때마다 재활용하여 메모리 할당 및 해제 오버레드를 줄입니다.

오브젝트 풀의 구성 요소:
1. 풀(Pool): 미리 생성된 오브젝트들을 보관하고 있는 컨테이너입니다.
2. 오브젝트 생성 및 초기화: 초기에 풀에 포함될 오브젝트를 생성하고 초기화합니다.
3. 오브젝트 재사용: 오브젝트가 필요한 경우, 풀에서 빼내서 사용하고 필요한 상태로 초기화합니다.
4. 오브젝트 반환: 사용이 끝난 오브젝트를 다시 풀에 반환합니다.

오브젝트 풀 패턴의 예시 코드:

C# 유니티 기준으로 오브젝트 풀.

 

public class ObjectPool : MonoBehaviour
{
    public GameObject prefab;
    public int initialPoolSize = 10;

    private List<GameObject> objectPool;

    private void Start()
    {
        objectPool = new List<GameObject>();

        for (int i = 0; i < initialPoolSize; i++)
        {
            GameObject obj = Instantiate(prefab);
            obj.SetActive(false);
            objectPool.Add(obj);
        }
    }

    public GameObject GetObjectFromPool()
    {
        foreach (GameObject obj in objectPool)
        {
            if (!obj.activeInHierarchy)
            {
                obj.SetActive(true);
                return obj;
            }
        }

        GameObject newObj = Instantiate(prefab);
        objectPool.Add(newObj);
        return newObj;
    }

    public void ReturnObjectToPool(GameObject obj)
    {
        obj.SetActive(false);
    }
}


위의 코드는 오브젝트 풀을 구현한 예시입니다. 주요 요소는 다음과 같습니다:

prefab: 풀에 사용될 오브젝트의 프리팹입니다.
initialPoolSize: 초기에 풀에 생성될 오브젝트의 개수입니다.
objectPool: 실제 오브젝트들을 저장하는 리스트입니다.
Start(): 초기에 풀에 오브젝트들을 생성하고 비활성화합니다.
GetObjectFromPool(): 오브젝트 풀에서 사용 가능한 오브젝트를 가져옵니다. 비활성화된 오브젝트를 찾아 활성화시키고 반환합니다.
ReturnObjectToPool(GameObject obj): 사용이 끝난 오브젝트를 다시 비활성화하여 풀에 반환합니다.
이제 위와 같은 오브젝트 풀을 사용하면 빈번한 오브젝트 생성과 삭제로 인한 성능 저하를 줄일 수 있습니다.

 

 

 

반응형
반응형

싱글톤 패턴


싱글톤(singleton)패턴의 정의는 단순하다.
객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다.

싱글톤 패턴을 구현하는 방법은 여러가지가 있지만, 
여기서는 객체를 미리 생성해두고 가져오는 가장 단순하고 안전한 방법을 소개하겠다.

 

    public class Singleton
    {
        private static Singleton instance = new Singleton();
       
        private Singleton()
        {
            //생성자는 외부에서 호출을 하지 못하게 private으로 지정.
        }
        public static Singleton getInstance()
        {
            return instance;
        }
        public void Say()
        {
            Console.WriteLine("Hello");
        }
    }


싱글톤 패턴은 객체의 인스턴스가 오직 하나만 생성되는 디자인 패턴을 의미합니다. 객체의 인스턴스가 전역적으로 접근 가능하고 재사용되는 장점을 가지며, 주로 자원의 공유나 중복 생성을 피하기 위해 사용됩니다. 하지만 싱글톤 패턴은 구현에 따른 다양한 문제점을 가지고 있습니다.

장점:

메모리와 성능 효율: 싱글톤 패턴을 통해 객체 인스턴스가 한 번만 생성되므로 메모리 사용을 줄이고, 생성 및 소멸 과정에서 오버헤드를 줄일 수 있습니다.

전역적인 접근 가능성: 다른 클래스에서 해당 인스턴스에 쉽게 접근할 수 있어서 데이터나 메서드를 공유하기 용이합니다.

단점:

복잡한 구현: 싱글톤 패턴은 멀티스레드 환경에서 동시성 문제를 해결하기 위해 추가 코드가 필요한 경우가 있습니다. Lazy initialization이나 멀티스레딩에 대한 고려가 필요합니다.

테스트 어려움: 싱글톤은 전역적으로 접근 가능하므로 테스트에서 문제를 일으킬 수 있습니다. 테스트할 때마다 인스턴스 상태를 초기화해주거나 테스트 더블을 사용해야 합니다.

의존성과 유연성 문제: 클라이언트 코드는 싱글톤 클래스의 구체적인 구현에 의존하게 됩니다. 이로 인해 SOLID 원칙 중 DIP와 OCP를 위반할 가능성이 높습니다.

상속 문제: 일반적인 싱글톤 패턴은 상속이 어렵거나 복잡하게 됩니다. 싱글톤 자체를 상속받는 클래스를 만들어도 싱글톤 특성을 유지하기 어렵습니다.

내부 상태 변경 어려움: 다른 객체와 공유되는 싱글톤 인스턴스의 내부 상태를 변경하기 어려울 수 있습니다.

결론적으로, 싱글톤 패턴은 메모리와 성능 측면에서 이점을 가지지만, 복잡한 구현과 테스트 어려움, 의존성 문제 등 다양한 단점을 가지고 있어서 사용 시 신중한 고려가 필요합니다. 따라서 싱글톤 패턴을 선택할 때는 해당 상황과 요구사항을 잘 고려하고, 필요한 경우 대안적인 디자인 패턴이나 접근 방식을 고려하는 것이 좋습니다.

 

 

반응형
반응형

문제 설명
자연수 n이 입력으로 주어졌을 때 만약 n이 짝수이면 "n is even"을, 홀수이면 "n is odd"를 출력하는 코드를 작성해 보세요.

제한사항
1 ≤ n ≤ 1,000


입출력 예
입력 #1
100


출력 #1
100 is even


입력 #2
1


출력 #2
1 is odd

using System;

public class Example
{
    public static void Main()
    {
        String[] s;

        Console.Clear();
        s = Console.ReadLine().Split(' ');

        int a = Int32.Parse(s[0]);
        
        if(a%2 == 0){
            Console.WriteLine("{0} is even", a);
        }
        else{
            Console.WriteLine("{0} is odd", a);
        }
    }
}

 

반응형

'프로그래머스(코딩테스트 연습)' 카테고리의 다른 글

프로그래머스 추억점수 C++  (0) 2023.09.16
프로그래머스 달리기 경주 C++  (0) 2023.09.12
문자열 돌리기  (0) 2023.07.13
문자열 붙여서 출력하기  (0) 2023.07.13
덧셈식 출력하기  (0) 2023.07.13
반응형

문제 설명
문자열 str이 주어집니다.
문자열을 시계방향으로 90도 돌려서 아래 입출력 예와 같이 출력하는 코드를 작성해 보세요.

제한사항
1 ≤ str의 길이 ≤ 10

입출력 예
입력 #1
abcde


출력 #1
a
b
c
d
e

using System;

public class Example
{
    public static void Main()
    {
        String s;

        Console.Clear();
        s = Console.ReadLine();
        
        foreach(char c in s){
            Console.WriteLine(c);
        }

    }
}

 

 

반응형

'프로그래머스(코딩테스트 연습)' 카테고리의 다른 글

프로그래머스 달리기 경주 C++  (0) 2023.09.12
홀짝 구분하기  (0) 2023.07.13
문자열 붙여서 출력하기  (0) 2023.07.13
덧셈식 출력하기  (0) 2023.07.13
특수문자 출력하기  (0) 2023.07.13
반응형

문제 설명
두 개의 문자열 str1, str2가 공백으로 구분되어 입력으로 주어집니다.
입출력 예와 같이 str1과 str2을 이어서 출력하는 코드를 작성해 보세요.

제한사항
1 ≤ str1, str2의 길이 ≤ 10


입출력 예
입력 #1
apple pen


출력 #1
applepen


입력 #2
Hello World!


출력 #2
HelloWorld!

 

using System;

public class Example
{
    public static void Main()
    {
        String[] input;

        Console.Clear();
        input = Console.ReadLine().Split(' ');

        String str1 = input[0];
        String str2 = input[1];

        String result = str1 + str2;
        Console.WriteLine(result);
    }
}
반응형

'프로그래머스(코딩테스트 연습)' 카테고리의 다른 글

홀짝 구분하기  (0) 2023.07.13
문자열 돌리기  (0) 2023.07.13
덧셈식 출력하기  (0) 2023.07.13
특수문자 출력하기  (0) 2023.07.13
대소문자 바꿔서 출력하기  (0) 2023.07.13
반응형

문제 설명
두 정수 a, b가 주어질 때 다음과 같은 형태의 계산식을 출력하는 코드를 작성해 보세요.

a + b = c
제한사항
1 ≤ a, b ≤ 100


입출력 예
입력 #1
4 5


출력 #1
4 + 5 = 9

 

using System;

public class Example
{
    public static void Main()
    {
        String[] s;

        Console.Clear();
        s = Console.ReadLine().Split(' ');

        int a = Int32.Parse(s[0]);
        int b = Int32.Parse(s[1]);

        Console.WriteLine("{0} + {1} = {2}", a, b, a+b);
    }
}
반응형

'프로그래머스(코딩테스트 연습)' 카테고리의 다른 글

홀짝 구분하기  (0) 2023.07.13
문자열 돌리기  (0) 2023.07.13
문자열 붙여서 출력하기  (0) 2023.07.13
특수문자 출력하기  (0) 2023.07.13
대소문자 바꿔서 출력하기  (0) 2023.07.13
반응형

문제 설명
다음과 같이 출력하도록 코드를 작성해 주세요

 

출력 예시

!@#$%^&*(\'"<>?:;

.

using System;

public class Example
{
    public static void Main()
    {
        Console.WriteLine("!@#$%^&*(\\'\"<>?:;");
    }
}

 

 

이러한 특수 문자들을 문자열 안에서 그대로 출력하고 싶을 수 있습니다. 
이를 위해서는 해당 문자들을 이스케이프(escape) 시켜야 합니다. 이스케이프란, 
특정 문자 앞에 백슬래시 \를 두어 해당 문자의 특별한 의미를 해제하는 것을 의미합니다.

예를 들어, 작은따옴표 '를 문자열 안에서 출력하려면, \'와 같이 작은따옴표 
앞에 백슬래시를 추가하여 이스케이프시킵니다. 동일하게 큰따옴표 "도 \"와 같이
 이스케이프시켜야 합니다.

반응형

'프로그래머스(코딩테스트 연습)' 카테고리의 다른 글

홀짝 구분하기  (0) 2023.07.13
문자열 돌리기  (0) 2023.07.13
문자열 붙여서 출력하기  (0) 2023.07.13
덧셈식 출력하기  (0) 2023.07.13
대소문자 바꿔서 출력하기  (0) 2023.07.13
반응형

문제 설명
영어 알파벳으로 이루어진 문자열 str이 주어집니다. 각 알파벳을 대문자는 소문자로 소문자는 대문자로 변환해서 출력하는 코드를 작성해 보세요.

 

제한사항
1 ≤ str의 길이 ≤ 20
str은 알파벳으로 이루어진 문자열입니다.


입출력 예

입력 #1
aBcDeFg


출력 #1
AbCdEfG

using System;

public class Example
{
    public static void Main()
    {
        String s;

        Console.Clear();
        s = Console.ReadLine();

        string fullstr = "";
        
        foreach(char c in s){
            if(char.IsLower(c)){
                fullstr += char.ToUpper(c);
            }
            else if(char.IsUpper(c)){
                fullstr += char.ToLower(c);
            }
        }
        Console.WriteLine(fullstr);
        
    }
}

 

소문자일때는 대문자로 fullstr에 추가

대문자일때는 소문자로 fullstr에 추가

반응형

'프로그래머스(코딩테스트 연습)' 카테고리의 다른 글

홀짝 구분하기  (0) 2023.07.13
문자열 돌리기  (0) 2023.07.13
문자열 붙여서 출력하기  (0) 2023.07.13
덧셈식 출력하기  (0) 2023.07.13
특수문자 출력하기  (0) 2023.07.13