kotlin - 자료형

Updated:

  • 자료형 (Data Type)](https://kotlinlang.org/docs/reference/basic-types.html)

    • 기본형(Primitive Data Type) : 가공되지 않은 순수한 자료형, 프로그래밍 언어에 내장
    • 참조형(Reference Type) : 객체를 생성하고 동적 공간에 데이터를 둔 다음 이것을 참조하는 자료형
      • 자바에서는 int, long, float, double 등 기본형과 String, Date와 같은 참조형을 모두 사용
      • 코틀린은 참조형 자료형을 사용, 성능 최적화에 따라 JVM에 실행하기 위해 코틀린 컴파일러에서 기본형으로 대체
    • var : 가변형, 사용할 변수의 값이 변경 될 때 사용

    • val : 불변형, 사용할 변수의 값이 변경되지 않아야할 때 사용

      val a : Int = 2
      a = 3  //error
          
      var b : Int = 3
      b = 2 //ok
      
    • Numbers(Byte, Short, Int, Long, Double, Float)

      • 숫자 상수를 읽기 쉽도록 하기 위해 밑줄 사용 가능(100000 == 100_000)
      Type bit Size
      Byte 8
      Short 16
      Int 32
      Long 64
      Double 64
      Float 32
      val b : Byte = 0b11101_1100 
      val s : Short = 123
      val i : Int = 20
      val l : Long = 34L
      val d : Double = 1.2
      val f : Float = 124.0F
      
    • Characters

      • Char로 표현, 문자 타입은 숫자로 직접 취급될 수 없음
      • 작은 따옴표를 사용하여 표현(‘1’), 특수문자는 \ 를 사용하여 표현((\t, \b, \n, \r, ', ", \, $) 지원), 다른 문자 인코딩 시 유니코드 시퀀스를 사용해야함 \uFF00
      fun judge(c: Char){
        if(c == 1){ // Error
          ...
        }
      }
      
    • Booleans

      • Boolean 으로 표현 하며, true, false 두가지 값을 가진다

      • 연산자

        || - lazy disjunction

        && - lazy conjunction

        ! - negation

    • Arrays

      • 배열은 Array 클래스로 표현됨, get, set 함수(operator overloading conventions에 따라서 [] 로 바뀜)와 size 속성을 가짐, 또한 몇가지 유용한 멤버함수들도 제공됨
      class Array<T> private constructor(){
        val size : Int
        operator fun get(index : Int): T
        operator fun set(index : Int, value: T): Unit
            
        operator fun iterator(): Iterator<T>
        ...
      }
      
      • 배열 생성시 arrayOf() 에 값들을 파라미터로 넣음, 값이 없는 배열을 생성시 arrayOfNulls() 로 생성
      //Craetes an Array<String> with values["0", "1", "4"]
      val array = Array(3){i->(i*i).toString()}
      array.forEach{println(it)}
      
      • ByteArray ShortArray IntArray 와 같은 primitive type들을 나타내는 특수한 클래스를 가짐
      val x: IntArray = intArrayOf(1, 2, 3)
      x[0] = x[1] + x[2]
      
    • Strings

      • 문자열은 String 타입으로 선언됨
      • 문자열은 immutable 하다 -> 그에 대한 issue
      • 요소들은 Charater로 인덱싱 연산자로 연산 가능 str[i], for 루프로 반복가능
      • + 연사자를 사용하여 연결 가능, 첫번째 요소가 문자열이면 다른 타입의 값도 연결 가능하다.
      for(c in str)
      	println(c)
          
      val s = "abc" + 1
      println(s + "def") // abc1def
      
    • String literals

      • 두가지 타입이 존재 - 이스케이프된 문자열, raw 문자열
      • 이스케이프된 문자열 - 자바 문자열과 유사, \ 을 사용한 관습적인 방법으로 수행
      • raw 문자열 - """ 을 통해 구분되고 이스케이핑을 포함하지 않으며 개행문자와 다른문자 포함가능, 공백 제거를 하려면 trimMargin() 함수를 사용할 수 있음.
      val str = "Hello world!\n" //escaped strings
          
      val text - """
      	for(c in "foo")
      		print(c)
      """ // 그대로 출력됨
      
    • String templates

      • 템플릿 표현을 포함할 수 있음 -> $ 기호로 시작하고 이름이 붙는 구조거나 중괄호 안에 들어갈 수 있고, String literals 내에서도 지원됨, raw 문자열에서는 맨 마지막 예제와 같이 구문을 사용함.
      val i = 10
      println("i = $i") // i = 10
          
      val s = "abc"
      println("$s.length is ${s.length}") // abc.length is 3
          
          
      val price = """
      ${'$'}9.99
      """