변수 선언
초기화 시 type을 명시해야 함. 단, 컴파일러가 추론할 수 있는 경우엔 생략 가능
val (value 의 약어)
불변타입(immutable type) 변수 (Java 의 final)
값을 변경하게 되면 컴파일 에러 발생
fun main(args: Array<String>){
val name = "Kotlin"
// 위에서 이미 값이 할당 되었기 때문에 아래 코드처럼 값 할당 불가
name = "Java"
// 타입 지정 가능, 다만 1번처럼 컴파일러에서 타입이 추론 가능한 경우 생략 가능
val name2: String = "Swift"
// 초기화시 값을 할당하지 않을시엔 반드시 타입을 지정해야함
val name2: String
name2 = "Swift"
// 코드 문맥에 따라 val 변수가 1번만 초기화 되는것이 맞다면 여러 값을 초기화(할당) 가능
val name3: String
if (isSuccess()){
name3 = "Anroid"
}else{
name3 = "iOS"
}
println("name3 : $name3")
// 변수의 참조가 가리키는 객체의 내부 값은 변경이 가능
val nameArray = arrayListOf("Kotlin")
nameArray.add("Java")
println("nameArray : $nameArray")
}
var
초기화 후 값 변경이 가능
단, 다른 타입의 값은 넣을 수 없음
fun main(args: Array<String>){
// 초기화 후 값 변경 가능
var name1 = "kotlin"
name1 = "java"
println("name1 : $name1") //출력 : java
// 초기화 시 타입을 지정 했다면 다른 타입의 값을 넣는 것은 불가능
var name2 = "kotlin"
name2 = 77 //Type mismatch 에러 발생
}
배열
선언
var numbers = IntArray(10)
var name = CharArray(10)
// String은 기본타입이 아니기때문에 StringArray는 없으므로
// 생성자( Array(size, lamda) )를 통해 선언
var stringArray1 = Array(10, {i -> ""})
var stringArray2 = arrayOf("a", "b", "c")
var stringArray3 = arrayOf<String>("a", "b", "c")
// null 배열 선언. 자료형 타입이나 사이즈가 빠지면 오류가 발생함
var stringArray4 = arrayOfNulls<String>(3);
// 비어있는 배열 선언. 괄호안에 숫자가 들어가면 오류
var stringArray5 = emptyArray<String>()
val intArray1 = emptyArray<Int>()
사용
// 쓰기
stringArray[0] = "5" // 배열명[인덱스] = 값
stringArray.set(0, "5") // 배열명.set(인덱스, 값)
// 읽기
var str = stringArray[0]
var str = stringArray.get(0)
컬렉션
배열과 달리 동적인 크기를 가지는 자료형
List, Map, Set 등
동적으로 사용하기 위해서는 자료형앞에 Mutable 이라는 접두어를 붙여야함
// List
var mutableList = mutableListOf("A", "B")
mutableList.add(1, "C") // 인덱스 1에 C 추가
mutableList.add("C") // 맨 뒤에 C 추가
var alph = mutableList.get(0)
mutableList.set(1, "D")
mutableList.removeAt(1)
var emptyList = mutableListOf<String>()
var listSize = mutableList.size // 함수가 아닌 변수
// Set
var mutableSet = mutableSetOf("A", "B")
mutableSet.add("C")
// mutableSet.get(0) Set은 인덱스로 조회하는 함수가 없음
mutableSet.remove("A")
// Map
var mutableMap = mutableMapOf("height" to 150, "weight" to 50, "age" to 10)
var mutableMap = mutableMapOf<String, Any>("name" to "test", age to 15, "isCriminal" to true)
mutableMap.put("phone", "01012341234")
var name = mutableMap.get("name")
mutableMap.remove("name")
반복문
for
// i < 10
for (i in 0 until 10) {
}
// i <= 10
for (i in 0..10) {
}
// i < 10; i += 2
for (i in 0..10 step(2)) {
}
// i >= 0; i--
for (i in 10 downTo 0) {
}
// i >= 0; i -= 2
for (i in 10 downTo step(2)) {
}
forEach
val array = intArrayOf(1, 2, 3, 4)
for (data in array) {
}
while
var a: Int = 1
while (a <= 10) {
print("${a++} ")
}