1) var과 val은 무엇이고 어떤 차이가 있을까?
var로 선언하면 값을 다시 바꿀 수 있지만 (변수)
val은 선언하면 값을 다시 바꿀 수 없다. => 그래서 기준이 되는 값을 선언할 때 사용한다. (상수)
ex) 파이 3.14 val pi = 3.14
변수와 상수를 구분하기 위해서 상수는 대문자로 선언한다.
var a : Int? = null
자료형 뒤에 ?을 붙이면 null을 허용하는 nullable 변수로 선언해 줄 수 있다.
값이 null인 상태로 연산할시 오류가 날 수 있으므로 주의해야한다.
lateinit
: lateinit은 코틀린에서 나중에 초기화할 변수를 선언하는데 사용하는 키워드이다. 주로 var과 함께 사용되며, 초기화가 지연되는 것을 나타낸다. 이 키워드는 nullable 타입과는 다르게, 초기화가 이루어지지 않으면 접근할 때 UninitializedPropertyAcessException이 발생한다. 변수를 선언할 때 즉시 초기화할 수 없는 경우에 유용하다. 예를 들어, 객체가 생성된 후, 특정 조건이나 상황에 따라 변수를 초기화해야 할 때 사용한다. 또한, 클래스 멤버 변수를 클래스의 생성장에서 초기화 할 수 없는 경우, 예를 들어, 뷰나 다른 외부 리소스를 초기화해야 할 때 lateinit을 사용하여 나중에 초기화 할 수 있다.
2) 형변환이란 무엇이고 명시적 형변환과 암시적 형변화은 각각 어떤 의미일까?
형변환 : 하나의 변수에 지정된 자료형 호환되는 다른 자료형으로 변경하는 기능
명시적 형변환 : 변환될 자료형을 개발자가 직접 지정함
암시적 형변환 : 변수를 할당할 시 자료형을 지정하지 않아도 자동으로 형변환
코틀린은 형변환시 발생할 수 있는 오류를 막기 위해 암시적 형변환은 지원하지 않는다.
3) 배열의 특징은 무엇이고 어떻게 사용할까?
배열 Array<T>
var intArr = arryOf(1,2,3,4,5)
배열 변수를 만들어주고 arrayOf 함수를 통해 배열에 저장할 값들을 나열하면 된다.
특정한 크기를 갖고 있는 빈 배열을 만들고 싶을때는
var nullArr = arrayOfNulls<Int>(5) 요롷게 선언한다.
꺾쇠안에는 배열에 할당할 자료형을 넣어주면 된다.
이 자료형을 generic이라고 한당.
배열은 처음 선언했을 때의 전체 크기를 변경할 수 없다는 단점이 있지만
한번 선언을 해두면 다른 자료구조보 빠른 입출력이 가능하다는 장점이 있다.
코틀린에서는 읽기 전용 변수(val)과 수정할 수 있는 변수 var 처럼
리스트도 읽기 전용 리스트(list), 수정할 수 없는 리스트(mutable)이 있다.
읽기 전용 리스트는 말그대로 리스트 선언할 때 넣은 데이터들을 수정 삭제 변경할 수 없다는 뜻
따라서 데이터를 읽을 수는 있지만 add, remove함수를 사용 못함
mutableListOf를 사용하면 add, remove 사용이 가능하며
또한 List를 MutableList로 변경, MutableList를 List로 변경할 수 있다.
관련 문제
https://www.acmicpc.net/problem/5597
var arrMutable = mutableListOf<Int>()
arrMutable.add(1)
arrMutable.add(2)
var arrNotMutable = arrMutable.toList() //mutable -> list 변경
println(arrNotMutable)
var arrReMutable = arrNotMutable.toMutableList() list -> mutable 변경
arrReMutable.add(22)
println(arrReMutable)
Extra tip
코틀린 input 받기
readLine()
readLine()!!.split(" ").map {it.toInt()}
'Kotlin' 카테고리의 다른 글
Collection 함수 (2) | 2024.09.18 |
---|---|
코틀린 코테 (0) | 2024.04.28 |
함수 / 타입 추론 / 조건문 / 반복문 (0) | 2024.04.08 |