✏️ 선언 위치, 키워드에 따라 다른 변수 종류
- 클래스 멤버 변수
- 클래스 내부, 클래스 멤버 함수 외부에 선언되는 변수
- 해당 클래스의 객체가 소멸될 때까지 생존
- 공유 범위에 따라 해당 클래스 또는 외부 클래스도 사용 가능
- 지역 변수
- 함수 내부에 선언되는 변수. 변수가 선언된 위치로부터 아래에만 사용 가능
- 코드 블록 '{' 내부에 변수가 선언되며, 코드 블록이 '}' 닫힐 때 변수 데이터가 소멸
- 읽기 전용 변수
- 클래스 멤버 변수를 선언할 때 변수 타입 앞에 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;
Debug.Log(currentHP);
Debug.Log(currentMP);
Debug.Log(maxHP);
}
private void Update()
{
}
}
✏️ 데이터의 형식
- 기본 데이터 형식
- 정수, 실수, 논리, 문자열과 같이 하나의 정보를 가지는 데이터 형식
- 복합 데이터 형식
- 기본 데이터 형식, 복합 데이터 형식과 같은 데이터들을 결합해 만든 새로운 데이터 형식
- 값 형식
- 변수가 일반적인 값을 담는 데이터 형식
- 스택 메모리 영역에 데이터 저장
- 참조 형식
- 변수가 일반적인 값 대신 값이 있는 곳의 위치(주소 값)를 담는 데이터 형식
- 힙 메모리 영역에 데이터 저장
✏️ 메모리 구조
- 스택 메모리 영역
- 함수 내부의 코드 블록 '{' , '}' 영역에 선언하는 지역 변수가 저장되는 공간
- 지역 변수를 선언하면 스택 영역에 메모리가 할당 되며, 해당 변수가 선언된 코드블록이 종료될 때 스택 영역에 할단된 메모리 삭제 (변수 소멸)
- 힙 메모리 영역
- Hierarchy View에 존재하는 게임오브젝트, 컴포넌트는 클래스를 기반으로 제작되며, 모두 힙 메모리 영역에 저장
- 다른 게임오브젝트, 컴포넌트(힙에 저장된 데이터)를 사용하기 위해 변수를 만들어서 GetComponent<>(), GameObject.Find()와 같은 행위를 함 (힙 메모리 영역에 있는 데이터에 접근하기 위해 주소 값을 나타내는 변수 생성)
- 스택 영역과 다르게 코드 블록이 종료되는 지점과 상관 없이 데이터가 계속 유지(게임 내에 존재하는 게임 오브젝트는 우리가 삭제하기 전까지 데이터 유지)
- 프로그래머가 더 이상 사용하지 않는 쓰레기가 됐을 때 가비지 컬렉터가 처리(Destroy 함수를 이용해 게임오브젝트를 삭제했을 때)
👇 힙 메모리 영역에 Player 컴포넌트에 대한 데이터 공간이 생성
👇 스택 메모리영역에 player 변수 데이터를 생성 후 힙 메모리 영역의 Player 클래스를 참조하는 모습