정리
- 코틀린의 변수는 초기 값을 보고 타입을 추론하며, 기본 타입들간의 변환은 명시적으로 이루어진다
- 코틀린에서는 is, !is, as, as?를 이용해 타입을 확인하고 캐스팅한다
- 코틀린의 Any는 Java의 Object와 같은 최상위 타입이다
- 코틀린의 Unit은 Java의 void와 동일하다
- 코틀린에 있는 Nothing은 정상적으로 끝나지 않는 함수의 반환을 의미한다
- 문자열을 가공할 때 ${변수}와 """ """ 를 사용하면 깔끔한 코딩이 가능하다
- 문자열에서 문자를 가져올 때는 Java의 배열처럼 []를 사용한다
기본타입
코틀린에서는 선언된 기본 값을 보고 타입을 추론한다
val number1 = 3 // Int
val number2 = 3L // Long
val number3 = 3.0f // Float
val number4 = 3.0 // Double
코틀린에서는 기본 타입간의 변환은 명시적으로 이루어져야 한다(↔ Java는 암시적으로 이루어질 수 있다)
int number1 = 4;
long number2 = number1;
System.out.println(number1 + number2);
Java에서는 위와 같이 선언되더라도, int 타입의 값이 long 타입의 값으로 암시적으로 변경되었다.
코틀린에서는 아래와 같이 지정하게 될 경우 Type mismatch가 발생한다.
val number = 4
val number2: Long = number1 //Type mismatch
따라서 number2는 val number2: Long = number1.toLong() 과 같이, to변환타입()을 사용해야한다.
추가적으로 변수가 nullable이라면 적절한 처리가 필요하다.
val number1: Int? = 3
val number2: Long = number1?.toLong() ?: 0L
타입 캐스팅
public static void printAgeIfPerson(Object obj) {
if(obj instanceof Person) {
Person person = (Person) obj;
System.out.println(pserson.getAge());
}
}
위와 같은 Java 코드를 아래와 같이 변경할 수 잇다
fun printAgeIfPerson(obj: Any){
if(obj is Pserson){
val pserson = obj as Person
println(person.age)
}
}
is = instanceof (반대인 경우는 앞에 느낌표를 붙여 !is 로 표현할 수 있다. 즉 instanceof가 아닌 경우)
as Object = (Object) obj
즉 위와 같이 표현된다.
추가적으로 사실 as Person은 생략하더라도 코틀린에서는 인식을 한다 (스마트 캐스트)
만약 obj에 null이 온다면?
fun main() {
printAgeIfPerson(null)
}
fun printAgeIfPerson(obj: Any?){
val pserson = obj as? Person
println(person?.age)
}
위와 같이 처리할 수 있다.
Kotlin의 3가지 특이한 타입
1) Any
- Java의 Object 역할 (모든 객체의 최상위 타입)
- 모든 Primitive Type의 최상위 타입도 Any
→ Java의 경우에는 Primitive Type이 Object가 최상위 타입이 아니다
→ Kotlin에서는 Primitive Type과 Reference Type 구분 없이 Int, Long 등 대문자로 사용하기 때문에 최상위가 Any
- Any 자체로는 null을 포함할 수 없어 null을 포함하고 싶다면 Any? 로 표현
- Any에 equals / hasCode / toString 존재
2) Unit
- Java의 void와 동일한 역할
- void와 다르게 Unit은 그 자체로 타입 인자로 사용 가능
→ Generic에서 void는 void Generic을 쓰려면 직접 void 클래스가 따로 있는데(=Void) Unit은 그냥 그대로 사용 가능
- 함수형 프로그래밍에서 Unit은 단 하나의 인스턴스만 갖는 타입을 의미
→ 즉, Kotlin의 Unit은 실제 존재하는 타입이라는 것을 표현
3) Nothing
- 함수가 정상적으로 끝나지 않았다는 사실을 표현하는 역할
- 무조건 예외를 반환하는 함수 / 무한 루프 함수 등
fun fail(message: String): Nothing {
throw IllegalArgumentExcetpion(message)
}
String Interpolation, String indexing
- 코틀린에서는 ${변수}를 사용하면 값이 들어간다
val person = Person("연이", 100)
val log = "사람의 이름은 ${person.name}이고 나이는 ${person.age}세 입니다"
💡Tip
변수 이름만 사용하더라도 ${변수}를 사용하는 것이 가독성 / 일괄 변환 / 정규식 활용 측면에서 좋다고 본다
- 코틀린에서는 여러 줄에 걸친 문자열을 사용할 때는 """ 를 이용하면 좀 더 편하게 쓸 수 있다
val name = "연이"
val withoutIndent =
"""
ABE
123
456
${name}
""".trimIndent()
println(withoutIndent)
- 문자열에서 특정 문자 가져오기
val str = "ABC"
val ch = str[1]'지식을 쌓아보자 > Kotlin' 카테고리의 다른 글
| [기초] 코틀린에서 조건문을 다루는 방법 (0) | 2025.12.14 |
|---|---|
| [기초] 코틀린에서 연산자를 다루는 방법 (0) | 2025.12.14 |
| [기초] 코틀린에서 null을 다루는 방법 (0) | 2025.12.10 |
| [기초] 코틀린에서 변수를 다루는 방법 (0) | 2025.12.07 |
| 코틀린 입문 (0) | 2025.12.07 |