amid.jungs

Kotlin Interview 정리 본문

Kotlin 문법

Kotlin Interview 정리

amid.jungs 2022. 6. 7. 15:03

 

 

Q1 . val 과 var의 차이점은 무엇인지?

var 은 일반 변수와 같으며 여러 번 할당 할 수 있으며 kotlin에서 가변 변수로 알려져 있음

val은 한번만 초기화 할 수 있는 상수 변수로 kotlin에서는 불변 변수로 알려져 있음

 

 

Q2 . val 과 const val 의 차이점은 무엇인지?

const와 val은 둘 다 불변성을 나타내고 값을 읽기만 하며 java에서 최종 키워드로 작동

val 키워드는 런타임 값을 선언하는데 사용하며 ,

const 키워드는 컴파일 값을 선언하는데 사용합니다

 

 

Q3 . MutableLiveData에서 setValue()와 PostValue()의 차이점은 무엇인지?

setValue() 메서드는 메인 스레드에서 호출

postValue() 메서드는 백그라운드에서 값을 설정해야 하는 경우 사용합니다.

 

 

Q4 .lateinit 속성이 초기화되었는지 확인하는 방법은 무엇인지?

isInitialized()메서드를 사용하여 사용하기 전에 lateinit 변수가 초기화되었는지 여부를 확일 할 수 있음

lateinit 속성이 초기화 되면 true 반환 , 그렇지않다면 false 반환 

this::variableName.isInitialized

 

Q5. kotlin에서 lateinit 및 lazy 키워드를 언제 사용하는지?

lateinit은 변경 가능, lazy는 불변

lateinit 사용

private lateinit var display : DisplayAdapter

 

lazy 사용 : 처음 필요할 때만 변수를 초기화 

private val githubApiService : GithubApiService by lazy {
    RetrofitClient.getGithubApiService()
}

+ Lazy : 객체 초기화가 매우 무겁고 시간이 오래 걸리기 때문에 전체 클래스 생성 프로세스가 지연되는 특정 클래스가 있음

 

 

Q6. Companion Object 객체와 객체의 차이점?

Companion Object는 클래스가 로드될 때 초기화 

Object는 느리게 초기화 됨 - 처음 엑세스 시 

 

 

Q7. Nullable type(?.) 과 Non-Null type(!!.)의 차이점?

Nullable type(?.)은 사용하는 변수 참조가 null인 경우에도 앱이 충돌하지 않도록 하려는 경우 사용

var  변수 : 문자열? = null
변수?.replace("x", "z")

변수를 초기화 하지 않았지만 안전 호출 연산자를 사용하여 NullPointerException이 발생하지 않음

Non-Null type(!!.)은 참조에서 메소드를 호출하면 KotlinNullPointerException 발생

변수!!.replace("x","z")

 

 

Q8. kotlin의 데이터 클래스는 무엇인지?

data class Person(val name: String) {
    var age: Int = 0
}

toString(), hashCode(),equals(),copy() 메소드를 자동으로 만들어주는 클래스

두 개의 Person 객체는 다른 age를 가질 수 있지만 위 코드에서는 동일한 것으로 처리됨 

 

 

Q9. kotlin 클래스가 기본적으로 final인 이유?

클래스가 기본적으로 open이고  final로 표시하는 것을 잊어버린 경우 문제가 생길 수 있음

하지만 open로 하는 것을 잊고 확장하려 하면 알림을 받음 (문제 없음)

 

 

Q10. == 연산자와 === 연산자의 차이?

== : 변수의 값을 비교하는데 사용

=== : 변수의 참조가 동일한지 여부를 확인하는데 사용

기본 유형일 경우 === 연산자는 참조가 아닌 값도 확인하며

기본 데이터 유형의 경우 둘 다 결과가 동일함

val number = Integer(1)
val anotherNumber = Integer(1)
number == anotherNumber // true (structural equality)
number === anotherNumber // false (referential equality)

 

 

Q11. kotlin의 접근제한자

  • protected : 해당 특정 클래스 또는 파일 내부 및 선언된 특정 클래스의 하위 클래스에서도 볼 수 있음
  • private : 선언을 포함하는 특정 클래스 또는 파일 내부에서 볼 수 있음
  • internal : 특정 모듈의 모든 곳에서 볼 수 있음 
  • public : 모두 볼 수 있음

kotlin 의 가시성 수정자는 public

 

 

Q12. kotlin의 Extension Function ?

클래스를 상속하지 않고 클래스에 메소드를 추가하는 옵션을 제공

생성된 확장 함수는 클래스 내에서 일반 함수로 사용됨

fun View.hideView() {
    this.visibility = View.GONE 
}

모든 곳에서 동일한 메소드를 호출 할 수 있음 ex.textView.hideVIew()

 

Q13. 인라인 함수란 ?

해당 함수가 코드에서 사용된 모든 위치에 함수의 전체 본문을 삽입하도록 컴파일러에 지시

인라인 함수를 사용하려면 함수 선언의 시작 부분에 인라인 키워드를 추가하면 됨

 

 

Q14. kotlin의  scope function?

개체 컨텍스트 내에서 코드블록을 실행하는 함수

apply ,also 는 컨텍스트 객체를 반환 , 다음 객체에 대한 함수 호출을 연결하는 데 사용 가능 , return 사용가능

let ,run ,with 는 람다 결과를 반환

 

 

Q15. kotlin의  sealed classes ?

enum class와 유사함

enum class : 열거형 유형의 값 집합이 제한되지만 각 열거형 상수는 단일 인스턴스로만 존재하는 반면

selaled class의 하위 클래스는 각각 고유한 상태를 가진 여러 인스턴스를 가질 수 있음

sealed class나 interface를 상속하려면 앞에 sealed를 붙임

sealed interface Error

sealed class IOError(): Error

class FileReadError(val f: File): IOError()
class DatabaseError(val source: DataSource): IOError()

object RuntimeError : Error

그 자체로 추상적이며 직접 인스턴스 불가 , abstract 멤버를 가질 수 있음 

 

 

Q16. kotlin에서 @Jvmstatic , @JvmOverloasds , @ JvmFiled 주석의 중요성?

@Jvmstatic : 메소드가 정적 메소드이며 , java 코드에서 사용할 수 있음을 컴파일러에 알리는데 사용

@JvmOverloasds : java 코드에서 kotlin 코드의 인수로 전달된 기본값을 사용

@JvmFiled : getter & setter를 사용하지 않고 java 코드에서 kotlin 클래스의 필드에 액세스함

 

 

Q17. 중위함수란 ?

대괄호나 괄호를 사용하지 않고 함수를 호출하는데 사용

infix 함수를 사용하려면  infix 키워드를 사용해야 함

infix fun Int.add(b : Int) : Int = this + b

val y = 10 add 20 // infix function call

 

 

Q18. koltin에서 싱글톤은 만드는 방법?

object 키워드를 사용

아래 자바 코드와 동일함

public final class ASingleton {
   public static final ASingleton INSTANCE;

   private ASingleton() {
      INSTANCE = (ASingleton)this;
   }

   static {
      new ASingleton();
   }
}

 

 

Q19. koltin으로 전환할 때 이점?

 기존 switch보다 간력하고 강력함

when은 표현식이나 명령문으로 사용할 수 있음

when(number) {
    1 -> println("A") 
    2 -> println("B") 
    3 -> println("C") 
    in 4..7 -> println("Number between 4 to 7") 
    !in 8..10 -> println("Number is not in range of 8 to 10") 
    else -> println("Out of Range") // default case
}

 

Q20. koltin에서 기본 및 보조 생성자?

기본 생성자 : 클래스 헤더에서 초기화 되고 생성자 키워드를 사용하여 클래스 이름 뒤에 옴 , 매개변수는 선택 사항

                     코드를 포함할 수 없으며 init 초기화 키워드를 사용

class employee(emp_id : Int , emp_name: String) {
    val id: Int
    var name: String

  // initializer block
  init {
    id = emp_id
    name = emp_name
    println("Employee id is: $id")
    println("Employee name: $name")
  }
}

 

보조 생성자 : kotlin에서는 하나 이상의 보조 생성자가 있을 수 있음, 변수 초기화를 허용하고 클래스에 일부 논리를 제공

                    constructor 키워드 사용

class Add {
   constructor(a: Int, b: Int) {
        var c = a + b
        println("Sum of 5, 6 = ${c}")
   }
   constructor(a: Int, b: Int, c: Int) {
        var d = a + b + c
        println("Sum of 5, 6, 7 = ${d}")
   }
   constructor(a: Int, b: Int, c: Int, d: Int) { 
        var e = a + b + c + d
        println("Sum of 5, 6, 7, 8 = ${e}")
   }
}

 

 

Q20. 고차함수란?

함수를 매개변수로 사용하거나 함수를 반환하는 함수

// lambda expression which takes two int as arguments and returns a single int as sum of both
var sum = {a: Int , b: Int -> a + b }


fun higherOrderfun( summation: (Int, Int) -> Int) {      // accepting lambda as argument
    // do some operation here
    // call function received in arguments. Note that "summation" is name of argument.
    var result = summation(2,4)    // invokes the lambda expression from arguments                 
    println("The sum of two numbers is: $result")
    
    // do some more stuff here
}
 
fun main(args: Array<String>) {
    higherOrderfun(sum)           //passing function/lambda as argument
}

 

 

참조 및 원본

https://kapilvij.medium.com/kotlin-interview-cheat-sheet-c62e7850ba73

 

Kotlin Interview Cheat Sheet

Two Months ago when i started appearing in interviews I used to get blank in some of tricky questions in Kotlin even when i spend some time…

kapilvij.medium.com

 

 :: 우연히 kotlin 인터뷰 글을 보고 기초를 다지려는 사람들은 참고하면 좋을 거 같아서 가져오게 되었다

하지만 번역도 서툴고 어색하기 때문에 참고만 하고 질문들을 기준으로 상세하게 공부를 하면 좋을거 같다. ::

'Kotlin 문법' 카테고리의 다른 글

🧐 코틀린 기본 11  (0) 2021.02.21
🧐 코틀린 기본 09  (0) 2021.02.21
🧐 코틀린 기본 08  (0) 2021.02.21
🧐 코틀린 기본 07  (0) 2021.02.19
🧐 코틀린 기본 06  (0) 2021.02.19
Comments