2025-09-24

컬렉션 관련 메서드

오늘은 Dart의 컬렉션 메서드를 정리했다.

  • map() : 각 요소를 변환하여 새로운 Iterable을 반환한다.
    var numbers = [1, 2, 3];
    var squared = numbers.map((n) => n * n);
    print(squared); // (1, 4, 9)
    
  • where() : 조건을 만족하는 요소들만 필터링해서 반환한다.
    var numbers = [1, 2, 3, 4, 5];
    var even = numbers.where((n) => n.isEven);
    print(even); // (2, 4)
    
  • firstWhere() : 조건을 만족하는 첫 번째 요소 반환한다. 조건에 맞는 요소가 없으면 예외 발생.
    var numbers = [1, 3, 5, 7];
    var firstOdd = numbers.firstWhere((n) => n % 2 == 1);
    print(firstOdd); // 1
    // 조건 불만족 시 대체값 지정
    var result = numbers.firstWhere((n) => n > 10, orElse: () => -1);
    print(result); // -1
    
  • lastWhere() : 조건을 만족하는 마지막 요소 반환. 조건에 맞는 요소가 없으면 예외 발생.
    var numbers = [1, 3, 5, 7];
    var lastOdd = numbers.lastWhere((n) => n % 2 == 1);
    print(lastOdd); // 7
    
  • reduce() : 요소들을 차례대로 누적해 단일 값을 생성한다. (예를 들어 누적)
    var numbers = [1, 2, 3, 4];
    var sum = numbers.reduce((a, b) => a + b);
    print(sum); // 10
    
  • fold() : reduce와 비슷하지만 초기값을 지정할 수 있다. 빈리스트에도 사용가능.
    var numbers = [1, 2, 3, 4];
    var sum = numbers.fold(0, (prev, element) => prev + element);
    print(sum); // 10
    
  • any() : 조건을 만족하는 요소가 하나라도 있으면 true를 반환한다.
    var numbers = [1, 2, 3];
    print(numbers.any((n) => n > 2)); // true
    print(numbers.any((n) => n > 5)); // false
    
  • every() : 모든 요소가 조건을 만족해야 true를 반환한다.
    var numbers = [2, 4, 6];
    print(numbers.every((n) => n.isEven)); // true
    print(numbers.every((n) => n > 3)); // false
    
  • takeWhile() : 조건이 참인 동안 요소를 가져오고 거짓이 되는순간 중단.
    var numbers = [1, 2, 3, 4, 1];
    var result = numbers.takeWhile((n) => n < 4);
    print(result); // (1, 2, 3)
    
  • skipWhile() : 조건이 참인 동안 건너뛰고, 거짓이 되는 순간부터 나머지 요소들을 반환한다.
    var numbers = [1, 2, 3, 4, 1];
    var result = numbers.skipWhile((n) => n < 3);
    print(result); // (3, 4, 1)
    

요약

  • map/where → 변환 & 필터링
  • firstWhere/lastWhere → 특정 요소 선택
  • reduce/fold → 누적
  • any/every → 조건 검사
  • takeWhile/skipWhile → 조건 기반 부분 추출


Class의 메서드

  • 인스턴스 메서드
    • 객체를 생성해야 호출할 수 있고, 인스턴스 변수에 접근 할 수있다.
  • 정적 메서드 (static)
    • 객체를 생성하지 않아도 클래스명.메서드명() 형태로 접근 가능. 인스턴스 변수를 사용할 수 없다.


제네릭

클래스를 정의할 때 타입을 일반화시켜 재사용성을 높일 수 있다.

class Box<T> {
  T value;
  Box(this.value);
}

Box<int>, Box<String>처럼 다양한 타입을 안전하게 담을 수 있다.


final class

final class는 상속이 불가능하다. 더 이상 다른 클래스가 이를 확장할 수 없고, 이대로 사용해야 한다.



회고

  오늘은 Dart에서 데이터를 다루는 다양한 메서드와 클래스 관련 내용을 정리했다. 컬렉션 메서드들은 코드 양을 줄이고 가독성을 높이는 데 큰 도움이 될 것 같다.

태그:

카테고리:

업데이트: