매일 한줄 코딩

#3. 코틀린 기본 타입 본문

develop/kotlin

#3. 코틀린 기본 타입

ShipJH 2022. 6. 6. 23:18
3. 기본 타입 - Basic Types

3. 기본 타입 - Basic Types

목차.


1. 기본타입

코틀린에서 모든 것은 객체임.

모든 것에 멤버 함수나 프로터피를 호출 가능하다는 의미에서...

(자바에서는 프리미티브타입과 레퍼런스타입이 분리됨)

2. 숫자

  • Java의 숫자형과 거의 비슷하게 처리.

코틀린 = Number클래스

Java = primitive Type에 직접 접근 할 수 없음.

3. 리터럴 (Literal)

10진수 : 123 (int, Short)

Long : 123L

Double : 123.5, 123.5e10

Float : 123.5f

2진수 : 0b00001111

8진수 : 지원 안됨.

16진수 : 0X0F

4. Underscores in Numeric literals (since 1.1)

글자를 보기 쉽게하기 위한 표현.

val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9999_0000L

이렇게 언더스코어 ‘_’ 를 붙여도 숫자로 인식한다.

소스상에서 단위를 알아보기 쉽다는 장점이 있다.

5. Representation

  • 코틀린을 Java플랫폼에서 숫자형은 JVM에서 primitive type으로 저장된다.
  • Nullable이나, 제네릭의 경우 박싱된다. 박싱된 경우 idendtity를 유지 하지 않음.
//코틀린을 Java플랫폼에서 숫자형은 JVM에서 primitive type으로 저장된다.
var a: Int = 10000
var b: Int = 10000
println("${a === b}")  
println("${a == b}")
//결과는 모두 true

위의 소스를 Java로 디컴파일하게 되면, Int 형이 int형인 프리미티브 타입으로 변해있는 것을 알 수 있다.

// Nullable이나, 제네릭의 경우 박싱된다. 박싱된 경우 idendtity를 유지 하지 않음.
// b를 Nullable ? 를 추가함.
var a: Int = 10000
var b: Int? = 10000
println("${a === b}") // false
println("${a == b}") // true

위으 소스의 b는 Object 타입인, Intager 로 변경된 것을 볼 수 있다.

때문에 비교할때 false가 나올 수 있다.

6. Explicit Conversions

작은 타입은 큰타입에 대입 할 수 없음

val a: Int = 1
val b: Long = a // 오류
val b: Long = a.toLong() // 명시적으로 변환 하여 주어야 함.
//비교도 오류가 남
println( a == b ) //오류.

수치형 타입들은 모두 변환 함수를 써서 변환해주면 된다.

7. 배열

7-1. 배열 특징

  • 배열은 Array 클래스로 표현됨
  • get, set ([] 연산자 오버로딩됨)
  • size 등 유용한 멤버 함수 포함
var array: Array<String> = arrayOf("one", "two")
println(array.get(0))
println(array[0])
println(array.size)

7-2. 배열 생성

  • Array의 팩토리 함수를 이용
  • arrayOf() 등의 라이브러리 함수 이용
val a = Array(5, { i -> i.toString() }) // Array 팩토리함수 사용
val b = arrayOf("one","two","three") //arrayOf 라이브러리함수 사용

7-3. 특별한 Array 클래스 (Primitive 오버헤드 없애는 배열)

  • Primitive 타입의 박싱 오버헤드를 없애기 위한 배열
  • IntArray, ShortArray ... 등
  • Array를 상속한 클래스는 아니지만, Array와 같은 메소드와 프로퍼티를 가진다.
  • size 등 유용한 멤버 함수 포함
val a: IntArray = intArrayOf(1,2,3)
a[0] = 999
println(a.get(0))
println(a[0])
println(a.size)

Null이 필요없는 숫자같은 경우에는 Primitive 타입의 배열을 사용한다.

8. 문자열

  • 문자열은 String 클래스로 표현
  • String은 characters로 구성됨
  • s[i]와 같은 방식으로 접근 가능 (immutable이므로 변경 불가)
var s: String = "one"

println(s.get(0))
println(s[0])
println(s.length)

for (c in s) {
	println(c)
}

자바랑 아주 비슷

9. 문자열 리터럴

  • escaped string

    자바와 비슷하다.

    백슬러쉬(\n)등으로 escaping처리한다

    val s = "Hello, \n world"

  • raw string

    escaping 처리 하지 않고 따움표를 붙인다. ( 앞뒤로 쌍따움표 3개씩 )

    val s = """
    헬로우,
    월~~~
    드 ^^. !
    """

Comments