| 프로그래밍 분야/Kotlin
-
💡 [Kotlin] Double형 변수 소수점 자릿수 설정, 반올림, 올림, 내림| 프로그래밍 분야/Kotlin 2021. 7. 26. 21:15
코틀린에서 Double형 변수를 표현하는 방법은 여러가지가 있습니다. 그 중 가장 강력한 것으로 String.format() 메서드를 먼저 보겠습니다. String.format() fun main() { val dNum:Double = 454.14600 println(String.format("%.0f", dNum/100).toDouble() * 100)// 500.0 println(String.format("%.2f", dNum))// 454.15 println(String.format("%.8f", dNum))// 454.14600000 } 이렇듯 String.format() 메서드를 사용하여 C언어에서 float타입 변수를 format 표현식으로 자유롭게 가공했던 방법을 그대로 사용할 수 있습니다...
-
💡 [Kotlin] 빠른 입출력(I/O) - BufferedReader, BufferedWriter (예제 : BOJ 15552)| 프로그래밍 분야/Kotlin 2021. 7. 25. 20:48
Java에는 Scanner.next()와 System.out.println()의 기본적인 입출력 함수들이 존재합니다. 마찬가지로, Kotlin에는 readLine()과 println()의 기본적인 입출력 함수들이 존재합니다. (물론, Kotlin에서 스캐너와 sysout을 써도 됩니다. 또, kotlin.io.println()은 System.out.println()과 100% 동일한 함수입니다.) 위 함수들은 사용이 간편한 대신, 느린 입출력(slow I/O)에 해당합니다. 왜 느릴까요? 우리는 보통 (Java에서)이렇게 스캐너를 정의하여 사용합니다. Scanner sc = new Scanner(System.in); 여기에서 System.in은 InputStream타입의 정적 필드입니다. 그래서 Scan..
-
💡 [Kotlin] 예제를 통해 보는 기본 문법2 - 함수 표현식, 기본 입출력, split(), map(), if-else, 삼항연산자| 프로그래밍 분야/Kotlin 2021. 7. 23. 23:04
Hello World! 출력하기 (BOJ 2557) fun main() = print("Hello World!") 한 줄짜리 함수는 중괄호{} 를 생략하고 등호= 를 통해 표현할 수 있습니다. 이 때 함수의 리턴 타입(return type)과 우변의 리턴 타입은 같아야 합니다. 함수의 리턴 타입을 명시하지 않을 시, 우변의 리턴 타입이 자동으로 캐스팅됩니다. 예 ) fun func() = 3 다음과 동일) fun func():Int { return 3 } 기본 콘솔 출력 함수에는 print()와 println()이 있으며, 동작은 동일하나 println()은 마지막에 개행(줄바꿈)이 추가됩니다. 알람 시계 설정 (BOJ 2884) fun main() { val input = readLine()!!.spl..
-
💡 [Kotlin/코틀린] let 함수가 뭐죠?| 프로그래밍 분야/Kotlin 2021. 6. 28. 15:19
let 함수의 정의 fun T.let(block: (T) -> R): R let 함수는 타입 T의 확장함수입니다. ※ 타입 T란? 따라서 모든 타입의 객체에 Chain Method(점(.)으로 이어나가는) 방식으로 사용할 수 있습니다. 반환 타입도 참조형 타입 R로 선언되어, 어떤 타입도 반환 타입도 가질 수 있으며, 반환값을 갖지 않을 수도 있습니다. (참조형 타입에 대한 설명은 위 링크에서 확인하실 수 있습니다.) let 함수의 특징 및 용례 let 함수는 람다식으로 중괄호를 채워 이용합니다. let 함수는 스스로의 객체를 인자로 받아 사용합니다. 또한, 중괄호 내부에서 해당 객체를 it 키워드로 호출할 수 있습니다. fun main() { val a:String = "m" // 먼저, let 함수를..
-
💡 [자바/코틀린] 제네릭? 타입 T? 자세히 알려주세요| 프로그래밍 분야/Kotlin 2021. 6. 28. 13:31
제네릭(generic)이란? 제네릭은 generalize, 즉 "일반화하다"에서 나온 개념입니다. 즉, 데이터의 타입을 일반화한다는 것을 의미합니다. 제네릭을 통해 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 타임에 미리 지정하는 방법입니다. 이를 통한 장점은 크게 세 가지로 나뉩니다. 1. 객체의 타입 안정성 증가 2. 반환값에 대한 타입 변환 및 타입 검사 x 3. 모든 객체에 대한 확장성 기존의 방식 JDK 1.5 이전에서는 여러 타입을 사용하는 클래스나 메소드에서 인수나 반환값으로 최상위 객체인 Object 타입을 사용했습니다. 이 때 Object 객체를 다시 원하는 타입으로 변환해야 하며, 오류가 발생할 가능성도 존재합니다. 하지만 JDK 1.5부터 도입된 제네릭은 컴파일 시에 미리 타..
-
💡 [안드로이드/코틀린] lateinit var 초기화(할당) 여부 확인법| 프로그래밍 분야/Kotlin 2021. 6. 28. 09:02
"::변수명.isInitialized"로 확인이 가능합니다. (예시) private lateinit var sample:String fun main() { for (i in 1..2) { if (::sample.isInitialized) { sample = "이미 할당되었다면 이 문구로 재할당됨" } else { sample = "할당된 적이 없다면 이 문구로 할당됨" } println(sample) } } (출력 화면) 더블 콜론(::)은 리플렉션(reflection)을 위해 사용되며, 보통 "클래스명::class"로 사용되고, 액티비티를 넘겨주어 단말에서 사용할 필요가 있을 때에는 "클래스명::class.java"로 사용합니다. 참조 다만 변수 앞에 쓰인 더블 콜론(::)은 변수를 객체로 액세스하여 ..
-
💡 [Kotlin] 예제를 통해 보는 기본 문법 - 변수, 상수(val, const val), 함수| 프로그래밍 분야/Kotlin 2021. 6. 22. 13:44
💡 예제 - Hello World 출력 class Tmp { companion object { const val GREETING:String = "World" } } fun main(){ val greeting:String greeting = "World" // greeting = "Meoru" // Tmp.GREETING = "Meoru" println("Hello " + greeting) println("Hello " + Tmp.GREETING) } [결과] Hello World Hello World 예제를 통해 알 수 있는 점 (vs Java) Java Kotlin main 함수 선언부 class 내부 최상위 레벨 (런타임) 상수 선언 final String greeting; val greeting..