Kotlin 기초 : Type

정종욱·2023년 7월 4일
0

Kotlin

목록 보기
3/16
post-thumbnail

기본 타입

코틀린에는 Byte, Short, Int, Long, Float, Double, 부호없는 정수들이 존재한다.

기본적으로 많이 쓰이는 타입을 알아보자.

타입 추론

코틀린에서는 선언된 기본 값을 보고 타입을 추론한다.

val number1 = 3 // Int
val number2 = 3L // Long
val number3 = 3.0f // Float
val number4 = 3.0 // Double

예를들어 정수에 L 이 붙으면 8byte Long 으로 추론하고 그렇지않으면 4byte Int 로 추론한다. 정수가 아닐 때 f 가 붙으면 Float, 붙지않으면 Double 로 추론한다.

타입간의 변환

자바는 암시적, 코틀린은 명시적으로 이루어져야한다.

int number1 = 4;
long number2 = number1;
System.out.println(number1 + number2);

자바의 경우 큰 타입인 long 으로 자동변환된다.

val number1 = 4
val number2: Long = number1 // 에러 발생

코틀린에서는 타입 미스매치 에러를 발생시킨다.
이와 같이 암시적인 변경이 불가능하여 number1.toLong() 과 같이 .to~~~() 메서드를 이용하여 명시적으로 변환시켜주어야한다.

타입 캐스팅

자바에는 instanceof 가 존재한다.

  • instanceof : 변수가 주어진 타입이면 true, 그렇지 않으면 false
if (obj instanceof Person) {
	Person person = (Person) obj;
}

코틀린에서는 instanceof 를 사용하지 않고

if (obj is Person) {
	val person = obj as Person
}

위와 같이 is 로 표현하며 타입캐스팅시 (Type) 이 아닌 as Type 으로 캐스팅한다.

val person = obj as? Person

만약 obj 가 nullable 할 때 타입캐스팅을 한다면 as 뒤에 ? 를 붙여 처리하면 된다. 위의 경우 value 가 null 이거나 해당 타입이 아니면 null 을 리턴한다.

Kotlin 의 3가지 특이타입

자바에 없는 Any, Unit, Nothing 이라는 타입이 존재한다.

Any

  • 자바의 Object 역할
  • 모든 Primitive Type 의 최상위 타입
  • Any 자체로는 null 을 포함할 수 없어 Any? 로 표현
  • Any 에 equals, hashCode, toString 이 존재

Unit

  • void 와 동일한 역할
  • void 와 다르게 Unit 은 그 자체로 타입 인자로 사용 가능
    • 코틀린 심화에서 부연설명
  • 함수형 프로그래밍에서 Unit 은 단 하나의 인스턴스만 갖는 타입을 의미
  • 코틀린의 Unit 은 실제 존재하는 타입이라는 것을 표현

Nothing

  • 함수가 정상적으로 끝나지 않았다는 사실을 표현하는 역할
  • 무조건 예외를 반환하는 함수 / 무한 루프 함수 등
fun fail(message: String): Nothing {
	throw IllegalArgumentException(message)
}

실제로 별로 사용되지는 않는다.

String Interpolation, String indexing

Interpolation

Java 표현식

Person person = new Person("종구", 30);
String log = String.format("이름은 %s이고 나이는 %s세 입니다", person.getName(), person.getAge());

StringBuilder builder = new StringBuilder();
builder.append("이름은 ");
builder.append(person.getName());
...
builder.append("세 입니다");

Kotlin 표현식

val person = Person("종구", 30)
val log = "이름은 ${person.name}이고 나이는 ${person.age}세 입니다"

복잡한 자바의 표현과 다르게 코틀린은 위와 같이 편하게 표현할 수 있다. 객체가 아닌 단순한 변수같은 경우는 중괄호를 빼고 $name 등으로 표현할 수 있다.

fun main() {
	"""
    	ABC
        EFG
    """.trimIndent()

}

위와 같이 표현하면

ABC
EFG

여러줄에 걸친 문장을 작성할 때 위와 같이 쉽게 작성할수도 있다.

indexing

java 에서 String str = "ABC" 에서 B 라는 워딩을 가져오고싶다면 str.charAt(1) 으로 표현해야하지만 코틀린에서는 str[1] 로 간편하게 표현가능하다.

0개의 댓글

관련 채용 정보