1 분 소요

배열과, 배열리스트&리스트

  • 배열은 동적으로 크기 할당이 불가능하고 리스트(배열리스트)는 가능하다.
  • 처음 배열 생성때 크기를 n으로 한다면 이후 코드작업에서 n개의 이상으로 크기를 늘릴수도 없고 저장할 수 도 없다.
  • 하지만 list는 메서드(remove, add)를 이용해 늘릴수도, 줄일수도, 저장할수도 있다

배열의특징:

  • 열은 연속된 메모리 공간으로 이루어져 있어서 메모리 관리가 용이하다.
  • 그리고 배열의 값들은 Index(인덱스)로 이루어져 있기에 인덱스로 접근 시 빠르게 해당 값을 찾을 수 있다.
  • 하지만, 위에서 말했듯이 동적 할당이 불가능하다는 큰 단점을 가지고 있다.
  • 참조형식

image

image

크기 초과

image

타입 오류

image

ArrayList의 특징:

  • 리스트는 포인터를 사용하여, 다음 데이터의 주소 값을 가지고 있기에
  • 데이터 추가/삭제가 편리하다.
  • 그 말인즉슨, 데이터의 크기를 동적으로 할당할 수 있다는 것이다.
  • 하지만, 위에서 말한 포인터를 사용하여 다음 데이터의 주소 값을 가지고 있어야
  • 하므 로 불필요한 메모리가 추가로 사용되기에 메모리 측면에서는 비효율적이다.
  • 그뿐만 아니라, 배열에는 Index라는 Key(키) 값이 존재하지만 리스트에는
  • 그러한 키값이 존재하지 않기에 검색에는 유용하지 않다.

image

→ 크기가 고정되어있다면 array, 유동성이 있다면 ArrayList!

List특징:

  • 마찬가지로 고정되지 않는 가변 객체 타입이다.
  • ArrayList의 단점을 보완하여 컴파일시 배열의 타입추론을 한다.
  • 즉, 같은 타입만 저장가능하고, 때문에 박싱/언박싱이 발생하지않는다.
  • Add()제거, RemoveAt():제거, List.Count:사이즈 확인

image

null관련 연산자

image

a는 int값이나 Null을 가질 수 있는 변수이다. a가 Null 이 아니면 c에 a를 넣어주고, a가 Null 이면 0을 넣어주는 코드를 3가지 방법으로 사용할 수 있다. 누가 봐도 3번이 확연하게 간단해진 것을 볼 수 있다. ?? (Null 병합 연산자) 는 두 개의 피연산자를 가지고 있다. (?? 의 양옆에) 왼쪽에 있는 피연산자가 Null 이 아니면 그 값을 사용하게 되고, Null 이면 오른쪽에 있는 피연산자를 사용하게 된다.

배열과 for문 활용

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

public class Player : MonoBehaviour
{
    public Player2 _player2;   
    public int _moveSpeed;
    BoxCollider _box;

    public int score;

    public GameObject[] students;
    public GameObject sph;


    void Start()
    {
        _box = this.gameObject.GetComponent<BoxCollider>();
        
        _box.isTrigger = true;

        for (int i = 0; i < students.Length; i++)
        {
            students[i].transform.position = new Vector3(0, 0, i+1);
            GameObject giveGameobj = Instantiate(sph, students[i].transform);
            giveGameobj.transform.localPosition = new Vector3(0, 0, 0.5f);
        }

    }
}

image


public List<GameObject> player2List;
public GameObject cube2;
void Start()
    {
        player2List.Add(cube2);
    }

image

  • 최초

image

  • 최종

찾기

  • Find("오브젝트이름") = 하이라키에있는 오브젝트이름과 똑같은 오브젝트들을 불러옴
  • FindGameObjectsWithTag("태그이름") = 태그이름과 같은 오브젝트들을 불러옴

image

player2array = GameObject.FindGameObjectsWithTag("Player");

image

  • GameObject.FindObjectOfType<컴퍼넌트이름> = 컴퍼넌트이름과 같은 컴퍼넌트가 들어가 있는 오브젝트를 불러옴

출처 및 참고: https://im-first-rate.tistory.com/44

댓글남기기