1. 코틀린 타입 종류
1) 기본 타입
타입 비트 크기
Double 64
Float 32
Long 64
Int 32
Short 16
Byte 8
2) 이외 타입
Any
- 자바에서 Object타입과 동일함
- 모든 Primitive Type의 최상위 타입은 Any
* 자바는 레퍼런스 타입만 최상위 타입이 Object
- Any자체로는 null을 표현할 수 없으며, Any?형태로 사용하여 null처리
Unit
- 자바에서 void 타입과 동일
- void와의 차이점은 Unit은 그 차제로 타입으로 사용 가능
- Unit은 하나의 인스턴스(싱글턴)을 갖는 의미
* 즉 코틀린의 Unit은 실제 존재하는 타입
Nothing
- 함수가 정상적으로 처리되지 않았다는 사실을 표현하는 역할
- 자바에서 함수 뒤에 throws를 붙이는 것과 같아 보임
fun fail(message: String): Nothing {
throw IllegalArgumentException(message)
}
3) 자바 vs 코틀린 캐스팅 연산
기본 타입
자바
- 타입 간 변환이 암시적
int number1=4;
long number2 = number1;
-> number1을 number2로 = 연산을 할 때, 내부적으로 int -> long 처리
코틀린
- 타입 간 변환이 명시적 -> 코틀린에서는 암시적변환을 지원 하지 않음
val number1:int = 4
val number2:Long = number1 -> error
val number:int = 4
val number2:Long = number1.toLong()
-> 변수.toXXX()함수를 붙여 up or down캐스팅을 해야함
객체 인스턴스
자바
private void castToJava(obj:Object){
if(obj instanceOf Person){
Person person = (Person)obj;
System.out.println(person.getName());
}
}
코틀린
private fun castToKotlin(obj:Any){
if(obj is Person){
println(obj.name)
}
if(obj is Person){
val person = obj as Person
println(obj.name)
}
}
자바에서는 캐스팅 연산할 타입으로 변환 후 사용해야 하는 반면
코틀린에서는 스마트캐스트라는 기능을 이용해 타입을 이용한 변환을 해주지 않아도 자동으로 알아서 변환 처리
* 스마트캐스트: if조건에서 is키워드를 통해 조건이 맞을 경우
조건상의 타입으로 알아서 간주하여 변환하는 기능
4) nullable에 대한 캐스팅 연산
as 키워드 뒤에 ?을 붙여 safety call을 할 수 있다.
fun pringAgeIfPerson(obj:Any?) {
// as 키워드 뒤에 ? 을 붙여주게 될 경우, obj가 null일 경우, obj as? Person 자체가 null처리됨 -> safety call
val person = obj as? Person;
// 엘비스 조건을 이용해, null일경우 값을 0으로 부여
val age = person?.age ?: 0
}
5) String interpolation / String indexing
fun testString(){
// java style
val person = Person()
val msg = String.format("나이: %s, 이름: %s", person.age, person.name)
System.out.println(msg)
//kotlin style
// 괄호 생략 가능이 가능하지만, 가독성, 일괄변환, 정규식활용 측면에서 {}사용하는것이 더 좋았다. - 발표자 기준
val msg_kotlin = "나이: ${person.age}, 이름: ${person.name}"
val msg1 = """
나이: ${person.age},
이름: ${person.name}
""".trimIndent()
println(msg1)
// 특정 문자열 가져오기
// java -> str.charAt(1)
var str = "abcdef"
println(str[0])
}