티스토리 뷰

반응형

Base Of Coding 베오코 Youtube 채널을 개설했습니다.

아직은 많이 부족하지만, 블로그에 있는 정보들을 영상으로 담아 보다 더 자세하게 알려드리겠습니다.

점차 발전해나가는 모습 지켜봐주시면 감사하겠습니다.

좋아요와 구독으로 응원해주세요!


https://www.youtube.com/channel/UC7abgcK0OZtkjU9ERbsYKnQ



=========================================================================







안녕하세요. Base Of Coding입니다.


이전까지 적었던 내용들입니다.



오늘은 배열에 대해서 한 번 적어 볼 예정입니다. 배열은 잘 쓰면 가독성 뿐만 아니라 아주 편리해질 수 있습니다. 그럼 한 번 배워볼까요?




1. 배열이란?

- 배열은, 타입을 여러 개를 저장할 수 있는 저장소라고 보시면 될 것 같습니다.

사용하는 방법은, int[] integer; 라는 형식으로 사용이 가능합니다. 사용방법을 보면서 천천히 들여다 보도록 하겠습니다.


2. 배열 초기화 및 기본 사용

1. 첫 번째 방법


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
*   Code Design Develop. Base Of Coding
*   https://includecoding.tistory.com/
*/
 
using UnityEngine;
 
/// <summary>
/// 배열 초기화 첫 번째 방법
/// </summary>
 
public class ArrayTest : MonoBehaviour 
{
    // 각각 10개의 데이터를 넣을 수 있는 배열로 초기화.
 
    private int[] integer = new int[10];         // 나이를 담는 배열
    private string[] str = new string[10];       // 이름을 담는 배열
    private float[] flo = new float[10];         // 키를 담는 배열
 
    private void Start()
    {
        // 디버그 출력을 해서, 현재 배열의 크기를 알아보도록 합니다.
        Debug.LogFormat("integer length : {0} , str length : {1}  , float length : {2}", integer.Length, str.Length, flo.Length);
    }
}



2. 두 번째 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
*   Code Design Develop. Base Of Coding
*   https://includecoding.tistory.com/
*/
 
using UnityEngine;
 
/// <summary>
/// 배열 초기화 두 번째 방법
/// </summary>
 
public class ArrayTest : MonoBehaviour
{
    // 초기화를 하면서 바로 값을 넣어주는 방식으로 초기화를 한다.
 
    private int[] integer = { 0123456789 };
    private string[] str = { "A""B""C""D""E""F""G""H""I""J" };
    private float[] flo = { 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f, 1.8f, 1.9f };
 
    private void Start()
    {
        for (int i = 0; i < integer.Length; i++)
        {
            // 각각 몇 번째 인덱스에 값이 들어가 있는 지를 보여준다.
            Debug.LogFormat("integer {0}번째 인덱스 : {1} , str {2}번째 인덱스 : {3}  , flo {4}번째 인덱스 : {5}", i, integer[i], i, str[i], i, flo[i]);
        }
    }
}



보통 배열은 이런 형식으로 초기화를 한 뒤 사용을 합니다.


그리고, 배열의 첫 번째 인덱스는 1이 아닌, 0입니다. 이게 좀 헷갈리게 느끼실 수도 있다고 생각되는 부분인데

사람들은, 숫자를 셀 때 0부터 말하지 않고, 1로 시작을 해서 셉니다.

하지만, 10진수는 0~9이 기본이기 때문에, 1이 아닌 0부터 시작하는 게 맞다고 보시면 될 것 같습니다.

그냥 배열은 아 0부터 시작하는구나?라고 생각해주시고 코딩을 시작하시면 됩니다!


< 첫 번째 방법 풀이 >


- 첫 번째 방법은 초기화를 한 뒤, 데이터를 담을 수 있는 크기를 설정합니다. 정수를 담는 배열 10개와 문자열을 담는 배열 10개, 그리고 실수를 담는 배열 10개로 구성을 한 뒤, Start함수에서, 디버그로 출력을 시키면, 10, 10, 10이란 값이 뜨게 되는데 이 것은 배열의 길이를 출력하는 것으로써,

Length 라고 표현하기도 합니다.


좀 쉽게 풀이를 하자고 한다면, 한 식당에는 김치찌개만 팔고 있는 식당이 있습니다. 하지만 김치찌개를 담을 수 있는 그릇은 10개밖에 없습니다.

그런데, 손님이 11명이 오셨네요? 그렇다면 손님 한명은 드시질 못하겠지요? 그렇기 때문에, 크기를 설정을 했다면 딱 그 크기만 집어넣을 수 밖에 없습니다.



< 두 번째 방법 풀이 >

- 두 번째 방법은, 초기화를 한 뒤 데이터를 담을 수 있는 크기를 미리 설정하지 않고, 값을 미리 대입해버려서, 각각의 크기를 정해버리는 방식입니다.
각각 배열에 총 10개의 데이터를 넣은 다음, Start 함수에서 디버그를 이용하여, 각각의 배열의 인덱스에 몇 개의 값이 들어가 있는 지를 알아보는 코드입니다.

이 것 또한 풀이를 쉽게 하자면, 한 식당은 예약 손님만 받고 한 가지의 메뉴만 파는 식당이 있습니다. 그렇게 정해진 예약손님을 제한 없이 받은 다음
어느 순간 예약을 못 받는다고 하였습니다. 그렇게 예약손님만 받다가 예약도 하지 못한 손님이 왔다면? 식당에는 정해진 룰이 있기 때문에, 그 손님을
받을 수 없게 됩니다. 그렇기 때문에, 이 두 번째 방법 또한 정해진 데이터를 초기화 당시 대입을 한 상태라면 프로그램이 실행하면서 바꿀 수는 없습니다.


3. 배열을 사용하면 좋은 점

1
2
3
private int age = 10;
private int age1 = 20;
private int age2 = 30;


이렇게 사용하는 방법이


1
private int[] age = { 102030 };


이렇게 깔끔하게 보기 좋게 사용이 가능합니다.



4. 배열을 사용하면 안 좋은 점

- 배열을 사용하면 안 좋은 점이라고 보면, 배열은 초기화를 한 뒤에는 크기를 변경할 수가 없다는 점입니다.
List라고, 제네릭이 있는 데 List는 한 번 초기화만 하고, 다른 곳에서 값을 넣으면 알아서 크기가 늘어나고 줄어들고 하는 것이 가능한 반면 배열은 크기를 한 번 설정한 뒤 부터는 프로그램이 실행하고 나서 값을 크기보다 많게 설정이 불가능 하다는 것입니다. 또는 두 번째 방법처럼 값을 이미 설정을 한 상태라면, 프로그램 실행하고 나선 값을 넣어줄 수가 없다는 점입니다.

5. 배열을 사용하면 좋은 경우

- 배열은 역시 크기가 이미 정해져 있고, 그 크기는 절대 건드리지 않는다면 List와 같은 제네릭 자료구조보다는 배열을 쓰시는 것도 나쁘지는 않습니다.
하지만, 난 프로그램이 실행하고 이 값들이 빠지거나 더 추가가 될 거 같아!라고 하신다면, List를 사용하시는 게 좋습니다.
제네릭 자료구조 또한 올릴 예정입니다.

6. 초보자 분들이 배열을 사용할 때 흔히 하는 실수

1. 배열의 크기보다 많이 설정하였다면?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
*   Code Design Develop. Base Of Coding
*   https://includecoding.tistory.com/
*/
 
using UnityEngine;
 
public class ArrayTest : MonoBehaviour
{
    private int[] age = new int[2];
 
    private void Start()
    {
        age[0= 30;
        age[1= 29;
        age[2= 5;
 
        Debug.Log(age[0+ " : " + age[1+ " : " + age[2]);
    }
}


- 배열의 크기는 현재 2로 설정이 되어 있습니다. Start 함수에서, 0번과 1번 인덱스를 30과 29로 초기화를 해 놓은 상태인데, 갑자기 2번 인덱스 또한 추가를 하게 된다면, Unity 자체에서, IndexOutOfRangeException: Array index is out of range.와 같은 에러 메시지를 띄웁니다.

배열의 인덱스가 범위를 벗어났다라는 것, 즉 배열은 0~1번 인덱스만을 가지고 있는 데 2번 인덱스에는 왜 넣는거니? 라고 생각하시면 됩니다!


2. 배열의 인덱스는 무조건 0번 부터 시작이랍니다!!


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
*   Code Design Develop. Base Of Coding
*   https://includecoding.tistory.com/
*/
 
using UnityEngine;
 
public class ArrayTest : MonoBehaviour
{
    private int[] age = new int[2];
 
    private void Start()
    {
        age[1= 30;
        age[2= 29;
 
        Debug.Log(age[1+ " : " + age[2]);
    }
}


- 배열의 인덱스는 무조건 0번부터 시작이라고 말씀드렸습니다. 자 여기서 보면, 크기는 2로 설정하고 2개의 값을 초기화했지만, 이상한 점을 발견했습니다.

0번 부터 초기화를 해줘야하지만, 깜빡하고 1번부터 시작해서 2번 인덱스까지 초기화를 해줬지만 에러 메시지는 컴파일러에서 뜨질 않네요?

그런데 막상 실행을 해보니, 첫 번째 실수와 같은 오류가 발생했습니다. 에러는 없는 데 뭐가 이상한 거지? 라고 생각하실 수 있습니다. 코딩 좀 하셨던 분들이라면

금방 캐치하실 수 있을 겁니다. 왜냐하면 겪어 본 적이 있거든요ㅎㅎ 이럴 경우 천천히 코드를 살펴보면서 왜 에러가 난 건지 파악을 하신다면 충분히 찾아내실 수 있습니다.



자 지금까지 배열에 대해서 한 번 알아봤습니다. 다음은, 함수에 대해서 한 번 알아보도록 하겠습니다. 


Base Of Coding이였습니다. 감사합니다.




반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함