목표

  • Instance의 개념과 Static 한정자의 사용법에 대해 알아보자.

Instantiation

  • 아래는 인스턴스 객체의 예시이다.
  • 인스턴스 객체는 아례 예시 처럼 객체화(instantiation)하여 사용할 수 있다.

용어

  • 객체(object): 클래스 또는 인스턴스
  • 인스턴스(instance) : 클래스로 부터 생성된 객체
  • 인스턴스화(instantiation) : new 연산자로 클래스를 실체화 하는 행위
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 비정적 클래스
public class NonStaticObject
{
    // 비정적 변수
    private int _nonStaticVariable

    // 비정적 메서드
    public int NonStaticMethod()
    {
        return _nonStaticVariable;
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SampleScript : MonoBehaviour
{ 
    private NonStaticObject nonStaticObject;

    void Start()
    {
        nonStaticObject = new NonStaticObject();
        int result = nonStaticObject.NonStaticMethod();
    }
}

Static 한정자

  • static 한정자를 사용은 사용하면 특정 개체가 아니라 형식 자체에 속하는 정적 멤버를 선언할 수 있다.
  • 변수, 메서드, 클래스, 속성, 연산자, 이벤트 및 생성자에 사용할 수 있지만 인덱서, 소멸자로는 사용할 수 없다.
  • unity에서 static 한정자로 선언된 데이터는, 스크립트가 실행되기 전에 초기화 되며, 모든 인스턴스에서 동일한 값으로 공유 가능하다.

Static 변수

  • static 변수의 경우, 클래스를 인스턴스화 하지 않고도 사용할 수 있다.

Static 메서드

  • StaticObject는 static 클래스가 아니기 때문에, non-static 변수와 메서드를 포함할 수 있다.
  • 인스턴스화 한 경우 non-static 메서드와 변수에 접근가능하다.
  • 클래스명으로 static 변수, 메서드에 접근 가능하다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StaticObject
{
    public static int StaticValue { get; set; }
    public int NonStaticValue { get; set; }

    public static int GetStaticValue()
    {
        return StaticValue;
    }

    public int GetNonStaticValue()
    {
        return NonStaticValue;
    }

}

Static 클래스

  • static로 선언된 클래스는 static 메서드와 static 변수만 포함 할 수 있다.
  • static로 선언된 클래스는 인스턴스화 할 수없다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static class MyStaticClass
{
    public static int StaticValue;
    //public int NonStaticValue;

    public static int GetStaticValue()
    {
        return StaticValue;
    }
}

예제

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StaticScript : MonoBehaviour
{ 
    void Start()
    {
        // NonStaticObject Instantiation
        NonStaticObject nonStaticObject = new NonStaticObject();

        // NonStaticObject Non-Static Variable
        nonStaticObject.NonStaticValue = 2;

        // NonStaticObject Non-Static Method
        nonStaticObject.NonStaticMethod();

        /************************************************************/

        // StaticObject Static Variable
        StaticObject.StaticValue = 5;

        // StaticObject Static Method
        StaticObject.GetStaticValue();

        /************************************************************/

        // StaticObject Instantiation 
        StaticObject staticObject = new StaticObject();

        // StaticObject Non-Static Variable 
        staticObject.NonStaticValue = 2;

        // StaticObject Non-Static Method 
        staticObject.GetNonStaticValue();

        /************************************************************/

        // MyStaticClass Static Variable
        MyStaticClass.StaticValue = 1;

        // MyStaticClass Static Method
        MyStaticClass.GetStaticValue();
    } 
}

+ Recent posts