티스토리 뷰

Programming Language/Kotlin

[Kotlin] 기본 타입

SdardewValley 2022. 7. 22. 13:50
반응형

이 글은 코틀린 공식문서를 정리한 것입니다.

 

Number

정수

  코틀린의 정수는 4가지 타입이 있고, 각 타입마다 다른 범위를 가지고 있다.

 

코틀린의 정수 타입

 

  코틀린은 동적 타이핑을 지원하는데 타입을 지정하지 않은 경우 기본적으로는 Int 타입이 된다. 만약 Int 타입의 범위를 벗어난 경우에는 Long 타입이 된다. Int 타입을 벗어나지는 않지만 Long 타입으로 지정하고 싶은 경우에는 숫자뒤에 문자 'L'을 붙여주면 된다.

 

val one = 1 // Int
val threeBillion = 3000000000 // Long
val oneLong = 1L // Long
val oneByte: Byte = 1

  one과 threeBillion을 보면 범위에 따라 동적 타이핑이 어떻게 되는지 알 수 있다. oneLong을 보면 L문자를 통해서 동적 타이핑시에 Int가 아닌 Long으로 지정하는 방법을 알 수 있고, oneByte를 보면 Byte, Short 타입으로 지정하고 싶은 경우에는 [변수명:타입명]으로 가능한 것을 알 수 있다.

 

💡 변수의 타입을 알고 싶을 때는 변수.javaClass.kotlin.simpleName을 사용하면 된다.

 

 

실수

  코틀린의 실수는 2가지 타입이 있다.

 

코틀린의 실수 타입

  코틀린은 숫자에 점(.)이 있는 경우에는 실수로 타입을 추론한다. 기본적으로 실수의 타입은 Double이 된다. 정수와 마찬가지로 접미사에 f 혹은 F 문자를 추가하여 Float 타입으로 지정할 수 있다. 이 경우 float 타입이 범위를 벗어난다면 반올림이 된다.

 

 

리터럴

  정수의 리터럴은 다음과 같은 종류가 있다.

 

  • 10진수
  • 16진수: 0x로 시작 (ex. 0x0F)
  • 2진수: 0b로 시작 (ex. 0b00001011)
🚨 8진수는 지원하지 않는다

 

  추가적으로 123.5e3와 같은 실수 표현을 지원하고 숫자 사이에 _을 넣어 자릿수를 구분할 수(1_000_000)도 있다.

 

 

명시적 타입 변환

val a: Int? = 1
val b: Long? = a
print(b == a)

  위의 코드는 컴파일 되지 않는다. 범위가 더 작은 타입들은 큰 타입의 하위 타입이 아니기 때문이다. 즉 Int는 Long의 하위타입이 아니기 때문에 둘은 비교 불가능하다.

 

val a: Int? = 1
val b: Int? = a
print(b == a)

  a와 b는 같은 타입이기 때문에 비교가능하다.

 

val a: Int = 1
val b: Long = a.toLong()

  Long 타입 b에 Int 타입 a를 저장하고 싶다면 toLong을 사용하여 a의 타입을 변환하면 된다.

 

  숫자 타입은 다음과 같은 타입 변환을 제공한다.

  • toBytes()
  • toShort()
  • toInt()
  • toLong()
  • toFloat()
  • toDouble()
  • toChar()

 

val a: Int = 1
val b: Long = 2
val sum = a + b

  문맥상 타입이 유추되는 경우에는 명시적 변환이 필요하지 않을 수 있다.

 

연산

  숫자 타입에서는 +, -, *, /, % 연산을 제공한다.

 

val x = 5 / 2.toDouble()
println(x) // 2.5

  자바와 마찬가지고 피연산자 중 하나가 실수인 경우 결과값도 실수이다.

 

비트 연산

  코틀린은 정수에 대한 비트 연산을 제공한다. 비트 연산은 Int 타입과 Long 타입에 대해서만 제공된다.

 

  비트 연산은 다음과 같은 종류가 있다.

  • shl: shift left. 왼쪽으로 비트 이동
  • shr: shift right. 오른쪽으로 비트 이동
  • ushl: unsigned shift left. unsigned 타입의 비트 이동.
  • and
  • or
  • xor
  • inv: 비트 반전

 

Unsigned 자료형

  코틀린은 Unsigned 타입의 자료형도 지원한다. Unsigned 타입으로 다음과 같이 있다.

  • UByte
  • UShort
  • UInt
  • ULong

  숫자 뒤에 u 혹은 U가 붙으면 unsigned으로 동적 타이핑된다.

 

 

 

Boolean

  Boolean 타입은 true 혹은 false 중 하나의 값을 가질 수 있다. Boolean?과 같이 뒤에 ?가 붙어있다면 true, false와 더불어 null 값도 가질 수 있다.

 

val myTrue: Boolean = true
val myFalse: Boolean = false
val boolNull: Boolean? = null

println(myTrue || myFalse)
println(myTrue && myFalse)
println(!myTrue)

  Boolean 연산으로는 3종류가 있다.

  • ||: OR
  • &&: AND
  • !: NOT

  Boolean도 자바와 마찬가지고 지연 실행(lazy evaluation)을 한다.

 

 

Character

val c: Char = 'a'

  문자는 Char로 표현한다.

 

 

String

val str = "My String"

  코틀린에서 문자열은 String으로 표현한다. 문자열은 쌍따옴표안에 있는 연속된 문자들의 값으로 표현한다.

 

val str = "kotlin"

println(str[2]) // t

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

  문자열의 인덱소를 통해서 접근할 수도 있다. 문자열[인덱스]와 같은 방식으로 접근하면 된다. for 루프를 사용해서 개별 문자에도 접근할 수 있다.

 

val s = "abc" + 1
println(s + "def")

  + 연산을 사용해서 문자열을 합치는 것도 가능하다. 

 

val text = """
  for (c in "foo")
      print(c)
"""
print(text)

  세개의 쌍따옴표를 사용해서 + 없이 문자열을 여러 줄로 표현할 수 있다.

 

"""로 문자열 표현

  """을 사용해서 문자열을 표현하면 코드 앞의 들여쓰기도 같이 출력이 되는 문제가 있다. 이런 경우 trimMargin 메서드를 사용하면 된다.

 

val text = """
|for (c in "foo")
|print(c)
""".trimMargin()
println(text)

trimMargin 사용

  줄 앞에 |을 추가하고 trimMargin 메서드를 마지막에 붙여주면 줄 앞에 나오는 공백이 제거된다.

  

val text = """
>for (c in "foo")
>print(c)
""".trimMargin(">")

  |이 아닌 다른 문자를 사용하고 싶을 때는 trimMargin안에 매개변수로 전달하면 된다.

 

문자열 템플릿

val s = "abc"
println("$s.length is ${s.length}") // prints "abc.length is 3"

  코틀린은 문자열 템플릿을 지원한다. 문자열 템플릿은 $로 시작하고 중괄호를 사용할 수도 있다.

 

 

Array

  코틀린에서 배열은 Array 클래스로 표현된다. 대괄호와 인덱스를 통해서 값에 접근 및 변경이 가능하고 get, set을 통해서도 접근, 변경이 가능하다.

  arrayOf 메서드를 사용해서 배열을 생성할 수도 있다. 그리고 ByteArray, IntArray, ShortArray와 같은 원시 타입의 배열 클래스도 존재한다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함