Unity 기초_1 (객체, 배열)

김펭귄·2024년 11월 15일

Unity 기초

목록 보기
3/9

C # 에서의 객체의 의미

  • C#은 객체 지향 프로그래밍(OOP)
  • 객체는 메모리에서 구조화된 데이터 덩어리로, 데이터를 저장하고 조작할 수 있는 단위.
  • 클래스, 배열, 문자열 등 참조형 데이터를 저장하거나 다룰 때 사용하는 기본 단위
    • C에선 문자열, 배열 둘 다 단순 데이터로써 메모리에 저장되었음
    • 하지만 C#에선 다음의 정보들도 함께 저장하여 다루기에 문자열, 배열 둘 다 객체로 정의
      1. 문자열, 배열의 길이
      2. 특정 메서드 (length, sort...)
      3. 관련 metadata
  • 이러한 객체들은 프로그램이 실행되는 도중인 runtime에 생성된다

배열

이전 장의 내용에 이어서...

배열 메모리

  1. int, float 같은 값 형식의 배열
    - int[] myArray = {0, 1, 2};
    - stack에 저장된 참조 변수 myArray는 heap에 생성된 배열 객체를 참조
    - myArray가 배열객체의 주소의 시작점을 값으로 가짐
    - heap에 존재하는 배열 객체는 다음의 정보를 관리
    1) 배열의 길이 : 3
    2) 배열의 요소 : 0, 1, 2라는 값을 저장
    3) 여러 관련 정보
    - 이렇듯 값 형식의 배열은 배열 내부에 값을 직접 저장
  1. string 같은 참조형식의 배열
    - string[] monsters = { "fly", "womb", "crab" };
    - stack에 저장된 참조 변수 monsters가 heap에 생성된 배열 객체의 시작 주소를 값으로 가짐(참조)
    - heap에 존재하는 배열 객체는 여러 관련 정보를 관리
    1) 배열의 길이
    2) 배열의 요소 : 주소값
    3) 여러 관련 정보
    - 참조형식의 배열은 배열의 요소에서 문자열을 저장하지 않고 문자열객체가 저장되어 있는 heap 주소를 가리킴

배열의 성질

  1. C처럼 값 형식 배열의 경우 data끼리 붙어있어 pointer로 접근 용이
  2. fixed size로 사용. 요소의 개수가 변하는 data의 집합으로써는 효율적이지는 않음.
    1) 실제 data가 모자르면 메모리 낭비
    2) data가 넘치면 에러

배열 iteration(순회)

  • for 이용
string[] monsters = { "fly", "womb", "crab" };

// iteration
for (int i = 0; i < monsters.Length; i++) {
    Debug.Log($"{i + 1}단계 몬스터 : {monsters[i]}");
}

  • foreach : 요소의 각 값을 변수로 받아 사용
    • read-only. 순회하면서 값 수정 불가능
    • 부분 순회 불가능. 무조건 전체 순회
foreach (var monster in monsters) {
    Debug.Log($"{monster}");
}

다차원 배열

float[,] temperatures = new float[12, 31];  // 일별 평균온도의 2차원 배열
temperatures[5, 14] = 20.5f;  // 6월 15일 평균온도 25.5도
Debug.Log(temperatures[5, 14]);


int[,,] dim3 =  {
    { { 0, 1 }, { 2, 3 } },
    { { 4, 5 }, { 6, 7 } },
    { { 8, 9 }, { 10, 11 } }
	};		// 선언, 초기화 동시에. [3,2,2]인 3차원 배열
Debug.Log(dim3[1, 1, 0]);


다차원에서의 for, foreach는 C에서와 마찬가지로 nested loop를 통해 해주면 된다

What's Next

  • char, list..

References

profile
반갑습니다

0개의 댓글