Dev/Dart

[Dart] List 와 Queue 의 차이 (강의자료)

healthyryu 2025. 7. 29. 12:30

List

List 는 순서가 있는 데이터 컬렉션 입니다. 그리고 인덱스를 사용해 요소에 접근해서 데이터를 사용할 수 있습니다. Dart 에서의 리스트는 크기에 제한을 두거나 혹은 제한을 두지 않는 형태로도 만들 수 있습니다. 기본적으로 List 를 생성하는 방법은 크기에 제한을 두지 않습니다.

var fruits = ['apple', 'banana'];

List<int> = [1, 2, 3, 4, 5];

 

위와 같은 형태로 List 를 만들게되면 요소를 추가하거나 삭제하는 등 자유롭게 할 수 있습니다. 이완 다르게 List 의 개수를 제한하게 할 수 있는 방법은 다음과 같습니다.

var list = List.filled(5, 0, growable: false);

var list = List.generate(5, (i) => i, growable: false);

var list = List.empty(growable: false);

 

empty()  함수를 제외하고는 길이를 제한하는 List 의 경우 추가/삭제 기능이 동작하지 않으며 오로지 수정만 가능한 형태가 됩니다. 더불어서 List 자체의 특징이 아닌 Dart 언어적인 특징으로도 추가로 List 의 길이를 제한할 수 있습니다.

const fixedList = [1, 2, 3];

 

위와 같이 만들게 되면 추가/삭제/수정 모두가 되지 않습니다. const 의 특성상 빌드될때 고정을 시켜버리기 때문입니다.

위와 예제들 같이 4가지의 방법을 사용하면 리스트의 길이를 제한할 수 있습니다.

 

List 특징

- 순서가 있음

- 중복 허용

- 크기 제한에 두거나 or 크기 제한이 없는 형태로도 만들기 가능

 

 

Queue

Queue 는 dart::collection 에 정의되어 있는 자료구조이며, FIFO 구조여서 먼저 들어간 데이터가 먼자 나오는 형태입니다.

Queue 는 맨앞 혹은 맨뒤에 데이터를 빠르게 추가 및 삭제가 가능하며, 작업을 순차적으로 처리할때 적합합니다.

 

Queue 는 List 와 비슷하게 데이터를 추가 및 삭제 등 기능들이 List와 유사한 컬렉션이지만, 구조가 다르기 때문에 작업에 따른 시간 소요가 다릅니다. Queue 는 맨 마지막에 데이터를 입력 or 삭제 속도는 List 와 유사합니다만, 제일 처음에 값을 추가하거나 뺄 경우에는 훨씬  빠릅니다. List 의 경우에는 맨 앞의 값을 추가하고 뺄 경우에 맨 앞의 인덱스를 제외한 나머지 값들은 앞 혹은 뒤로 이동을 하게 됩니다.

 

List<int> list = [1,2,3,4,5] 가 있다고 가정을 하고 맨 앞의 요소(인덱스 0)에 0값을 추가한다고 가정하면 index 4 에 위치한 값을 index 5 로 옮기고, index 3에 위치한 값을 index 4로 옮기는 형태로 값들을 모두 옮기고 index 0 위치에 0을 추가하게 된다. 삭제는 이 형태와 반대를 한다고 생각하면 됩니다.

 

대신에 List 의 경우는 중간 특정 위치에 값을 자유롭게 추가 및 삭제가 가능합니다만, Queue 는 특정 위치에 값을 추가하거나 삭제할 수는 없고 removeWhere((element) => 조건) 을 통해서 Queue 전체를 순회하면서 특정 조건 값을 찾아서만 삭제가 가능합니다. 그래서 중간의 데이터를 자유로 추가 및 삭제를 하려면 Queue 를 사용해서는 안됩니다.

 

 

크기

Dart 에서 List 는 기본적으로 아무런 값이 없을때는 메모리에 확보된 사이즈가 0 or 4 입니다. 그리고 List 의 추가된 개수가 5개가 될때 공간을 2배 확보합니다. 이렇게 List 는 할당된 사이즈가 다 차면 2배씩 계속 증가를 합니다. 요소를 저장할 수 있는 내부 메모리를 0 → 4 → 8 → 16 → 32 → … 순으로 증가되면서 확보합니다.

Queue 도 내부적으로는 ListQueue 로 되어 있어서 메모리 사용적인 측면은 동일하며 내부 메모리는 0 → 8 → 16 → 32 → … 순으로 증가되면서 확보합니다. 기본 확보 메모리 사이즈가 8입니다.

 

 

반응형