말감로그

24.07.12 코드트리 반복문 학습 중, 싱글톤 패턴 본문

TIL

24.07.12 코드트리 반복문 학습 중, 싱글톤 패턴

habbn 2024. 7. 12. 17:05
728x90

코드트리

Q. 실수 a / b의 값을 소수점 21번째 자리에서 내림하여 출력하는 프로그램을 작성해보세요.

 

-> format을 이용해서 출력했지만 틀렸습니다가 떠서 다시 문제를 확인해보니 Hint에 "20번째 자리까지 format을 이용하여 한 번에 출력하는 것은 쉽지 않습니다"가 적혀있었다.... 그래서 어떻게 푸는건데??!?!!!? 모르겠어서 결국 해설을 봐버렸다.

 

a / b에서 소수점을 수학적으로 구하는 방법은, a를 b로 나눈 나머지에 10을 곱한 값을 b로 나눴을 때의 몫을 순서대로 적는 것을 계속해서 반복하면 된다.

a,b = map(int,input().split())

# 정수 부분을 먼저 출력한다.
print(f"{a//b}.", end="")

# a를 b로 나눈 나머지를 시작으로 소수점 자리를 하나씩 계산한다.
a %= b

for _ in range(20):
    # 나머지에 10 곱한 값을 기준으로 b로 나누었을 때의 몫을 구해준다.
    a *= 10
    print(a // b, end="")
    
    #a를 b로 나눈 나머지를 계속 갱신해준다.
    a %= b

 


싱글톤 패턴

싱글톤 패턴은 디자인 패턴 중 하나로, 해당 클래스의 인스턴스가 언제나 하나만 존재하도록 보장(유일성)하는 패턴입니다. 이 패턴은 주로 하나의 인스턴스만 필요한 객체에 적용됩니다.

외부에서 생성자를 이용한 객체 생성을 막아 전역적으로 접근할 수 있는 정적 메서드를 통해 해당 인스턴스에 접근하고 사용합니다.  모든 스크립트가 써야 하는 변수나 기능을 관장하는 스크립트가 있다면, 접근의 편의와 메모리의 할당을 줄이기 위해 싱글톤 패턴을 사용한다. 예를 들어, 게임 매니저나 리소스 관리자 등이 여기에 속합니다. 

 

단점 

- 전역변수가 가지는 모든 단점을 그대로 갖게 됩니다. 전역 변수는 가장 마지막에 검색되기 때문에 조금 느릴 수 있으며, 유지보수가 조금 힘들어질 수 있습니다. 

 

using UnityEngine;

public class DataManager : MonoBehaviour
{
    private static DataManager instance = null;
    
    // 싱글톤 인스턴스에 접근할 수 있는 정적 프로퍼티
    public static DataManager Instance
    {
        get
        {
            if (instance == null)
            {
            	return null;
            }
            return instance;
        }
    }
    
    private void Awake()
    {
    	if (instance == null)
        {
            // 인스턴스가 없으면 이 객체를 싱글톤 인스턴스로 설정
            instance = this;
         }
         else
         {
            // 이미 인스턴스가 있다면 이 객체를 파괴(유일성 보장)
            Destroy(this.gameObject);
         }
         
         //씬 전환되어도 유지되도록 설정
         DontDestroyOnLoad(this.gameObject);
    }

 

728x90