본문 바로가기

내배켐 Unity TIL

Unity 8일차 TIL - 배열과 리스트

1. 배열

같은 데이터 타입의 변수를 여러 개 저장할 수 있는 데이터 타입이다.

예를 들어서 1부터 100까지의 숫자를 변수로 저장하려고 한다면 100개의 변수가 필요하지만, 배열을 사용하게 되면 한 개의 변수에 100개의 데이터를 넣을 수 있다.

쉽게 생각하면 각각의 방이 길게 이어져 있고, 각각의 방 안에 원하는 값을 넣는다고 생각하면 된다.

 

2. 배열의 선언 및 초기화

선언 : 데이터 타입[] 배열 이름; ex) int[] number;

초기화 : 배열 이름 = new 데이터 타입[크기]; ex) number = new int[99];

한 줄로 선언 및 초기화 : 데이터 타입[] 배열이름 = new 데이터 타입[크기]; ex) int[] number = new int[99];

 

배열을 사용할 때 알면 좋은 점

- 반드시 크기를 지정해야 한다는 것이다. (방의 개수를 정해줘야 한다.)

- index는 0부터 시작한다.

- index를 사용하여 원하는 위치에 접근 가능하다.

ex) number 배열 변수에 1부터 100까지 차례대로 넣었다고 가정했을 때, index는 0번부터 시작하므로 number[98] -> 99를 저장하고 있다.

- 배열을 각각 출력하거나 각각의 데이터들을 이용해서 비교하고 싶으면 for문을 사용하면 편하다.

- 배열 이름.Length = 배열의 총 개수 (for문에서 범위 부분 설정할 때 많이 사용함.)

 

3. 리스트

List는 가변적인 크기를 갖는 배열이다. 즉 크기를 미리 정해주지 않아도 된다.

형식 : List<데이튜 타입> 리스트 이름 = new List<데이터 타입>(); ex) List<int> numbers = new List<int>();

추가 : 리스트 이름.Add(데이터); ex) numbers.Add(1);

삭제 : 리스트 이름.Remove(데이터); ex)numbers.Remove(1);

 

리스트를 사용할 때 알면 좋은 점

- 리스트도 마찬가지로 배열이므로 원하는 값을 찾을 때는 리스트 이름[인덱스]로 사용한다.

- 추가 할 때마다 방이 생기는 구조이다. ex) Add를 한 번 할 때마다 index는 0부터 시작해서 점점 커진다.

- 중간에 있는 값을 삭제하게 되면 index 값도 줄어든다.

ex) numbers.Add(3); numbers .Add(2); numbers .Add(1);

총 3번을 추가하면 numbers[0] = 3, numbers[1] = 2, numbers[2] = 1 이 들어가게 되며, 3의 크기를 가진 배열이 된다.

여기서 numbers.Remove(2)로 중간 값인 numbers[1]에 해당하는 값을 지워주면 numbers[0] = 3, numbers[1] = 1이 된다.

즉, List에 많이 추가한 뒤에 삭제하게 되면 index 값이 변한다는 것도 생각해야 한다.

 

4. 배열과 리스트의 차이

메모리 사용량 증가 : 리스트는 동적으로 크기를 조정하므로 배열보다 많은 메모리를 사용한다.

데이터 접근 시간 증가: 리스트는 연결 리스트로 구현되기 때문에, 인덱스를 이용한 데이터 접근이 배열보다 느리다.

코드 복잡도 증가 : 리스트는 동적으로 크기를 조정할 수 있기 때문에 데이터 추가, 삭제 등의 작업이 배열보다 간편하지만 이러한 유연성은 코드 복잡도를 증가시킬 수 있다.

 

초기 크기를 정하기 어려울 때 List를 사용하게 되면 편할 것 같지만서도 장단점이 분명 존재하는 것 같다.

그렇기에 데이터의 크기와 사용 목적을 고려해서 배열과 리스트 중에 적절한 것을 선택해야 할 필요가 있다.