본문 바로가기

전체 글

(67)
코틀린: 5장 테스트에 도전하세요 (난이도: medium - 정답 해설 1, 2, 3번) 문제 1은 정렬할 때 다중 키(multi-key)를 순차적으로 적용하는 문제입니다. 코틀린: 5장 테스트에 도전해 보세요(난이도: easy- 정답 해설 4, 5, 6)에서 설명한 것처럼 sortedWith()의 매개변수로 정렬 기준을 지정하는 Comparator 객체를 전달하면 됩니다. 정렬 기준으로 사용할 속성(grade → name → id)를 compareBy()와 thenBy()에 차례로 적용합니다. 내림차순으로 적용할 때는 compareByDescending()과 thenByDescending()을 메소드 체이닝 형태로 적용합니다.data class Student(val name: String, val grade: Int, val id: Int)fun sortStudents(src: List..
코틀린: 5장 테스트에 도전하세요 (난이도: medium) 문제 1 data 클래스 Student는 3개의 속성(name, grade, id)을 갖고 있습니다. 리스트 컬렉션 객체 student를 정렬하되, 첫 번째 정렬 기준은 grade, 두 번째 정렬 기준은 name, 그리고 마지막 정렬 기준은 id를 적용합니다. 단, grade는 내림차순을, name과 id는 오름차순으로 적용해야 합니다.data class Student(val name: String, val grade: Int, val id: Int)fun sortStudents(src: List): List { // 코드를 완성하세요.}fun main() { val students = listOf( Student("Alice", 92, 5), Student("Cha..
코틀린: 5장 테스트에 도전해 보세요(난이도: easy- 정답 해설 4, 5, 6번) 문제 4는 리스트 객체 words를 알파벳 순으로, 단어 길이를 기준으로 각각 정렬하는 것입니다. 아래처럼 sorted() 및 sortedBy()를 생각했다면 기본기를 잘 갖추고 있는 겁니다. sorted()와 sortedBy()는 정렬된 새 리스트 객체를 반환하기 때문에 원본 리스트 객체를 바꾸지 않습니다. 그래서, sorted()와 sortedBy()는 불변 리스트 객체에 적용하는 게 일반적이죠.fun main() { val words = listOf("banana", "apple", "cherry", "orange", "grape") val sortedAlpha = words.sorted() val sortedByLength = words.sortedBy { it.length }..
코틀린: 5장 테스트에 도전해 보세요(난이도: easy- 정답 해설 1, 2, 3번) 문제 1은 1에서 20까지 정수 리스트를 만들고, 이 리스트에서 짝수만 출력하는 코드를 만드는 것입니다. 아래 코드를 떠올렸다면, 코틀린 컬렉션에 대해 80% 이해하고 있는 겁니다.fun main() { val numbers = (1..20).toList() val evens = numbers.filter { it % 2 == 0 } println("Even numbers: $evens")}아래처럼 메소드 체이닝을 적용하는 것이 좀 더 일반적입니다.val evens = (1..20).toList().filter { it % 2 == 0 }println("Even numbers: $evens")메소드 체이닝을 적용할 때는 메소드 적용 순서가 중요합니다. 위 코드보다는 먼저 filter()..
코틀린: 5장 테스트에 도전해 보세요(난이도: easy) 문제 1 1에서 20까지 정수 리스트를 만드세요. 이 리스트에서 짝수만을 출력하는 프로그램을 작성하세요.문제 2 2개의 집합 객체 setA = {1, 2, 3, 4, 5}와 setB = {4, 5, 6, 7, 8}가 있을 때, 두 집합의 합집합(union)과 교집합(intersection)을 구하세요. 또, 차집합(A-B)와 차집합(B-A)의 결과는 같을까요?문제 3 학생 이름과 성적을 갖는 Map 객체를 만들어 보세요([Alice, 85], [Bob, 70], [Charlie, 90], [Diana, 60]). 이름 순으로 나열해보고, 성적 순으로도 나열해 보세요. 또, 점수가 80점 이상인 학생들을 출력해 보세요. 문제 4 단어 리스트 words = listOf("banana", "apple"..
코틀린: fold와 reduce - 누적 합과 누적 곱 fold, reduce 함수에 관한 보충 설명입니다. 자세한 내용은 쉽게 다가가는 최신 프로그래밍: 코틀린 - 5.13 집계(aggregate)를 참고하기 바랍니다.코틀린의 표준 라이브러리 함수는 어마무시하게 많습니다. 100% 믿고 사용할 수 있는 라이브러리 함수를 안쓴다는 건 그만큼 손해입니다. 이름만 생소할 뿐 사용 방법은 비교적 간단합니다. 사실 함수 이름도 아무렇게나 붙인 게 아닙니다. 여기서는 누적 합 (accumulated sum) 과 누적 곱 (accumulated product) 을 구하는 데 사용하는 fold와 reduce를 집중적으로 알아보겠습니다.컬렉션 원소의 누적 합이나 누적 곱을 구해야 할 때 여러분은 어떻게 구현합니까? 대부분 for 문을 사용하겠죠. 예제에서는 누적 곱을 구..
코틀린: Comparable 인터페이스와 Comparator 인터페이스 Comparable과 Comparator 인터페이스에 대한 보충 설명입니다. 자세한 내용은 쉽게 다가가는 최신 프로그래밍: 코틀린 - 5.12 정렬을 참고하기 바랍니다.2개 인터페이스 모두 '비교(compare)'라는 이름을 갖고 있어 도대체 뭐가 다를까 궁금하죠. 가장 큰 차이점은 Comparable은 일반 클래스에서 구현 상속을 받아 사용하며, Comparator는 람다 식으로 다양한 방식의 비교 함수를 구현할 때 사용합니다.■ Comparable 인터페이스와 추상 메소드 compareTo() 먼저 Comparable 인터페이스를 상속받아 추상 메소드 compareTo()를 구현한 예입니다. compareTo() 메소드는 수신자 객체(this)와 비교 대상 객체(other)의 name 속성을 비교합..
코틀린: 시퀀스(Sequence)와 컬렉션(Collection)은 뭐가 다를까요? 시퀀스(Sequence)에 관한 보충 설명입니다. 자세한 내용은 쉽게 다가가는 최신 프로그래밍: 코틀린 - 5.7 iterator와 sequence를 참고하기 바랍니다. 시퀀스와 컬렉션의 공통점은 "여러 개 원소를 다룰 수 있다" 입니다. 그러나, 원소를 저장하고 처리하는 방식은 전혀 다릅니다. 간단히 정리하면, 컬렉션은 열성적 처리(eager evaluation) 방식이며 시퀀스는 지연 처리(lazy evaluation) 방식입니다. eager는 "열성적인, 간절히 갈망하는" 뜻입니다. 컬렉션은 보자마자 달려드는 스타일인 반면, 시퀀스는 느긋하게 기다리는 스타일인 셈입니다. 여러 개 메소드를 연결해서 처리하는 메소드 체이닝(method chaining)으로 구현했을 때 유의해야 할 내용이 있습니다. 컬..