약 30개의 코딩테스트 연습 문제들을 풀어봤다.
문제를 풀어나가면서 바로바로 어떤 방식들을 써야할지 캐치가 되어가고 있는데, 생각만 들고 실제로 구현에 활용하지 못하는 스킬들이 있다.
이번 회고에서는 위 항목들을 정리해보고자 한다.
inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R>
- Iterable : map 함수는 Iterable 인터페이스를 확장하므로, 리스트, 배열, 맵 등의 다양한 컬렉션에서 사용될 수 있다.
- transform : (T) -> R : 각 요소에 적용될 람다 함수이다. T는 원래 컬렉션의 요소 타입이고, R은 변환 후의 타입이다.
- List : 변환된 결과를 담은 새로운 리스트를 반환한다.
짚고 넘어가자면,
map을 잘 활용하려면 람다 함수에 대한 이해가 필요하다.
map은 최종적으로 List를 반환한다.
val sum: (Int, Int) -> Int = {a, b -> a + b}
- 두 개의 정수를 인자로 받아, 더하여 정수를 반환한다.
val numbers = listOf(1, 2, 3, 4, 5) val squaredNumbers = numbers.map {it * it} //[1, 4, 9, 16, 25]가 출력됨
- it : 현재 순회 중인 리스트의 요소
- it * it : 해당 요소를 제곱하는 람다 함수
- 결과적으로 이 람다 함수가 map 함수에 전달되어 각 요소에 대해 제곱을 처리한 새로운 리스트가 생성된다.
inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T>
- Iterable < T > : filter 함수는 Iterable 인터페이스를 확장하므로, 리스트, 배열, 맵 등의 다양한 컬렉션에서 사용될 수 있다.
- predicate : (T) -> Boolean : 각 요소에 적용될 조건을 나타내는 람다 함수이다. T는 컬렉션의 요소 타입이고, Boolean은 조건의 결과이다.
- List< T > : 조건을 만족하는 요소들로 이루어진 새로운 리스트를 반환한다.
짚고 넘어가자면,
filter 역시 잘 활용하려면 람다 함수에 대한 이해가 필요하다.
filter는 최종적으로 List를 반환한다.
한 가지 더 짚고 넘어가자면 map과 filter에서 반환하는 List의 타입이 약간 다르다.
- filter : List< T >
- T는 제네릭 타입 매개변수로 어떤 타입이든 될 수 있으며, 리스트가 어떤 타입의 요소를 저장할 지를 나타낸다.
- 컬렉션에 데이터를 추가, 변경하는 작업
- map : List< R >
- R 또한 제네릭 타입 매개변수로 어떤 타입이든 될 수 있는데, 리스트가 어떤 타입의 결과를 반환할 지를 나타낸다. 주로 함수의 반환 타입으로 사용된다.
- 컬렉션을 변환하여 결과로 돌려주는 작업
val number = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9) val oddNumbers = numbers.filter {it % 2 != 0} //[1, 3, 5, 7, 9]가 출력됨
- it : 현재 순회 중인 리스트의 요소
- it % 2 != 0 : 각 요소가 홀수인지 판별하는 람다 함수
- 결과적으로 이 람다 함수가 filter 함수에 전달되어 조건을 만족하는 홀수로만 이루어진 새로운 리스트가 생성된다.
[TIL-240227]