Kotlin의 type 다루기
기본 타입
Java와 동인한 기본 타입
- Byte
- Short
- Int ★
- Long ★
- Float ★
- Double ★
- 부호 없는 정수들
Java와 다른 내용
- Java : 기본 타입 간의 변환은
암시적으로 이루어 짐 - Kotlin : 기본 타입 간의 변환은
명시적으로 이루어 짐
Kotlin의 예시
1
2
3
4
val num1 = 4 // Int Type
val num2: Long = num1 // Type mismatch
println(num1 + num2)
위와 같이 num1은 Int Type이기 때문에 Long에 넣게 되면 컴파일 Type mismatch가 발생
해결 방법 (to 변환 타입)
1
2
3
4
val num1 = 3
val num2: Long = num1.toLong()
println(num1 + num2)
위와 같이 toLong()을 사용해 변환하면 해결된다.
타입 캐스팅
Java 예시
1
2
3
4
5
6
public static void printAgeIfPerson(Object obj) {
if (obj instanceof Person) {
Person person = (Person) obj;
System.out.println(person.getAge());
}
}
Java에서 instanceof는 변수가 주어진 타입이면 true, 아니면 false
Kotlin 예시
1
2
3
4
5
6
fun printAgeIfPerson(obj: Any) {
if(obj is Person){
val person = obj as Person
println(person.age)
}
}
Kotlin에서는 instanceof 대신 is를 사용
타입 또한 (Person)가 아닌, as Person으로 사용
형변환 생략 가능
1
2
3
4
5
fun printAgeIfPerson(obj: Any) {
if(obj is Person){
println(obj.age)
}
}
위와 같이 obj를 바로 사용 가능
- 이런한 변환을
스마트 캐스트라고 부른다.- Kotlin 컴파일러가 컨텍스트를 분석해서
if에서 타입 체크를 해주면 같은 타입으로 간주
- Kotlin 컴파일러가 컨텍스트를 분석해서
형이 같지 않은 경우
1
2
3
4
5
fun printAgeIfPerson(obj: Any) {
if(obj !is Person){
println(obj.age)
}
}
즉, obj가 Person 타입이 아닌 경우를 !is로 확인할 수 있다.
null이 가능한 경우
1
2
3
4
fun printAgeIfPerson4(obj: Any?) {
var person = obj as? Person
println(person?.age)
}
obj에 null이 들어올 수 있는 구조라면 형변환 as를 사용할 때 as?를 사용해서 null사용 허용
- 그렇게 되면
person은person.age으로 가져 올 수 없고,person?.age와 같이safe call을 사용해야 한다. - tip).
as?는obj가null이어도null을 반환하고Person이 아니어도null을 반환한다.- 중요!!. 타입이
일치하지 않아도예외가 아닌null을 반환하기 때문에 주의 필요
- 중요!!. 타입이
Kotlin의 3가지 특이한 타입
Any
- Java의 Object 역할 (모든 객체의 최상위 타입)
- 모든
Primitive Type의 최상위 타입 (Java는 아님) - Any 자체로는 null을 포함할 수 없어
Any?를 사용해서 null을 포함 equals/hashCode/toString존재
Unit
- Java의 void와 동일한 역할 (타입 추론이 가능해서 생략 가능)
- void와 다르게 Unit은 그 자체로 타입 인자로 사용 가능
- 단 하나의 인스턴스만 갖는 타입을 의미 (실제 존재하는 타입)
Nothing
- 함수가 정상적으로 끝나지 않았다는 사실을 표현
- 무조건 예외를 반환하는 함수 / 무한 루프 등.
- 자주 사용되는 타입은 아님.
1 2 3
fun fail(message: String): Nothing { throw IllegalArgumentException(message) }
- 자주 사용되는 타입은 아님.
String Interpolation, String indexing
- 문자열에 ${변수}를 사용해서 값을 넣을 수 있다.
- 주의!!
간단한 변수를 사용할 때만 사용하는 것이 좋다
Java의 경우
1
2
val person = Person("김용준", 29)
System.out.println(String.format("이름 : %s", person.name))
Java는 String.format을 사용해서 출력
Kotlin의 경우
1
2
val person = Person("김용준", 29)
println("이름 : ${person.name}")
${person.name}와 같이 ${변수}를 사용할 수 있다.
일반 적인 String의 경우
1
2
val name = "김용준"
println("이름 : $name")
$만을 사용해서 작성 가능
trimIndent 사용 예시
1
2
3
4
5
6
7
val name = "김용준"
val str = """
ABC
EFG
${name}
""".trimIndent()
println(str)
위와 같이 문자열에 개행하면서 자유롭게 사용할 수 있다.
- 출력 예시
ABC
EFG
김용준
Java 특정 문자 가져오기
1
2
String str = "ABCDE";
char ch = str.charAt(1);
Java는 위와 같이 charAt을 사용해서 특정 문자의 index를 사용해서 특정 문자를 가져옴
Kotlin의 특정 문자 가져오기
1
2
val str = "ABCDE"
val ch = str[1]
위와 같이 배열을 이용해서 index에 해당하는 특정 문자를 가져옴
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.