프로그래밍/Kotlin

[코틀린 / Kotlin] 배열과 상수(array, const val, val)

pupu91 2022. 10. 19. 16:19
반응형

 

배열

같은 타입의 값을 여러 개 저장하고 관리하기 위해 사용

 

0이라는 초기값으로 3개의 공간이 존재하는 array 생성

    var arr1: Array<Int> = Array<Int>(3){0}
    var arr2 = Array(3){0}

 

 

배열 초기 값을 20으로 하는 3개의 정수를 저장할 수 있는 배열 선언

   var arrInitHundred = Array(3){20}

    println(arrInitHundred[0])
    println(arrInitHundred[1])
    println(arrInitHundred[2])
    
    arrInitHundred[2] = 40 //2번 인덱스 값 변경
    println(arrInitHundred[2])

출력 결과
20
20
20
40

 

 

배열 초기값을 "Hello" 문자열로 하는 2개의 문자열을 저장할 수 있는 배열 선언

    var stringArr = Array(2){"Hello"}
    stringArr[1] = "World"
    println(stringArr[0])
    println(stringArr[1])
출력 결과
Hello
World

 

 

코틀린에서 제공하는 arrayOf 함수

: 자바의 원시(Primitive) 타입의 래퍼 클래스(Integer 등) 객체를 저장할 수 있는 배열을 반환

    var arr = arrayOf(100,200,null)
    println(arr[0])
    println(arr[1])
    println(arr[2])
    
출력 결과
100
200
null

 /* 하지만 자바로 작성 된 메소드에서 원시 타입 배열을 인자값으로 요구할 경우
    * arrayOf 함수로 생성한 배열을 전달할 수 없다. 이를 해결하기 위해 2가지 방법을 사용할 수 있다.*/

   // var intArr = intArrayOf(1, 2, null), 원시 타입이기 떄문에 null값 저장 불가
      var intArr = intArrayOf(1, 2, 3)

      var intWrapperArr = arrayOf(1,2,3)
      var charWrapperArr = arrayOf('a','b','c')

      var intPrimitiveArr = intWrapperArr.toIntArray() //원시타입 배열로 변환
      var charPrimitiveArr = charWrapperArr.toCharArray()

 

 

상수(const val)와 읽기 전용 변수(val)

 

(1) 상수

     : 자바의 static final과 유사

       컴파일 시에 값이 결정 되기 때문에 기본 데이터 타입이나 문자열이 String만 입력할 수 있음

       전역 변수로 메소드나 클래스 밖에서만 선언 가능

 

(2) 읽기 전용 변수         

      : 다양한 데이터 타입이 모두 가능하며 전역변수, 지역변수 모두 사용이 가능함

 

(3) var 와 val의 차이

      var : variable의 약자 (mutable - 변경 가능)

      val : value의 약자 (immutable - 변경 불가능)

              객체에 대한 참조 값을 가진다면 참조 값만 변경 못하는 것이고 객체 내부 값 변경 가능

 

class Student {}

/* 전역 변수로 const val 선언 - 기본 타입만 저장 가능 */
const val PI = 3.1415
//const val student: Student = Student() 불가능

/* 전역 변수로 val 선언 */
val lecture = "kotlin"
val student: Student = Student()

fun main(args: Array<String>) {
    
    /* 지역 변수로 const val 선언 - 불가능 */
    //const val PI = 3.1415
    
    /* 지역 변수로 val 선언 */
    val lecture = "android"
    // lecture = "java" //읽기 전용 변수는 재할당 불가
    
}

 

반응형