Chandroid
Android Development Diary
Chandroid
전체 방문자
오늘
어제
  • 분류 전체보기
    • Today I Learned (TIL)
    • Android
      • Android Weekly
      • Android 13
      • Android Debug Bridge (ADB)
      • Library
      • View
      • Jetpack
      • Gist
    • Kotlin
      • Docs
      • Clean Code
    • Object-Oriented Programming
    • Etc
      • 정보처리기사 실기
      • 주절주절

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • clean code
  • MVVM
  • Database
  • customview
  • Today I Learned
  • Android Debug Bridge
  • Android
  • Data classes
  • DiffUtil
  • Android 13
  • RecyclerView
  • Solid
  • generics
  • ADB
  • Kotlin Docs
  • OOP
  • Extensions
  • Agile Software
  • GIST
  • Sealed classes
  • Glide
  • Realm
  • til
  • kotlin
  • DataBinding

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chandroid

Android Development Diary

[Kotlin Docs] Basic types
Kotlin/Docs

[Kotlin Docs] Basic types

2022. 1. 18. 16:55

본 글은 https://kotlinlang.org/docs/home.html 를 기반으로 작성자 마음대로 번역한 글입니다.
오역 & 의역이 빈번하며 모든 질문 및 태클 환영합니다!
2022-01-18 기준으로 작성되었습니다.

코틀린에서는 어떤 변수에서든지 멤버 함수나 프로퍼티를 호출할 수 있다는 점에서 모든 것이 객체입니다. 어떤 타입은 특별한 내부 표현을 가지고 있습니다. - 예를 들어 숫자, 문자, 부울형은 런타임에 기본 값으로 표현될 수 있지만 사용자에게는 일반적인 클래스로 보입니다. 이 섹션에서는 코틀린에서 사용되는 기본 자료형에 대해 설명합니다: 숫자↗, 부울↗, 문자↗, 문자열↗, 그리고 배열↗.

 


Numbers

- Integer types

코틀린은 숫자를 표현하는 내장 타입들을 가지고 있습니다.

정수에 대해서는 크기와 범위가 다른 네 가지의 타입이 있습니다.

Type Size (bits) Min value Max value
Byte 8 -128  
Short 16 -32768  
Int 32 -2,147,483,648 (-231) 2,147,483,647 (231-1)
Long 64 -9,223,372,036,854,775,808 (-263) 9,223,372,036,854,775,807(263-1)

 

Int의 범위를 초과하지 않는 정수로 초기화된 모든 변수는 Int형으로 추론됩니다. 만약 초기값이 범위를 초과한다면 Long 타입이 됩니다. Long 타입이란 것을 명시적으로 지정하려면 접미사로 L을 추가합니다.

 

 

- Floating-point types

실수에서, 코틀린은 부동소수점 타입인 Float와 Double을 제공합니다. IEEE 754 standard↗를 따라, 부동 소수점 타입은 소수점, 즉 저장할 수 있는 소수점 자릿수에 따라 달라집니다.

Type Size (bits) Significant bits Exponent bits Decimal digits
Float 32 24 8 6-7
Double 64 53 11 15-16

 

Double과 Float 변수는 소수 부분을 가진 수로 초기화할 수 있습니다. 온점( . )으로 정수 부분을 구분합니다. 컴파일러는 소수로 초기화된 변수를 Double 타입으로 추론합니다.

 

 

값이 Float 타입이란 것을 명시적으로 지정하려면 접미사 f 또는 F를 추가합니다. 값에 6-7개를 넘는 십진수를 포함한 경우 반올림됩니다.

 

 

다른 언어들과는 달리 코틀린에는 숫자에 대한 암시적 확장 변환이 존재하지 않습니다. 예를 들어 Double 파라미터를 가지는 함수는 Float나 Int 혹은 다른 숫자 변수가 아닌 Double 값에 의해서만 호출될 수 있습니다.

 

 

숫자 값을 다른 타입으로 변환하기 위해서는 Explicit conversions↗를 사용하세요.

 

- Literal constants

정수에 대하여 다음과 같은 종류의 리터럴 상수가 있습니다.

  • 십진법 : 123
    - Long은 대문자 L : 123L으로 지정됩니다.
  • 십육진법 : 0x0F
  • 이진법 : 0b00001011
8진법은 지원하지 않습니다.

 

코틀린은 부동 소수점 숫자에 대한 일반적인 표기법도 지원합니다.

  • 기본적인 Double : 123.5, 123.5e10 
  • f나 F로 표기된 Float : 123.5f

숫자 상수의 가독성을 높이기 위해 언더스코어를 사용할 수 있습니다.

 

 

- Numbers representation on the JVM

JVM 플랫폼에서, 숫자는 기본 타입으로 저장됩니다: int, double 등. 예외적으로 제네릭이나 Int?와 같은 nullable 숫자 참조를 생성할 때에는 자바 클래스인 Integer, Double 등으로 묶입니다.

 

동일한 수에 대한 nullable 참조는 다른 객체일 수 있습니다.

 

 

JVM의 -128과 127 사이의 Integer에 적용되는 메모리 최적화로 인해 a에 대한 nullable 참조는 모두 같은 객체입니다. b에는 적용되지 않기 때문에 다른 객체입니다.

 

반면에 둘은 여전히 동일합니다.

 

 

- Explicit conversions

다른 표현 방식으로 인해, 작은 타입은 더 큰 타입의 하위 타입이 아닙니다. 만약 그랬다면 다음과 같은 문제가 있을 것입니다.

 

 

동일성(Identity) 뿐만 아니라, 동등함(Equality)도 사라집니다.

 

결과적으로, 더 작은 타입은 더 큰 타입으로 암시적으로 변환될 수 없습니다. Byte 값을 Int 변수에 할당하려면 명시적 형변환을 해야 합니다.

 

 

모든 수 타입은 다른 타입으로의 변환을 지원합니다.

  • toByte(): Byte
  • toShort(): Short
  • toInt(): Int
  • toLong(): Long
  • toFloat(): Float
  • toDouble(): Double
  • toChar(): Char

많은 경우에, 수치 연산과 적절한 변환의 오버로드, 그리고 타입이 context로부터 유추되어 명시적 변환이 필요 없습니다.

 

 

- Operations

코틀린은 기본적인 연산자들을 제공합니다: +, -, *, /, %.
이 연산들은 알맞은 클래스의 멤버들로 선언되어 있습니다.

 

 

또한 커스텀 클래스로 이 연산자들을 오버라이드 할 수 있습니다. Operator overloading↗

 

Division of integers

정수들 사이의 나눗셈은 항상 정수를 반환합니다. 모든 소수 부분은 버려집니다.

 

 

다음은 두 정수 사이의 나누기에 대해서 true입니다.

 

 

부동소수점 타입을 반환하기 위해서, 매개변수 중 하나를 부동소수점 타입으로 명시적 변환해야 합니다.

 

 

Bitwise operations

코틀린은 정수에 대한 비트단위 연산을 지원합니다. 숫자 표현에 비트를 사용하여 바이너리 레벨에서 직접 연산합니다. 비트단위 연산자들은 중위 형식으로 호출할 수 있는 함수로 표현됩니다. Int와 Long에만 적용될 수 있습니다.

 

 

  • shl(bits) - 부호 있는 왼쪽 시프트
  • shr(bits) - 부호 있는 오른쪽 시프트
  • ushr(bits) - 부호 없는
  • and(bits) - 비트 단위 and
  • or(bits) - 비트 단위 or
  • xor(bits) - 비트 단위 xor
  • inv(bits) - 비트 반전

 

- Floating-point numbers comparison

이 섹션에서 설명하는 부동 소수점 숫자의 연산입니다:

  • 동일성 검사 : a == b and a != b
  • 비교 연산자 : a < b, a > b, a <= b, a >= b
  • 범위 인스턴스화 및 검사 : a..b, x in a..b, x !in a..b

피연산자인 a와 b가 정적으로 Float 혹은 Double이거나 이에 해당하는 nullable 타입일 때 (타입이 선언, 유추되거나 smartcast↗의 결과일 때) 숫자와 범위의 연산은 IEEE 754 Standard for Floating-Point Arithmetic↗을 따릅니다.

 

그러나 일반적인 사용과 모든 순서를 지원하기 위해, 피연산자가 정적으로 부동소수점 타입이 아니면 (e.g. Any, Comparable<...>, 타입 파라미터) 연산은 Float와 Double을 위한 equals와 compareTo 구현을 사용합니다. 다음은 표준과 다른 점입니다:

  • NaN은 자신과 동일한 것으로 간주됩니다.
  • NaN은 POSITIVE_INFINITY를 포함하여 다른 요소들보다 큰 것으로 간주됩니다.
  • -0.0은 0.0보다 작은 것으로 간주됩니다. 

 

- Unsigned integers

Integer types↗에 관해, 코틀린은 부호 없는 정수에 대해 다음과 같은 타입을 제공합니다.

  • UByte : 부호 없는 8비트 정수, 0 to 255
  • UShort : 부호 없는 16비트 정수, 0 to 65535
  • UInt : 부호 없는 32비트 정수, 0 to 232 - 1
  • ULong : 부호 없는 64비트 정수, 0 to 264 - 1 

부호 없는 타입은 대응하는 부호 있는 타입의 많은 연산자를 제공합니다.

부호 없는 타입에서 대응하는 부호 있는 타입 (혹은 그 반대)의 타입 변환은 이진 호환되지 않는 변경입니다.

 

 

Unsigned arrays and ranges

부호 없는 배열과 그에 대한 연산은 Beta↗이므로 언제든지 호환되지 않게 변경될 수 있습니다. Opt-in 요구됩니다. (하단의 자세한 사항을 참고하세요)

원시 타입과 마찬가지로, 각각의 부호 없는 타입에는 각 타입의 배열을 표현하는 타입이 존재합니다.

  • UByteArray : 부호 없는 byte의 배열
  • UShortArray : 부호 없는 short의 배열
  • UIntArray : 부호 없는 int의 배열
  • ULongArray : 부호 없는 long의 배열

부호 있는 정수 배열과 동일하게, 박싱 오버헤드 없이 Array 클래스의 유사한 API를 제공합니다.

 

만약 부호 없는 배열을 사용한다면, 아직 안정적이지 않다는 경고를 받을 것입니다.
경고를 제거하기 위해서, @ExperimentalUnsignedTypes 어노테이션의 사용을 선택하세요.
클라이언트가 당신의 API 사용에 명시적으로 동의해야 하는지는 당신의 선택에 달렸습니다, 그러나 부호 없는 배열은 안정적인 기능이 아니며, 그것들을 사용하는 API는 언어의 변경에 따라 사용이 불가능하게 될 수 있다는 것을 명심하십시오. opt-in requirements↗

 

Ranges and progressions↗는 UIntRange, UIntProgression, ULongRange, ULongPregression 클래스로부터 UInt, ULong을 지원합니다. 부호 없는 정수타입과의 사용에 있어서 안정적입니다.

 

Literals

부호 없는 정수의 사용을 더 쉽게 하기 위해, 코틀린은 부호없는 유형을 나타내는 접미사를 사용하여 정수 리터럴에 태그를 지정하는 기능을 제공합니다. (Float나 Long과 같습니다):

  • u와 U는 부호없는 정수를 지칭합니다. 정확한 타입은 예상 타입에 기초하여 결정됩니다. 예상 타입이 제공되지 않는 경우 컴파일러는 리터럴의 크기를 기반으로 UInt나 ULong을 사용할 것입니다.
  • uL과 uL은 부호 없는 long 리터럴을 지칭합니다.

 

Further discussion

기술적인 디테일과 심도한 토의를 위해 language proposal for unsigned types↗를 확인하세요.

 


Booleans

Boolean 타입은 다음 두 개의 값을 가지는 부울형 오브젝트를 표현합니다: true, false

Boolean은 대응하는 nullable 타입인 null 값을 가질 수 있는 Boolean? 타입을 가집니다.

부울형에 대한 내장 연산자는 다음을 포함합니다.

  • || - 논리합 (논리 연산 OR)
  • && - 논리곱 (논리 연산 AND)
  • ! - 부정 (논리 연산 NOT)

||와 &&는 나중에 동작합니다.

 

 

On JVM : 부울형 오브젝트에 대한 nullable 참조는 numbers↗와 비슷하게 박싱 됩니다.

 


Characters

문자들은 Char 타입을 통해 표현됩니다. 문자 리터럴은 작은따옴표 안에 위치합니다: '1'.

 

특수문자들은 이스케이프 백슬래쉬 \로 시작합니다. 다음 이스케이프 시퀀스들이 지원됩니다: \t, \b, \n, \r, \', \'', \\, \$,

 

다른 문자를 인코딩하려면, 유니코드 이스케이프 시퀀스 구문을 사용하세요:'\uFF00'

 

 

문자 변수의 값이 숫자라면, digitToInt()↗함수를 사용하여 명시적으로 Int 숫자로 변환할 수 있습니다.

 

On JVM : numbers↗와 같이 문자는 nullable 참조가 필요하다면 박싱 됩니다. 박싱 연산으로 동일성은 유지되지 않습니다.

 


Strings

코틀린에서의 문자열은 String 타입으로 표현됩니다. 일반적으로, 문자열 값은 큰따옴표(") 안의 일련의 문자들입니다.

 

 

문자열의 요소는 인덱싱 작업을 통해 접근할 수 있는 문자들입니다:s[i]. 또한 for 반복문을 이용해서 문자를 반복 접근할 수 있습니다.

 

 

문자열은 변경될 수 없습니다. 문자열을 초기화하고 나면 값을 바꾸거나 새로운 값을 대입할 수 없습니다. 문자열을 변환하는 모든 연산자들은 기존 문자열은 바뀌지 않은 채로 결과를 새로운 String 오브젝트를 반환합니다.

 

 

문자열을 연결하려면 + 연산자를 사용하십시오. 첫 번째 요소가 문자열이라면 다른 타입의 값을 문자열에 연결하는 데 사용할 수 있습니다.

 

 

문자열 연결보다는 string templates↗이나 원시 문자열을 사용하는 것이 대부분의 상황에서 더 유용합니다.

 

- String literals

코틀린은 문자열 리터럴의 두 가지 타입을 가지고 있습니다.

  • 이스케이프 된 문자를 포함하는 이스케이프 문자열
  • 줄 바꿈 및 임의의 텍스트를 사용할 수 있는 원시 문자열

이스케이프 문자열의 예입니다:

 

 

이스케이프는 백슬래쉬(\)를 사용한 일반적인 방식으로 구사됩니다. 지원하는 이스케이프 시퀀스들을 확인하려면 상단의 Characters↗를 확인하세요.

원시 문자열은 삼중 따옴표(""")로 구분되며, 이스케이프를 포함하지 않고 줄 바꿈 및 다른 문자를 포함할 수 있습니다.

 

 

원시 문자열에서 공백을 제거하려면, trimMargin()↗ 함수를 사용하세요:

 

 

기본적으로, |는 여백 접두사로 사용되지만, 다른 문자를 trimMargin(">")과 같이 파라미터로 사용할 수 있습니다.

 

- String templates

문자열 리터럴은 템플릿 표현식이 포함될 수 있습니다 - 어떤 코드의 결과가 문자열에 연결되는 것. 템플릿 표현식은 달러 기호($)로 시작하며 다음 이름 중 하나로 구성됩니다.

 

 

혹은 중괄호로 묶인 표현식

 

 

템플릿은 원시와 이스케이프 문자열 둘 다 사용할 수 있습니다. identifier↗의 시작인 기호 앞의 백슬래쉬 이스케이프를 지원하지 않는 원시 문자열에서 $문자를 사용하려면 다음 구문을 따라 하세요.

 

 


Arrays

코틀린에서의 배열은 Array 클래스로 표현됩니다. 그리고 연산자 오버로딩 규칙을 이용하여 []로 변환될 수 있는 get, set 함수, size 프로퍼티 등 유용한 멤버 함수를 제공합니다.

 

 

배열을 생성하기 위해 arrayOf() 함수를 사용하고 항목의 값을 전달하세요, arrayOf(1, 2, 3)은 [1, 2, 3] 배열을 생성합니다. 또는 arrayOfNulls()함수는 null 요소로 채워진 주어진 크기의 배열을 생성할 수 있습니다.

또 다른 방법은 배열의 크기와 주어진 인덱스로 배열 요소의 값을 반환하는 함수를 가진 Array 생성자를 사용하는 것입니다.

 

 

위에서 말했듯이, []연산자는 멤버 함수인get(), set()함수를 호출합니다.

코틀린에서의 배열은 변하지 않습니다. 코틀린은 Array<String>을 Array<Any>에 할당하는 것을 허용하지 않아 런타임 오류를 방지합니다.(그러나 Array<out Any>를 사용할 수 있습니다, Type Projections↗)

 

- primitive type arrays

코틀린은 박싱 오버헤드 없이 기본 자료형의 배열을 표현하는 클래스를 가지고 있습니다 : ByteArray, ShortArray, IntArray 등. 이 클래스들은 Array 클래스와의 상속관계를 가지지 않습니다, 그러나 같은 메서드와 프로퍼티를 보유하고 있습니다. 또한 동일한 팩토리 함수를 보유하고 있습니다:

 

 


https://kotlinlang.org/docs/basic-types.html 
 

Basic types | Kotlin

 

kotlinlang.org

 

저작자표시 비영리 (새창열림)

'Kotlin > Docs' 카테고리의 다른 글

[Kotlin Docs] Conditions and loops  (0) 2022.01.19
[Kotlin Docs] Type checks and casts  (0) 2022.01.19
[Kotlin Docs] Coding conventions  (0) 2022.01.17
[Kotlin Docs] Idioms  (0) 2022.01.15
[Kotlin Docs] Basic syntax  (0) 2022.01.14
    Chandroid
    Chandroid

    티스토리툴바