레트로의 유니티 게임 프로그래밍 에센스 - 4.8

Cosmos·2023년 3월 30일
0

학습 매체 : 책

책이름 : 레트로의 유니티 게임 프로그래밍 에센스

저자 : 이제민


본 내용은 해당 강의 내용을 공부하면서 정리한 글입니다.


4.8 배열


  • 배열(array)은 나열된 여러 값을 하나의 변수로 다룰 수 있는 타입이다. 배열은 일렬로 나열된 방을 가진 건물이라고 생각할 수 있다.

  • 방문마다 호실(순번)이 표시되어 있고, 각 방마다 값 하나가 들어갈 수 있다. 호실 번호를 알면 그 방으로 찾아가 값을 가져오거나 변경할 수 있다.

  • 호실 번호를 인덱스(Index)라고 부르고, 각 방을 배열의 요소 또는 배열의 원소라 부른다. 배열을 사용하면 같은 타입의 변수가 너무 많을 때 간단하게 묶어서 관리할 수 있다.

4.8.1 배열로 점수 관리하기

  • 선생님이 학생의 점수를 저장하고 출력하는 예를 가정하자.

  • 학생의 점수를 다음과 같은 방식으로 저장하면 학생 수가 많아질수록 점수 관리가 더 힘들어진다.

void Start()
    {
        int student1 = 100;
        int student2 = 90;
        int student3 = 80;
        int student4 = 70;
        int student5 = 60;

        Debug.Log(student1);
        Debug.Log(student2);
        Debug.Log(student3);
        Debug.Log(student4);
        Debug.Log(student5);
    }
  • 만약 학생 수가 5명이 아니라 100이면 변수를 100개 만들어 관리해야 한다.

  • 이런 경우 배열을 사용해 나열된 값들을 하나의 변수로 다룰 수 있다.

  • 배열을 사용해 점수 관리하기

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HelloCode : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        int[] students = new int[5];

        students[0] = 100;
        students[1] = 90;
        students[2] = 80;
        students[3] = 70;
        students[4] = 60;

        Debug.Log("0 번 학생의 점수 : " + students[0]);
        Debug.Log("1 번 학생의 점수 : " + students[1]);
        Debug.Log("2 번 학생의 점수 : " + students[2]);
        Debug.Log("3 번 학생의 점수 : " + students[3]);
        Debug.Log("4 번 학생의 점수 : " + students[4]);
    }
}
  • HelloCode 스크립트를 실행하여 결과를 확인하고 플레이 모드 해제


4.8.2 코드 설명

  • students라는 int 타입의 배열 변수로 다섯 학생의 점수를 관리한다. 먼저, int 배열이 될 변수 students를 선언했다.
int[] students;
  • int[ ] 처럼 타입 뒤에 [ ]를 붙여 해당 타입에 대한 배열 변수를 선언한다. 여기까지는 아직 배열에 방이 몇 개인지 정하지 않은 상태이다.

  • 다음과 같이 선언과 동시에 students 배열에 방을 5개 마련했다.

int[] students = new int[5];
  • new 키워드는 어떠한 타입의 오브젝트를 새로 생성한다는 의미다.

  • new를 이용해 5개의 방을 가진 int 배열을 생성하여 students 변수에 할당했다.

  • 각 방은 인덱스를 사용하여 접근할 수 있다. 특정 순번의 방(요소)에 접근할 때는 배열 변수에 대괄호 [ ]를 붙여 순번을 명시할 수 있다.

  • 예를 들어, 다음과 같이 첫 번째 요소에 접근하여 100을 할당할 수 있다.

students[0] = 100;
  • 첫 번째 요소에 값을 대입하는 데 students[1]이 아닌 students[0]으로 접근했다는 사실에 주목하자. 배열의 순번은 0부터 시작한다.
		students[0] = 100;
        students[1] = 90;
        students[2] = 80;
        students[3] = 70;
        students[4] = 60;
  • 위와 같은 코드가 실행되었을 때, students 배열의 모습을 그림으로 표현하면 다음과 같다.


4.8.3 for 문과 함께 사용하기

  • 배열은 for 문과 좋은 조합을 이룬다.

  • for 문은 순번을 넘기면서 처리를 반복한다. 배열은 순번을 사용해 요소에 접근한다. 따라서 for 문을 사용해 순번을 넘겨가며 배열의 모든 요소에 접근할 수 있다.

  • 앞의 예제에서는 일일이 순번을 명시하여 학생들의 점수를 출력했다. 이 부분을 for 문을 사용해 다음과 같이 수정할 수 있다.

void Start()
    {
        int[] students = new int[5];

        students[0] = 100;
        students[1] = 90;
        students[2] = 80;
        students[3] = 70;
        students[4] = 60;

        for (int i = 0; i < students.Length; i++)
        {
            Debug.Log((i + 1) + " 번 학생의 점수 : " + students[i]);
        }
    }
  • 배열 타입의 변수는 내부에 Length라는 변수를 가지고 있다. Length의 값은 배열의 길이이다. 예제에서 students.Length의 값은 5이다.

  • 결론적으로 예제의 for 문은 다음과 같이 동작한다.

  1. i가 0번째부터 시작해서

  2. i가 students.Length보다 작은 동안

  3. i를 1씩 증가시키면서 students[i]에 접근

  • 이렇게 결론적으로 students[0]에서 students[4]까지 students의 모든 요소에 접근하여 값을 출력했다.

Length는 변수처럼 동작하지만 실제 구현은 변수가 아닌 프로퍼티이다. 쉽게 설명하기 위해 지금은 변수라고 하겠다.


다음 강의에서 계속~

profile
게임 개발을 목적으로 공부하고 있는 대학생입니다.

0개의 댓글