본문 바로가기
Dart/Study

Dart에서 List: 순서 있는 데이터 집합을 마스터하세요!

by Maccrey Coding 2024. 7. 12.
728x90
반응형

Dart는 다양한 데이터 구조를 다루기 위한 강력한 컬렉션 라이브러리를 제공합니다.

이 중에서도 List는 순서 있는 데이터를 저장하는 데 가장 많이 사용되는 컬렉션입니다.

이 블로그에서는 Dart에서 List의 장점과 사용법에 대해 심층적으로 살펴보고, 실제 개발에서 활용 가능한 다양한 예시 코드와 함께 List 관련 팁과 최고의 관행을 소개합니다.

 

1. List의 장점

  • 순서 있는 데이터 저장: List는 데이터를 추가한 순서대로 유지하기 때문에 순서가 중요한 데이터를 저장하는 데 적합합니다.
  • 다양한 데이터 타입 지원: List는 String, int, double, bool과 같은 다양한 데이터 타입을 저장할 수 있습니다. 또한, 다른 List나 Map과 같은 복합 데이터 타입도 저장할 수 있습니다.
  • 효율적인 인덱싱: List는 인덱싱을 사용하여 원하는 요소에 빠르게 접근할 수 있습니다.
  • 다양한 기능 제공: List는 요소 추가, 제거, 삽입, 검색, 정렬 등 다양한 기능을 제공합니다.

2. List 사용법

 

2.1. List 생성

List를 생성하려면 다음과 같은 방법을 사용할 수 있습니다.

  • 직접 값을 지정하여 생성
List<String> names = ["Alice", "Bob", "Charlie"];
 
  • 빈 List 생성
List<String> emptyList = [];
 
  • 기존 List를 복사하여 생성
List<String> copiedList = names.toList();
 

2.2. List 요소 접근

 

List의 요소는 인덱싱을 사용하여 접근할 수 있습니다. 인덱스는 0부터 시작하며, 리스트의 마지막 요소에 접근하려면 리스트 길이에서 1을 뺀 수 입니다.

print(names[0]); // 출력: Alice
print(names[2]); // 출력: Charlie
 

2.3. List 요소 추가

 

List에 요소를 추가하려면 다음과 같은 방법을 사용할 수 있습니다.

  • add() 메서드 사용
names.add("David");
 
  • [] 연산자 사용
names[3] = "Emily";
 

2.4. List 요소 제거:

List의 요소를 제거하려면 다음과 같은 방법을 사용할 수 있습니다.

  • removeAt() 메서드 사용
names.removeAt(1); // 두 번째 요소 제거
 
  • remove() 메서드 사용
names.remove("Bob"); // "Bob"이라는 요소 제거
 

2.5. List 요소 삽입

List의 특정 위치에 요소를 삽입하려면 다음과 같은 방법을 사용할 수 있습니다.

  • insert() 메서드 사용
names.insert(1, "Frank"); // 두 번째 위치에 "Frank" 요소 삽입
 

2.6. List 요소 검색

List에서 특정 요소를 검색하려면 다음과 같은 방법을 사용할 수 있습니다.

  • contains() 메서드 사용
bool isExist = names.contains("Charlie"); // 출력: true
 
  • indexOf() 메서드 사용
int index = names.indexOf("Alice"); // 출력: 0
 

2.7. List 정렬

List의 요소를 정렬하려면 다음과 같은 방법을 사용할 수 있습니다.

  • sort() 메서드 사용
names.sort(); // 오름차순 정렬
names.sort((a, b) => b.compareTo(a)); // 내림차순 정렬

 

3. 실제 개발에서 활용 가능한 예시 코드

 

3.1. 학생 목록 관리

class Student {
  String name;
  int age;

  Student(this.name, this.age);
}

void main() {
  List<Student> students = [
    Student("Alice", 15),
    Student("Bob", 16),
    Student("Charlie", 17),
  ];

  // 특정 학생 찾기
  Student? foundStudent = students.firstWhere((student) => student.name == "Charlie");
  if (foundStudent != null) {
    print("${foundStudent.name} 학생의 나이는 ${foundStudent.age}살입니다.");
  } else {
    print("찾을 수 없는 학생입니다.");
  }

  // 학생 나이 평균 계산
  double averageAge = students.map((student) => student.age).average().toDouble();
  print("학생들의 평균 나이는 ${averageAge.toStringAsFixed(2)}살입니다.");
}
 

3.2. 쇼핑 카트 구현

class Product {
  String name;
  int price;
  int quantity;

  Product(this.name, this.price, this.quantity);
}

void main() {
  List<Product> cart = [
    Product("Apple", 1000, 2),
    Product("Banana", 500, 3),
    Product("Milk", 2000, 1),
  ];

  // 총 결제 금액 계산
  int totalPrice = cart.fold(0, (total, product) => total + product.price * product.quantity);
  print("총 결제 금액: ${totalPrice}원");

  // 특정 상품 제거
  cart.removeWhere((product) => product.name == "Banana");

  // 카트에 있는 모든 상품 출력
  for (Product product in cart) {
    print("${product.name} (${product.quantity}개): ${product.price * product.quantity}원");
  }
}
 

3.3. 텍스트 파일 내용 읽고 List에 저장

import 'dart:io';

void main() async {
  // 텍스트 파일 읽기
  File file = File('data.txt');
  String contents = await file.readAsString();

  // 텍스트 내용을 List에 저장
  List<String> lines = contents.split('\n');

  // List에 저장된 내용 출력
  for (String line in lines) {
    print(line);
  }
}
 

4. List 관련 팁과 최고의 관행

  • 적절한 List 길이 유지: 불필요한 메모리 사용을 줄이기 위해 List 길이를 최적화하는 것이 중요합니다. 예를 들어, List의 경우 필요 없는 요소는 제거하고, List에 새로운 요소를 추가하기 전에 List에 이미 존재하는지 확인하는 것이 좋습니다.
  • 불변성 사용: List를 불변으로 만들면 데이터 변경으로 인한 예상치 못한 오류를 방지할 수 있습니다. 새로운 List를 만들거나 기존 List를 복사하여 새로운 List를 만들 때 불변성을 사용하는 것이 좋습니다.
  • null 처리: List에서 null 값을 처리할 때 주의가 필요합니다. null 값을 허용하지 않는 경우, 요소를 추가하기 전에 null인지 확인해야 합니다. 또한, null 값을 처리하기 위한 코드를 작성해야 할 수도 있습니다.
  • 코드 가독성 향상: List를 사용할 때 명확하고 간결한 코드를 작성하는 것이 중요합니다. 변수 이름, 함수 이름, 주석을 사용하여 코드를 명확하게 표현하고, 복잡한 코드는 작은 함수로 나누는 것이 좋습니다.

5. 맺음말

 

Dart에서 제공하는 List는 다양한 데이터를 효율적으로 관리하고 사용하는 데 매우 유용한 도구입니다.

List의 특징과 사용법을 이해하고, 적절한 List를 선택하며, 팁과 최고의 관행을 따르면 Dart 앱 개발에서 List를 효과적으로 활용할 수 있을 것입니다.

728x90
반응형