• 변수 선언

    초기화 시 type을 명시해야 함. 단, 컴파일러가 추론할 수 있는 경우엔 생략 가능

    • val, var의 차이
      • 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++} ")
      }