GDSC HUFS 4기/Kotlin Team #3

[3팀] Android-12-Kotlin: QUIZ

eeunbii 2022. 10. 2. 22:26

이 글은 이것이 안드로이드다 with 코틀린(개정판)를 참고하여 작성하였습니다.

작성자 : 김은비

개발환경은 Windows, Android Studio입니다. 

섹션3 : 코틀린 기초 QUIZ

1. 퀴즈 1

    1. 다음 데이터 유형 중 숫자로 사용할 수 있는 것은? 
      1. String, Int, Double
      2. Double, Int, Boolean
      3. Double, Int, Float
        • String : 문자열
          Boolean : 참(true)과 거짓(false)
          Int : 정수형 (4Byte)
          Float : 실수형 (4Byte)
          Double : 실수형 (8Byte)
          Short, Long,  Byte 등

    2. 이 변수는 어떤 데이터 유형인가요?
      val pi = 3.14159
      1. Int
      2. Float
      3. Double
        •  
          형식 자료형 크기 값의 범위
          실수형 Double 8bytes
          (64bits)
          1.79E-308 ~ 1.79E+308
          Float 4bytes
          (32bits)
          3.4E-38 ~ 3.4E+38
      4. Long
    3. 코틀린에서 텍스트 변수를 생성하는 방법은?
      1. var text = Hello World
      2. var text = “Hello World”
        • var 변수명 = “원하는문구”
          -> 문자 하나만 표현할 때는 ‘ ‘ 사용 (ex, ‘a’)
          하지만 특수문자를 포함한 문자열을 한 번에 표현할 때는 “ “ 사용

      3. var text = ‘Hello World’
    4. 코틀린에서 텍스트 변수를 생성하는 방법은?
      val age = 30
      age = 31
      1. there is nothing wrong with the code.
      2. val indicates that is a immutable, which means it cannot change its value after initialization.
        • val = 불변
          -> 초기화 후 값을 변경할 수 없음

          따라서 값을 변경하고 싶으면
          초기화 시, var을 사용해야함
    5. 데이터 유형이 중요한 이유는 무엇입니까?
      1. 사용하는 데이터 유형에 따라 변수에는 서로 다른 양의 “space/storage”가 필요하기 때문입니다.
      2. 변수가 특정 데이터 유형이면(최소한 다른 작업 없이는) 다른 유형의 데이터를 할당할 수 없기 때문입니다.
      3. 위 두 보기가 모두 정답입니다.
        • 코틀린에서 모든 타입은 객체 !
          -> 각각의 데이터는 자신만의 특성이 있음
          -> 특성에 맞춰 그 데이터의 크기에 맞는 작업 공간(메모리 공간)을 준비해야 함
    6. 밑의 예제에서 “name” 변수의 값은 무엇인가요?
      val name : String = “denis”
      name = “Panjuta”
      1. Denis
      2. Panjuta
      3. 컴파일 에러
        • 안드로이드 개발환경에서는 “val” 덮어쓰기를 지원하지 않아 컴파일타임 에러가 발생
      4. 런타임 에러

2. 퀴즈 2

  1. 이 코드는 무엇을 출력하나요?

    fun main() {
        var age = 25
        if (age > 17){
            println("you may vote")
        }else if(age > 20){
            println("you may drink")
        }else{
            println("don't drink and vote ;)")
        }
    }
    1. you may vote
      • 첫 번째 조건이 충족되면 코드가 전체 블록에서 빠져나오기 때문에 오직 “you may vote”만 출력되고, else if(age > 20)는 작동하지 않습니다
    2. you may drink
    3. you may vote 
      you may drink
    4. don’t drink and vote ;)
  2. x의 값은 무엇인가요?

    val value = 1;
    var x = "aah"
     
    if(value > 5) {
        if(value <2) {
            x = "oh"
        }
    1. “oh”
    2. “aah”
      • value 값이 if문 조건에 충족하지 않았기 때문에 변하지 않음
  3. 이 “when 식”에서 빠진 것은 무엇인가요?

    fun main() {
        var age = 25
        when (age){
            in 21..100 -> println("Swiftey")
            in 15..20 -> println("just do it")
        }
    1. 아무것도 빠지지 않았습니다
    2. 0과 15 사이의 나이
    3. 100 이상의 나이
    4. “else” 로 얻어낸 디폴트 값
      • when에서 else는 switch문에서 default: 와 동일한 역할을 하기 때문에 else 필요
  4. 다음 중 코드 블록이 올바르지 않은 경우에 사용하는 코드는 무엇입니까?
    1. in 21..100 -> println(“swifty swiftkey”)
    2. else -> perintln(“poodle doodle”)
    3. in 13,14 -> println(“the teen of ages have begunnnn”)
      • in start .. end -> ~~~
    4. 13,14 -> println(“the teen of ages have begunnnn”)

3. 퀴즈 3

  1. 이 루프는 무엇을 출력합니까?

    for(i in 1 until 10 step 2) {
        print("$i ")
    }
    1. 13579
    2. 1 3 5 7 9
      • 1부터 시작 (10까지)
        -> 2씩 증가
        -> “&i  “ 출력
    3. 246810
    4. 2 4 6 8
  2. 이 루프는 무엇을 출력합니까?

    var x = 1
    while(x <= 10) {
        print("$x")
        if (x == 4){
            x = 10
        }
        x++
    }
    1. 1 2 3 4 5 6 7 8 9 10
    2. 12345678910
    3. 1234
      • 1부터 시작 (10까지)
        -> “&x“ 출력
        -> x == 4 이면 x = 10
        -> 1씩 증가 
  3. 이 루프의 문제점은 무엇입니까?

    var z = 12
    do {
        print("$z ")
    } while(z <= 10)
    1. z는 절대 10보다 낮지 않음으로 루프가 작동되지 않습니다
    2. z는  반복 가능한 수의 잘못된 명칭입니다
    3. 조건이 맞지 않을 때의 환경설정을 하지 않아 루프는 절대 멈추지 않습니다
      • z = 12
        -> but, z 가 10보다 작거나 같을 때 까지 반복
        -> z의 값은 변경되지 않으므로 무한 루프
  4. 아래 코드에서 printIn 식은 몇 번 수행됩니까?

    for (x in 0..9) {
       for (y in 0..9) {
           println("Result = ${x * y}")
       }
    }
    1. 100
      • 0 ~ 9 까지 10번 반복 * 2
        -> 10 X 10 = 100
    2. 81
    3. 45
    4. 9
  5. 아래의 예제에서 x의 값은 무엇입니까?

    var x = 0
    for (y in 0..9) {
       x += y
    }
     
    println("$x")
    1. 0
    2. 45
      • 0 ~ 9 까지 모두 더함
        0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
        = 45 
    3. 36
    4. 54

 

4. 퀴즈 4

  1. 이 함수에 “Denis”와 “30”의 인수를 사용하면 무엇이 출력되나요?

    fun sayHello(name: String, age: Int){
        println("Hi $name, I heard you are $age years old, is that right?")
    }
    1. Hi $name, I heard you are $age years old, is that right? 
    2. Hi name, I heard you are age years old, is that right? 
    3. Hi Denis, I heard you are 30 years old, is that right? 
      • $ {변수} : 코틀린에서 특정 변수값을 삽입할때 사용
        문자열에서 $ {변수} 를 삽입해서 특정 형식으로 데이터를 포맷해서 출력할 수 있음
  2. 이 코드는 :

    fun main() {
        var moduloVar = moduloFun(5,3)
    }
     
    fun moduloFun(num1: Int, num2: Int): Int{
        return num1%num2
    }
    1. 2를 출력할 것입니다
    2. 2로 moduloVar을 초기화 합니다
      • moduloFun함수를 호출하여 return 값을 moduloVar 변수에 저장하기 때문
    3. “num1%num2”를 출력할 것입니다
  3. 이 코드는 무엇을 출력합니까?

    fun main() {
        var isConnected = connect(5)
        print(isConnected)
    }
    fun connect(num1: Int): Boolean{
        var result = false
        if(num1 > 0){
            result = true
        }
        return result
    }
    1. true
      • connect함수를 호출하여 5를 전달하는데, 이 인자는 if문에 충족하기 때문에 return 값을으로 true를 반환하여 isConnected 변수에 저장하기 때문
    2. false
    3. result
  4. 왜 널러블들이 코틀린에 도입되었습니까?
    1. null인 코드는 무시될 수 있기 때문입니다
    2. null은 0이고 언제나 필요하지 않기 때문입니다
    3. NullPointExceptions를 방지하거나 최소화하여 코드를 쓸 수 있기 때문입니다
      • 널러블을 통해 런타임 시 발생할 수 있는 NullPointerExeption을 런타임이 아닌 컴파일 시점에서 방지 가능

  5. 이 코틀린 코드의 문제점은 무엇입니까?

    val name: String = null
    1. 문제가 없습니다
    2. “name”값이 “null”값에 대응하려면 널러블이어야하기 때문에, 컴파일되지 않을 것입니다
      • 널러블 타입을 사용하고 싶으면, 모든 타입 이름 끝에 ? 를 
        붙이면 됨
        ex)  val a : int? = n
    3. 코틀린에서는 null 값을 변수에 대응시킬 수 없기 때문입니다.