본문 바로가기

코틀린

코틀린: 3장 테스트에 도전해 보세요

쉽게 다가가는 최신 프로그래밍: 코틀린 - 3장 함수를 완전히 이해했나요? 다음 문제를 풀어 보세요.

문제 1 아래 코드는 교재 p.117에서 설명한 프로그램입니다. (1) 함수 divide()의 형식 인자 b가 0이면 어떤 Exception이 발생할까요? (2) 교재 p/74쪽에서 설명한 명시적 예외 발생: throw를 참고하여, 예외 처리가 가능하도록 코드를 수정해 보세요.

fun divide(a:Int=5, b:Int, c:Int=3): Double {
    return (a/b + c).toDouble()
}

fun main() {
    println(divide(b=1))     
    println(divide(5, 2))    
}

 

 

문제 2 교재 p.136의 함수 convert() 함수를 테스트하기 위한 예제로 소문자 변환 함수 lowercase()만 사용했습니다. String 관련 다른 함수를 사용하는 예를 적어도 3개 이상 추가해 보세요.

fun convert(s:String, lower:(String) -> String): String {
    return lower(s)
}

fun main() {
    val hello = "Hello, Kotlin!"
    println(convert(hello) { it.lowercase() })   // 이런 에제 코드를 3개 이상 추가  
}

 

문제 3 교재 p.137의 함수 convert()는  형식 인자 중 1개만 소문자로 변환합니다. 형식 인자 2개 모두 소문자로 변환하도록 전체 코드를 수정하세요.

fun convert(s1:String, s2:String, lower:(String, String) -> String): String {
    return lower(s1, s2)
}

fun main() {
    val hello = "Hello, Kotlin!"
    println(convert("java", hello) { _, s2 -> s2.lowercase() }) 
}

 

문제 4 두 숫자의 최소 공배수(LCM, least common multiples)를 구하는 함수를 교재 p.121에 소개했습니다. 함수 findLCM()을 람다 식으로 바꿔서 코드를 작성해 보세요. 단, 아래 조건을 모두 만족해야 합니다.
(1) 교재에 소개한 함수의 코드를 수정해야 하며, 인터넷 검색에서 찾은 함수를 사용하면 안됩니다.
(2) 아래 코드를 테스트 용으로 사용해야 합니다.

fun main() {
    val n1 = 9
    val n2 = 17
    println("The LCM of $n1 and $n2 = ${findLCM(n1, n2)}")   
}

 

문제 5 문제 4에서 람다 식 대신 익명 함수를 사용하는 코드로 수정해 보세요.  단, 조건은 문제 4와 같습니다.

문제 6 휴대폰 번호에서 숫자만 추출하는 예제를 교재 p.141에서 소개했습니다. 이 코드를 참고하여 주민등록번호 13자리 중 앞 6 숫자와 뒤 7 숫자를 추출하는 프로그램을 만들어 보세요.  단, 아래 조건을 모두 만족해야 합니다.
(1) String 클래스의 확장 함수를 선언해야 합니다.
(2) 람다 식을 함수 타입의 형식 인자로 전달해야 합니다.
(3) 인터넷 갬색에서 찾은 함수를 사용하면 안됩니다.
(4) 아래 코드를 테스트 용으로 사용하거나 또는 (본인이 작성한 코드에 맞게) 수정할 수 있습니다.

fun main() {
    println("012345-9876543".extractFirst { it.isDigit() })   
    println("012345-9876543".extractLast { it.isDigit() })
}