Unity Chapter 5-5. C# 프로그래밍 [중급] (1/2) : static
카테고리: Unity Lesson 1
태그: C Sharp Unity Game Engine
인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!
Chapter 5. C# 프로그래밍 : 중급 (1/2)
🔔 static 변수, static 함수
- 외부에서
클래스이름.변수이름
,클래스이름.함수이름
으로 사용, 접근이 가능하다.- ex) Math.sqrt 우리가 이렇게 바로 Math클래스의 sqrt 함수를 사용할 수 있었던 이유는 sqrt가 Math 클래스의 static 함수이기 때문이다.
static 변수
static
변수 : 모든 오브젝트가 공유하는 단 하나의 변수.
📜 Dog.cs
스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Dog : MonoBehaviour // class Dog
{
public string nickName;
public float weight;
public void Bark()
{
Debug.Log(nickName + ": Bark");
}
}
- 3개의 오브젝트를 만들어 준 후 📜
Dog.cs
를 각각 붙여준다. - 오브젝트 이름과 슬롯에서
nickName
,weight
을 다음과 같이 설정해준다.- “Jack (Dog)”
nickName
= Jackweight
= 10
- “Alen (Dog)”
nickName
= Alenweight
= 8
- “Nate (Dog)”
nickName
= Nateweight
= 2
- “Jack (Dog)”
- 메모리에는 현재 Dog 오브젝트가 3개 있는 상황이며 각각 독립적으로 메모리상에 존재한다.
class Dog
로Jack
,Alen
,Nate
라고 부리는 3개의 오브젝트를 찍어낸셈.
만약 Dog 오브젝트를 세는
count
라는 변수를 가지고 있어서 다른 Dog 오브젝트의 정보를 알아야 할땐 어떻게 할 수 있을까?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Dog : MonoBehaviour // class Dog
{
public string nickName;
public float weight;
public int count = 0;
void Awake()
{
count = count + 1; // 자기 자신의 수를 더해 줌
}
void Start()
{
Bark();
}
public void Bark()
{
Debug.Log("모든 개들의 수 : " + count);
Debug.Log(nickName + ": Bark");
}
}
void Awake()
- Start()와 비슷한데 Start()보다 먼저 실행되는 시작 함수다.
- Start 함수의 이전 및 프리팹의 인스턴스화 직후에 호출
- 오브젝트가 생성 되자마자 실행하는 1회 동작 함수
- Start()와 비슷한데 Start()보다 먼저 실행되는 시작 함수다.
- 위 상태에서 Dog스크립트가 붙은 오브젝트를 3개 만들면 count = 3 이라고 나오는게 아니라 각자 count = 1 이라고 나온다.
count
변수가 각 오브젝트마다 별개라서count
메모리를 세 오브젝트가 공유하는게 아니기 때문이다.- count 변수를
static
으로 선언해주면 이제 이 변수를 모든 Dog 오브젝트들이 동시에 공유할 수 있게 된다.static
으로 선언하게 되면 count변수가 이제 각 오브젝트에 속하는게 아니라클래스 변수
로서 class Dog에 소속되게 된다.정적 변수
라고도 불린다. 처음부터 정적으로 메모리 어딘가에 자리를 차지하고 있기 때문!
- 초기화는 최초에 한번만 이루어진다.
- count 변수를
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Dog : MonoBehaviour // class Dog
{
public string nickName;
public float weight;
public static int count = 0;
void Awake()
{
count = count + 1; // 자기 자신의 수를 더해 줌
}
void Start()
{
Bark();
}
public void Bark()
{
Debug.Log("모든 개들의 수 : " + count);
Debug.Log(nickName + ": Bark");
}
}
- public
static
int count = 0;- 이제 오브젝트들을 생성할 때마다 count 값이 증가하여 차례로 1, 2, 3을 출력할 것이다.
- 각 오브젝트들이 count를 공유할 수 있게 되었기 때무이다.
- 이제 오브젝트들을 생성할 때마다 count 값이 증가하여 차례로 1, 2, 3을 출력할 것이다.
static 함수
개별 오브젝트와 상관없이 각 오브젝트들이 동시에 사용할 수 있는 함수 static 변수와 비슷하게 static 함수 또한 개별 오브젝트에 종속되지 않는다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Dog : MonoBehaviour // class Dog
{
public string nickName;
public float weight;
public static int count = 0;
void Awake()
{
count = count + 1; // 자기 자신의 수를 더해 줌
}
void Start()
{
Bark();
}
public void Bark()
{
Debug.Log("모든 개들의 수 : " + count);
Debug.Log(nickName + ": Bark");
}
public static void ShowAnimalType()
{
Debug.Log("이 친구는 개입니다.");
}
}
- public
static
void ShowAnimalType()- static 함수
static 변수와 함수는 개별 오브젝트에 종속되지 않기 때문에 오브젝트 생성 없이 바로 사용할 수도 있다.
📜Test.cs
아무 오브젝트 하나 만들어서 Test.cs를 붙여주었다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour // class Dog
{
void Start()
{
Debug.Log("모든 개들의 수 : " + Dog.count);
Dog.ShowAnimalType();
}
}
- Dog 오브젝트가 없는 상태인데도 바로
클래스이름 + .
으로 Dog의 static 변수, static 함수를 사용할 수 있다.Dog.Count
,Dog.ShowAnimalType()
- 개별 오브젝트에 종속되지 않기 때문
- public Dog Alen; 이렇게 만든 후 Alen.Count 이런식으로 쓰지 않아도 된다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기