-
3강. 코틀린에서 Type을 다루는 방법BackEnd/Kotlin 2024. 1. 30. 22:00반응형
- 기본 타입
- 타입 캐스팅
- Kotlin의 3가지 특이한 타입
- String Interpolation, String indexing
기본 타입
Kotlin에도 Java와 동일하게 다음과 같은 타입들이 존재합니다.
- Byte, Short, Int, Long Float, Double, 부호 없는 정수들
Kotlin에서는 선언된 기본값을 보고 타입을 추론합니다.
val number1 = 3 // Int val number2 = 3L // Long val number3 = 3.0f // Float val number4 = 3.0 // Double
기본 타입간 변환은 Java와 Kotlin이 상이합니다.
- Java: 암시적
- Kotlin: 명시적
// Java int number1 = 4; long number2 = number1; // 암시적 형변환 // Kotlin val number1 = 4; // val number2: Long = number1 // Type mismatch val number2: Long = number1.toLong() // 명시적 형변환(to기본타입)
변수가 nullable이라면 적절한 처리가 필요합니다. (Safe Call과 Elvis 연산자)
val number1: Int? = 3 val number2: Long = number1?.toLong() ?: 0L
타입 캐스팅
기본 타입이 아닌 일반 타입에 대한 타입 캐스팅입니다.
- value is Type: value가 Type이면 true, 아니면 false
- value !is Type: value가 Type이면 false, 아니면 true
- value as Type: value가 Type이면 Type으로 타입 캐스팅, 아니면 예외 발생
- value as? type: value가 Type이면 Type으로 타입 캐스팅, value가 null이거나 Type이 아니면 null
다음은 Java 코드입니다.
public static void printAgeIfPerson(Object obj) { if (obj instanceof Person) { Person person = (Person) obj; System.out.println(person.getAge()); } }
위의 코드를 Kotlin으로 작성하면 다음과 같습니다.
fun printAgeIfPerson(obj: Any) { if (obj is Person) { // is: Java의 instanceof val person = obj // as Person(생략가능): Java의 (Person) obj println(person.age) } } // 스마트 캐스트 fun printAgeIfPerson(obj: Any) { if (obj is Person) { println(obj.age) // 스마트 캐스트: if 절에서 타입 체크를 수행하여 컴파일러가 해당 타입으로 인지 } }
nullable일 경우, 다음과 같이 처리합니다.
fun printAgeIfPersonNullable(obj: Any?) { val person = obj as? Person println(person?.age) }
Kotlin의 특이한 타입 3가지
Any
- Java의 Object 역할(모든 객체의 최상위 타입)
- 모든 Primitive Type의 최상위 타입도 Any
- nullable일 경우, Any?로 표현
- Any에 equals / hashCode / toString 존재
Unit
- Java의 void와 동일한 역할
- void와 다르게 Unit은 그 자체로 타입 인자로 사용 가능
- Unit은 실제 존재하는 타입이라는 것을 표현(함수형 프로그래밍에서 Unit은 단 하나의 인스턴스만 갖는 타입을 의미)
Nothing
- 함수가 정상적으로 끝나지 않았다는 사실을 표현하는 역할
- 무조건 예외를 반환하는 함수, 무한 루프 함수 등
fun fail(message: String): Nothing { throw IllegalArgumentException(message) }
String interpolation / String indexing
Java에서는 String.format 또는 StringBuilder의 append를 통해 문자열을 동적으로 가공합니다. Kotlin에서는 ${변수} 를 사용합니다.
val person = Person("Kotlin", 100) // Java: System.out.println(String.format("이름: %s", person.name)) println("이름: ${person.name}")
변수 이름만 사용하는 경우, 중괄호를 생략할 수 있습니다. 그러나, 1) 가독성, 2) 일괄 변환, 3) 정규식 활용 측면을 고려하여 ${변수} 사용을 권장합니다.
Text Blocks
여러 문자열을 작성해야 할 경우, 큰따옴표 세 개(""")를 사용하면 됩니다. (Java 15 Text Blocks)
var str = """ ABC EFG """.trimIndent() println(str)
특정 문자 가져오기
// Java String str = "ABCDE"; char ch = str.charAt(1); // Kotlin val str = "ABCDE" val ch = str[1]
감사합니다.
반응형'BackEnd > Kotlin' 카테고리의 다른 글
5강. 코틀린에서 조건문을 다루는 방법 (1) 2024.02.04 4강. 코틀린에서 연산자를 다루는 방법 (0) 2024.01.31 2강. 코틀린에서 null을 다루는 방법 (0) 2024.01.27 1강. 코틀린에서 변수를 다루는 방법 (0) 2024.01.27 0강. 코틀린에 관한 34가지 TMI (feat. Java와의 비교) (1) 2024.01.27