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); // -1lastWhere(): 조건을 만족하는 마지막 요소 반환. 조건에 맞는 요소가 없으면 예외 발생.var numbers = [1, 3, 5, 7]; var lastOdd = numbers.lastWhere((n) => n % 2 == 1); print(lastOdd); // 7reduce(): 요소들을 차례대로 누적해 단일 값을 생성한다. (예를 들어 누적)var numbers = [1, 2, 3, 4]; var sum = numbers.reduce((a, b) => a + b); print(sum); // 10fold(): reduce와 비슷하지만 초기값을 지정할 수 있다. 빈리스트에도 사용가능.var numbers = [1, 2, 3, 4]; var sum = numbers.fold(0, (prev, element) => prev + element); print(sum); // 10any(): 조건을 만족하는 요소가 하나라도 있으면 true를 반환한다.var numbers = [1, 2, 3]; print(numbers.any((n) => n > 2)); // true print(numbers.any((n) => n > 5)); // falseevery(): 모든 요소가 조건을 만족해야 true를 반환한다.var numbers = [2, 4, 6]; print(numbers.every((n) => n.isEven)); // true print(numbers.every((n) => n > 3)); // falsetakeWhile(): 조건이 참인 동안 요소를 가져오고 거짓이 되는순간 중단.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에서 데이터를 다루는 다양한 메서드와 클래스 관련 내용을 정리했다. 컬렉션 메서드들은 코드 양을 줄이고 가독성을 높이는 데 큰 도움이 될 것 같다.