Unity Chapter 5-5. C# 프로그래밍 [중급] (1/2) : static

Date:     Updated:

카테고리:

태그:

인프런에 있는 이제민님의 레트로의 유니티 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을 다음과 같이 설정해준다.
    1. “Jack (Dog)”
      • nickName = Jack
      • weight = 10
    2. “Alen (Dog)”
      • nickName = Alen
      • weight = 8
    3. “Nate (Dog)”
      • nickName = Nate
      • weight = 2
  • 메모리에는 현재 Dog 오브젝트가 3개 있는 상황이며 각각 독립적으로 메모리상에 존재한다.
    • class DogJack, 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회 동작 함수
  • 위 상태에서 Dog스크립트가 붙은 오브젝트를 3개 만들면 count = 3 이라고 나오는게 아니라 각자 count = 1 이라고 나온다.
    • count변수가 각 오브젝트마다 별개라서 count메모리를 세 오브젝트가 공유하는게 아니기 때문이다.
      • count 변수를 static으로 선언해주면 이제 이 변수를 모든 Dog 오브젝트들이 동시에 공유할 수 있게 된다.
        • static으로 선언하게 되면 count변수가 이제 각 오브젝트에 속하는게 아니라 클래스 변수로서 class Dog에 소속되게 된다.
        • 정적 변수라고도 불린다. 처음부터 정적으로 메모리 어딘가에 자리를 차지하고 있기 때문!
      • 초기화는 최초에 한번만 이루어진다.

image

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를 공유할 수 있게 되었기 때무이다.

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 이런식으로 쓰지 않아도 된다.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Unity Lesson 1 카테고리 내 다른 글 보러가기

댓글 남기기