Dart는 타입을 선언하는 것과 메서드의 반환 타입이 무엇인지 아는 것이 중요하다.
근데 메서드의 반환 타입이 무엇인지 모르는 경우가 많다.
물론, VSCode가 알려주지만 시그니처(메서드의 형태)가 도대체 어떤 의미인지까지는 잘 모른다.
그래서 오늘은 공식 문서에 나오는 메서드의 시그니처를 읽는 방법을 공부했다.
map 메서드
`List`의 `length`만큼 반복문이 동작하는 메서드.
콜백 함수에서 `List`의 각 요소를 읽어 올 수 있으며, return 되는 값을 모아 최종적으로 `Iterable`객체를 반환한다.
공식 문서에 나오는 코드를 분석해 보자.
Iterable<T> map<T>( T toElement( E e ) )
Iterable<T>
`map`메서드가 최종적으로 반환할 타입을 말한다.
var numbers = [1, 2, 3];
var strings = numbers.map((n) => '$n');
- 변수 `strings`의 최종 타입은 `numbers.map()`의 반환 타입으로 인해 `Iterable<String>`이 된다.
map<T>
`map`메서드를 호출할 때 명시적으로 T라는 타입을 지정할 수 있다.
그러면 반환되는 타입은 T를 요소로 가지는 `Iterable`이여야만 한다.
var numbers = [1, 2, 3];
var strings = numbers.map<String>((n) => '숫자: $n');
- 호출할 때 명시적로 `<String>`을 사용했으므로 변수 `strings`의 최종 타입은 `Iterable<String>`이 돼야 한다.
T toElement( E e )
- `toElement( E e )`는 `map`메서드의 콜백함수를 뜻한다.
- `T`는 이 콜백함수의 반환 타입이다.
- `e`는 콜백함수의 매개변수이며, `List`의 각 요소가 할당된다.
- `E`는 매개변수 `e`의 타입이다.
설명
위에서 부분적으로 설명한 것을 풀어서 설명하면 다음과 같다.
Iterable<T> map<T>( T toElement( E e ) )
`map`메서드는 호출할 때 `toElement`라는 콜백함수를 인자로 사용하고, 이 콜백함수의 매개변수인 `e`는 `List`의 각 요소이며 타입은 `E`이다.
콜백함수는 반복이 될 때마다 `T`라는 타입을 반환하고, 최종적으로 `map`메서드는 `T`를 요소로 하는 `Iterable<T>`을 반환한다.
마무리(느낀 점)
이제 메서드의 반환 값을 변수에 할당하여 초기화 할 때, `var`키워드를 사용해 타입 추론을 하는 것이 아니라 메서드의 타입을 적용하여 명시적으로 변수의 타입을 나타낼 수 있게 되었다.
Dart는 타입을 잘 지정하고, 무엇이 어떤 타입인지 미리 알고 있으면 컴파일 오류가 90%는 줄어들 것 같다.
그리고 메서드 체이닝을 더욱 활발히 사용 할 수 있을 것 같다.
'TIL(Today I Learned)' 카테고리의 다른 글
[TIL-014] Dart로 콘솔 텍스트 게임 만들기-2 (0) | 2025.03.21 |
---|---|
[TIL-013] Dart로 콘솔 텍스트 게임 만들기-1 (0) | 2025.03.19 |
[TIL-011] List<String> → List<int> 타입 변환 오류 해결 방법 (0) | 2025.03.17 |
[TIL-010] Dart 실전 문법 파헤치기 - Future Class (1) | 2025.03.14 |
[TIL-009] Dart 실전 문법 파헤치기 - Cascade 연산자 (0) | 2025.03.14 |