[유니티 C#] 변수와 데이터 - 2

YongSeok·2022년 10월 5일
0

✏️ 선언 위치, 키워드에 따라 다른 변수 종류

  • 클래스 멤버 변수
    • 클래스 내부, 클래스 멤버 함수 외부에 선언되는 변수
    • 해당 클래스의 객체가 소멸될 때까지 생존
    • 공유 범위에 따라 해당 클래스 또는 외부 클래스도 사용 가능
  • 지역 변수
    • 함수 내부에 선언되는 변수. 변수가 선언된 위치로부터 아래에만 사용 가능
    • 코드 블록 '{' 내부에 변수가 선언되며, 코드 블록이 '}' 닫힐 때 변수 데이터가 소멸
  • 읽기 전용 변수
    • 클래스 멤버 변수를 선언할 때 변수 타입 앞에 readonly 키워드를 붙여서 사용
  • 상수
    • 클래스 멤버 변수를 선언할 때 변수 타입 앞에 const키워드를 붙여서 사용
    • 변수를 선언할 때 값을 설정할 수 있고, 그 이외엔 변경 불가
using UnityEngine;

public class Test : MonoBehavior
{
	private int currentHP = 10; 		// 클래스 멤버 변수
    private readonly int maxHP = 100; 	// 읽기 전용 변수
    private const 	 int maxHP = 100;	// 상수
    
    public Test()
    {
		//읽기 전용 변수는 변수 초기화, 생성자에서 데이터 수정 가능
        maxHP = 200;
    }
    
    private void Awake()
    {
    	int currentMP = 50; 	// 지역 변수 (함수 내부에서 선언하며, 함수가 끝나는 지점에서 데이터 소멸)
        currentHP = 35; 		// currentHP 변수에 35 저장
        //maxHP = 200;			// readonly로 정의된 변수는 데이터 변경 불가
        //maxHP = 200;  		// const로 정의딘 변수는 데이터 변경 불가
        
        // Console View에 데이터 출력 (readonly, const도 저장된 데이터 사용은 가능)
        Debug.Log(currentHP);
        Debug.Log(currentMP);
        Debug.Log(maxHP);
	}
    
    private void Update()
    {
    	//currentMP = 100;		// 지역 변수는 해당 함수 범위를 벗어나면 소멸되기 때문에
        						// 다른함수에서 사용할 수 없음.
	}
}

✏️ 데이터의 형식

  • 기본 데이터 형식
    • 정수, 실수, 논리, 문자열과 같이 하나의 정보를 가지는 데이터 형식
  • 복합 데이터 형식
    • 기본 데이터 형식, 복합 데이터 형식과 같은 데이터들을 결합해 만든 새로운 데이터 형식
  • 값 형식
    • 변수가 일반적인 값을 담는 데이터 형식
    • 스택 메모리 영역에 데이터 저장
  • 참조 형식
    • 변수가 일반적인 값 대신 값이 있는 곳의 위치(주소 값)를 담는 데이터 형식
    • 힙 메모리 영역에 데이터 저장


✏️ 메모리 구조

  • 스택 메모리 영역
    • 함수 내부의 코드 블록 '{' , '}' 영역에 선언하는 지역 변수가 저장되는 공간
    • 지역 변수를 선언하면 스택 영역에 메모리가 할당 되며, 해당 변수가 선언된 코드블록이 종료될 때 스택 영역에 할단된 메모리 삭제 (변수 소멸)

  • 힙 메모리 영역
    • Hierarchy View에 존재하는 게임오브젝트, 컴포넌트는 클래스를 기반으로 제작되며, 모두 힙 메모리 영역에 저장
    • 다른 게임오브젝트, 컴포넌트(힙에 저장된 데이터)를 사용하기 위해 변수를 만들어서 GetComponent<>(), GameObject.Find()와 같은 행위를 함 (힙 메모리 영역에 있는 데이터에 접근하기 위해 주소 값을 나타내는 변수 생성)
    • 스택 영역과 다르게 코드 블록이 종료되는 지점과 상관 없이 데이터가 계속 유지(게임 내에 존재하는 게임 오브젝트는 우리가 삭제하기 전까지 데이터 유지)
    • 프로그래머가 더 이상 사용하지 않는 쓰레기가 됐을 때 가비지 컬렉터가 처리(Destroy 함수를 이용해 게임오브젝트를 삭제했을 때)

      👇 힙 메모리 영역에 Player 컴포넌트에 대한 데이터 공간이 생성

      👇 스택 메모리영역에 player 변수 데이터를 생성 후 힙 메모리 영역의 Player 클래스를 참조하는 모습

0개의 댓글