본문 바로가기
  • 불확실한 내일을 위해
유니티 C#/C#

C#기초 - 배열 사용법

by 그린초코 2023. 5. 2.

반복문 for 과 자주사용되는 배열은 여러가지 값을 한꺼번에 다루어야 할 때 사용된다.

만약 1000명의 점수를 다룬다면 1000번의 변수를 선언해야 하는데, 이럴 때 필요한 것이 바로 배열이다.

 

예를 들어 player 5명에 대한 변수를 아래처럼 선언하고 각 변수에 숫자를 대입하여 출력한다면

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

public class test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        int player0;
        int player1;
        int player2;
        int player3;
        int player4;

        player0 = 5;
        player1 = 10;
        player2 = 15;
        player3 = 20;
        player4 = 25;

        Debug.Log(player0);
        Debug.Log(player1);
        Debug.Log(player2);
        Debug.Log(player3);
        Debug.Log(player4);

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

결과값 : 5, 10, 15, 20, 25

이렇게 된다.

 

위 예시를 반복문과 배열로 간결하게 만들어주면 아래와 같다. 

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

public class test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        int[] player = new int[5];
        player[0] = 5;
        player[1] = 10;
        player[2] = 15;
        player[3] = 20;
        player[4] = 25;

        for (int i = 0; i < 5; i++)
        {
            Debug.Log(player[i]);
        }

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

이걸 더 간결하게 만들면 아래와 같다. 

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

public class test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        int[] player = { 5, 10, 15, 20, 25 };
        for (int i = 0; i < 5; i++)
        {
            Debug.Log(player[i]);
        }

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

모두 같은 결과가 나오지만 매우 간결해졌다. 

 

배열의 값에는 요소라는 것에 할당되는데, 요소의 번호는 인덱스라고 하고 '0'부터 시작한다.

player[ i ] 처럼 변수 이름 뒤에 [ ] 안에 인덱스를 입력하면, 해당 인덱스 요소에 접근하게 된다. 

 

int [ ] player = {5, 10, 15, 20, 25}; 에서 인덱스 0은 5, 인덱스 1은 10이고 인덱스 4는 25인 것이다.

그러니까 값 5,10,15,20,25 는 인덱스는 0,1,2,3,4 인덱스로 총 5개가 할당 된 것이다.

여기서 만약 10을 출력하고 싶으면 인덱스 1을 이용하고 player[1] 라고 쓰면 된다.

25을 출력하고 싶으면 player[4] 라고 쓰면 된다.

특정 인덱스에 값을 할당하는 것도 가능하다.

인덱스 2에 있는 15값을  3으로 바꾸어 출력하고 싶으면 player[2] = 3 라고 쓰면 된다.  

그렇게 되면 {5, 10, 15, 20, 25} 는 {3, 10, 15, 20, 25}; 으로 되는 것이다. 

 

여기서는 배열에 넣는 계수가 정확히 5인걸 알아서 i<5로 해주었다.

만약 배열의 개수가 정확하지 않을 때는 i<player.Length 를 써야한다. 

( 배열형의 변수명.Length 는 배열의 길이를 나타낸다.)

 

예시를 들면

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

public class test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        int[] player = { 5, 10, 15, 20, 25 };
        for (int i = 0; i < player.Length; i++)
        {
            if(player[i]>= 20)
            {
                Debug.Log(player[i]);
            }

        }

    }

    // Update is called once per frame
    void Update()
    {

    }
}

결과값은 20, 25 이다

 

이를 응용해서 배열의 값을 평균내는 식을 써보면 아래와 같다. 

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

public class test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        int[] player = { 5, 10, 15, 20, 25 };
        int sum = 0;

        for (int i = 0; i < player.Length; i++)
        {
            sum += player[i];
        }
        int average = sum / player.Length;
        Debug.Log(average);
    }

    // Update is called once per frame
    void Update()
    {

    }
}

결과값 : 15

* 만약 소수점까지 출력해야 한다면 

int average = sum / player.Length; 를 float average = 1.0f * sum / player.Length; 로 입력해주어야 한다.  (지금은 소수가 없어서 저렇게 입력해도 15로 나오지만, 소수점이 있으면 그대로 출력될 것이다.)

 

참고로  위에서 int [ ]  player = { 5, 10, 15, 20, 25 }; 이 부분은 배열 선언과 동시에 값을 할당한 것이다.

하지만 값은 선언하지 않고 아래와 같이 배열의 크기만 설정하는 것도 가능하다. 

using JetBrains.Annotations;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Study2_ArrayList : MonoBehaviour
{
    
    public int[] inArray = { 10,5,-6,48 }; // 배열 선언과 동시애 값 할당
    public int[] inArray2 = new int[3]; // 배열의 크기만 설정

    // Start is called before the first frame update
    void Start()
    {
    }

    // Update is called once per frame

}

 

이렇게 코딩한 스크립트를 오브젝트에 적용 후 플레이해보면 해당 오브젝트의 inspector에 아래와 같이 뜬다.

 

 

In Array에는 할당된 값이 들어가있지만 In Array 2 에는 따로 할당값을 설정하지 않아 자료형의 기본값인 0이 부여되었다. 

 

728x90

댓글