카테고리 없음

200250508 TIL 유니티의 라이프 사이클,리스트와 배열,프로퍼티 Back to the Basic

note4973 2025. 5. 8. 21:38

1. Unity의 라이프 사이클 (Life Cycle)

Unity에서 MonoBehaviour 기반 스크립트는 특정 순서로 호출되는 메서드들을 통해 작동합니다.
이 흐름을 라이프 사이클이라고 부릅니다

 

기본흐름

[객체 생성 시]
→ Awake() → OnEnable() → Start()


[게임 루프]
→ Update() → LateUpdate() (매 프레임)
→ FixedUpdate() (물리 연산 주기)

[비활성화 / 제거 시]
→ OnDisable() → OnDestroy()

메서드 호출 시점 특징 및 용도

Awake() 오브젝트가 씬에 로드될 때 1회 가장 먼저 실행됨. 다른 컴포넌트 참조 가능
OnEnable() 오브젝트가 활성화될 때마다 이벤트 구독 등 추천
Start() 첫 프레임 전에 1회 대부분의 초기화 여기에 작성
Update() 매 프레임 호출 키 입력, 이동 등 일반 로직
FixedUpdate() 일정 시간마다 호출 (0.02초 기본) 물리 연산 (리짓바디 이동 등)
LateUpdate() Update 끝난 뒤 호출 카메라 따라가기 등
OnDisable() 비활성화 시 이벤트 구독 해제, 리소스 정리
OnDestroy() 객체 삭제 시 메모리 해제, 최종 정리

 

2. 배열 vs 리스트 (Array vs List)

 

배열

고정된 크기의 데이터 집합

컴파일시 크기를 알 수 있어 메모리 효율이 높고 빠르다

int[] scores = new int[3];    // 크기 3 고정
scores[0] = 10;

 

크기 변경이 불가 하고 Add(), Remove() 같은 메서드가 없다.

 

리스트

크기가 자동으로 조절되는 제네릭 컬렉션

using System.Collections.Generic 필요

메서드가 풍부하고 다루기 쉬움

List<string> items = new List<string>();
items.Add("포션");
items.Remove("포션");

요소 추가 삭제가 쉽다

반복문, 조건 검색, 정렬 등 다양한 기능을 제공한다.

항목 배열 (T[]) 리스트 (List<T>)

크기 변경 ❌ 불가능 ✅ 가능 (Add, Remove)
성능 ✅ 빠름 (고정 크기) 약간 느림 (동적 메모리 할당)
선언 방식 int[] arr = new int[3]; List<int> list = new List<int>();
유니티 Inspector 노출 ✅ 가능 ([SerializeField]) ✅ 가능 (List<T> 지원됨)
반복문 사용 ✅ for, foreach ✅ 동일하게 가능

 

3. 프로퍼티(Property)

프로퍼티는 필드(변수)에 접근하기 위한 ‘읽기/쓰기 함수’를 변수처럼 보이게 만든 문법입니다.

 

C#에서는 필드에 바로 접근하면 보안성 / 캡슐화 문제가 생기므로
필드는 private, 프로퍼티로 제한된 공개를 합니다.

 

public class Player
{
    private int hp;

    public int HP
    {
        get { return hp; }
        set
        {
            // 값을 안전하게 제한
            hp = Mathf.Clamp(value, 0, 100);
        }
    }
}

 

자동 프로퍼티

public string Name { get; set; } // 내부 필드 자동 생성됨

읽기/쓰기 둘 다 가능

필요 시 init 또는 get; private set;으로 제한 가능

 

Unity에서 프로퍼티 언제 쓰나?

 

캐릭터 체력, 스탯 조작할 때 제어 로직 넣고 싶을 때

Inspector에는 필드를 [SerializeField]로 노출하고,
내부에서는 프로퍼티로 안전하게 조작