기본 타입
코틀린에서는 선언된 기본 값을 보고 타입을 추론한다.
val num1 = 3 // Int
val num2 = 3L // Long
val num3 = 3.0f // Float
val num4 = 3.0 // Double
자바에서는 기본 타입 간의 변환은 암시적으로 이루어진다. 하지만 코틀린에서 타입 변환은 명시적으로 이루어져야 한다.
자바에서는 더 큰 타입으로 암시적인 변경이 가능했습니다.
int num = 1;
long num2 = num;
코틀린은 to"Type"()으로 명시적으로 변경해야 한다.
var num1 = 3 // Int
var num2 = 3L // Long
var num3 = 3.0f // Float
var num4 = 3.0 // Double
num2 = num1.toLong()
만약 nullable이라면 엘비스 연산자와 safe Call을 사용해서 적절한 처리가 필요하다.
val num1 : Int? = 3;
var num2 : Long = num1?.toLong() ?: 0L
타입 캐스팅
그럼 일반 타입은 어떻게 변환해야 할까?
자바에서는 다음과 같이 진행한다.
if (obj instanceof Person) {
Person person = (Person) obj;
System.out.println(person.getAge());
}
코틀린에서는 다음과 같이 사용할 수 있다.
fun printAgeIfPerson(obj: Any) {
if (obj is Person) {
val person = obj as Person
println(person.age)
}
}
- 자바의 instanceof 대신 코틀린에서는 is를 사용한다.
- 자바는 타입 캐스팅을 (type)을 통해 진행하지만 코틀린에서는 as를 통해 진행한다.
as Person은 생략할 수 있다.
if (obj is Person) {
println(obj.age)
}
이를 스마트 캐스트라한다. 이는 컴파일러가 if문을 체크했기 때문이다.
instanceof의 역은 어떻게 할 수 있을까?
if (!(obj is Person)) {
}
도 가능하지만 다음과 같이도 사용이 가능하다.
if (obj !is Person) {
}
when (obj) {
!is Person -> {
}
}
아래는 인텔리제이가 제안한 코드 양식인데 아직은 익숙하지 않다.
널을 허용하는 경우는 다음과 같다.
fun printAgeIfPerson(obj: Any?) {
val person = obj as? Person
println(person?.age)
}
as? 를 통해 널일 경우 obj as? Person이 null값이 되고 println()에서는 null이 출력된다.
Kotlin의 3가지 특이한 타입
Any
- 자바의 Object와 같은 역할로 모든 객체의 최상위 타입이다.
- 모든 기본 타입의 최상의 타입도 Any이다.
- Any 자체로는 null을 포함할 수 없기 때문에 Any?를 통해 표현해야 한다.
- equals, hashcode, toString이 존재한다.
Unit
- 자바의 void와 동일한 역할을 한다.
- Unit은 void와 다르게 그 자체로 타입 인자로 사용이 가능하다
- 함수형 프로그래밍에서 Unit은 단 하나의 인스턴스만 갖는 타입을 의미한다.
Nothing
- 함수가 정상적으로 끝나지 않았다는 사실을 표현
- 무조건 예외를 반환하는 함수/ 무한 루프 함수등
String Interpolation & String indexing
${}를 사용하면 값이 들어간다. 마치 자바스크립트 ES6의 백틱처럼 동작하는 것 같다.
var person = Person("oncerun", 25)
val log = "name is ${person.name} and age is ${person.age}"
""" , 큰 따옴표 3개로 여러 줄에 걸친 문자열을 작성할 수 있다.
val str = """
wtf?
${person.age}
what?
""".trimIndent()
특정 문자열 가져오기.
var str = "ABCD"
var first = str[0]
'Kotlin' 카테고리의 다른 글
조건문 (0) | 2022.11.30 |
---|---|
연산자 (0) | 2022.11.27 |
kotlin에서 null (0) | 2022.11.26 |
변수를 다루는 방법 (0) | 2022.11.26 |
kotlin 간단 소개 (0) | 2022.11.26 |
댓글