본문 바로가기
NOTE/Unity

[Unity] 짧은 개념 정리

by DevAthena 2016. 9. 29.

[sealed]

- 봉인클래스 즉, 상속을 할 수 없게 만든다.

- 메소드에 선언하면, 상속은 할 수 있어도 상속된 클래스에서 메소드를 오버라이드 못하게 막을 수도 있다.


[lock]

- critical section 처럼 문 블록을 임계 영역으로 표시하는 것.

- 즉 한번에 한 스레드만 임계 영역의 처리를 할 수 있는 것.

class Account
{
    decimal balance;
    private Object thisLock = new Object();

    public void Withdraw(decimal amount)
    {
        lock (thisLock)
        {
            if (amount > balance)
            {
                throw new Exception("Insufficient funds");
            }
            balance -= amount;
        }
    }
}


[Type]

- 클래스 형식, 인터페이스 형식, 배열 형식, 값 형식, 열거형 형식, 형식 매개 변수, 제네릭 형식 정의 및 개방형 생성 제네릭 형식이나 

폐쇄형 생성 제네릭 형식에 대한 형식 선언..

[ConstructorInfo]

- 클래스 생성자의 특성을 검색하고 생성자 메타데이터에 대한 액세스를 제공..

[Activator.CreateInstance]

- Activator : 개체의 형식을 로컬 또는 원격으로 만들거나 기존 원격 개체에 대한 참조를 얻는 메서드를 포함..

- 해당 형식의 기본 생성자를 사용하여 지정된 형식의 인스턴스를 만든다. Object형 반환.


▽ 궁금한 코드부분

public abstract class SingleTon where T : class
{
    private static object   s_syncObject    = new object();
    private static T        s_instance      = null;
    
    public static T Instance
    {
        get
        {
            if (null == s_instance)
            {
                lock (s_syncObject)
                {
                    if (null == s_instance)
                    {
                        Type t = typeof(T);

                        ConstructorInfo[] constructors = t.GetConstructors();

                        if (constructors.Length > 0)
                        {
                            throw new InvalidOperationException(String.Format("{0} - private 생성자 강제 구현 필요(적어도 하나의 접근가능(public) 생성자가 존재하므로 싱글톤 생성이 불가합니다.)", t.Name));
                        }

                        s_instance = (T)Activator.CreateInstance(t, true);
                    }
                }
            }

            return s_instance;
        }
    }
}

- private static인데도, lock을 걸어주는 이유 : 혹시 모르는 동시 접근을 위해서

- 받아온 클래스의 타입을 받아서 CunstructorInfo -> 생성자 만드는 것


[Time.realtimeSinceStartup]

- 게임이 시작된 시간으로부터 경과한 실제 시간을 나타내며, 단위는 초를 사용.

- 플레이어가 일시정지를 한 경우에도 시간 값이 증가.


▽ 궁금한 코드 부분

        m_deltaTime     = Time.realtimeSinceStartup - m_prevRealTime;
        m_prevRealTime  = Time.realtimeSinceStartup;

- Unity Time : 플레이 될 때만 흘러감

- Real Time : 플레이 되지 않을 때도 백그라운드에서 흘러감


[base]

- 상속을 사용하는 클래스에서 부모 객체의 메소드를 호출하려면 base 클래스를 사용하여 접근하면 된다.

- base.메소드명();