Kotlin/기타

문제 원인 Kotlin에서 mutableMapOf 함수를 통해 생성되는 MutableMap 객체는 내부적으로 Java의 LinkedHashMap을 사용한다. 이 LinkedHashMap은 내부에서 LinkedHashIterator이란 것을 사용하는데, 이 객체는 원소를 순환할 때 LinkedHashMap이 실제로 조작된 횟수(modCount)와 순환이 시작될 때 확인된 조작된 횟수(expectedModCount)의 값을 비교해 만약 두 값이 일치하지 않으면 ConcurrentModificationException을 발생시킨다. abstract class LinkedHashIterator { ... int expectedModCount; ... final LinkedHashMap.Entry nextNode..
코틀린의 양의 정수 타입 일반적인 다른 언어들과 같이 코틀린에서도 부호 없는 정수(0 보다 크거나 같은 정수)형 데이터 타입을 다루기 위한 다양한 타입들이 코틀린 1.5버전부터 지원되기 시작했다. 글의 제목이 있는 UByte, UShort, UInt, ULong이 그 타입들이다. 변수를 각 타입으로 만드는 방법은 어렵지 않다. 우리가 Float을 선언할 때 접미어로 f를 붙이는 것처럼 접미어로 U를 붙여주면 된다. fun main() { val uByte: UByte = 100U // U를 붙여주어야 한다. val uShort: UShort = 10_000U // U를 붙여주어야 한다. val uInt: UInt = 1_000_000U // U를 붙여주어야 한다. val uLong: ULong = 10..
Kotlin에서 제곱 연산을 하는 방법 Kotlin에서 제곱 연산을 하려면 kotlin.math 패키지의 pow 연산을 쓰면 된다. pow연산은 Double, Float두가지 자료형에 대해 지원된다. Double 자료형 제곱 연산 Double 자료형은 Double이나 Int를 인자로 받아 제곱 연산(pow)을 수행할 수 있으며, 반환 자료형은 모두 Double이다. public actual inline fun Double.pow(x: Double): Double public actual inline fun Double.pow(n: Int): Double 예를 들어 아래와 같이 연산을 진행할 수 있다. println(2.0.pow(3.0)) // 8.0 출력 println(2.0.pow(3)) // 8.0..
Char을 Int로 변환할 때 많은 실수가 생기는 이유 Kotlin은 하나의 자료형을 다른 자료형을 변환할 때 to자료형 확장함수를 제공한다. 예를 들어 String을 Int로 변환할 때는 String.toInt()를 사용하면 된다. 하지만 Char은 기본적으로 UTF-16으로 인코딩 되고 숫자로 변환될 때 해당 코드에 해당하는 숫자로 디코딩된다. 8비트 이하의 값들에 대해서는 ASCII를 따른다. 이 때문에 Char.toInt() 를 사용해 Int를 Char로 변환을 하게 되면 예상치 못한 결과가 나온다. 한 번 '1'을 toInt()를 사용해 변환해 보도록 하자. fun main() { val char = '1' println(char.toInt()) // 49출력 } 위와 같이 '1'.toInt()..
변수 타입간 변환의 중요성 하나의 변수 타입을 다른 변수 타입으로 제대로 변환하는 것은 프로그램을 만들면서 헷갈리는 방법 중 하나이다. 이번 글에서는나중에 헷갈릴 때 쉽게 찾을 수 있도록 다양한 변환 방법에 대해 정리해보려고 한다. 아래에서 다루는 변환 방법 중 하나만 알아도 변환이 가능하지만, 다양하게 변환 방법을 알아두지 않으면 막상 코드를 짤 때 헷갈릴 수 있으므로, 모두 알아두도록 하자. Int를 String으로 변환하기 Kotlin에서 Int를 String으로 변환하기 위해서는 세가지 방법이 존재한다. 각각에 대해 알아보자. 확장함수 Int.toString()을 사용하는 방법 템플릿 리터럴을 사용하는 방법 확장함수 Int.toString()을 사용하는 방법 Kotlin은 Primitive Typ..
Dev.Cho
'Kotlin/기타' 카테고리의 글 목록