목표
- 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();
}
}