본문으로 바로가기

1. 기본타입(primitive type)

  • 자바와 동일 Byte, Short, Int, Long, Float, Double, 부호없는 정수
  • 코틀린에서는 타입을 지정해 주지 않아도 선언된 기본 값을 보고 타입을 추론한다.
val number1 = 3 // Int
val number2 = 3L // Long
val number3 = 3.0f // Float
val number4 = 3.0f // Double

기본타입간 변환

  • 코틀린에서 기본타입간 변환은 명시적으로 이루어 져야 한다.
  • to변환타입 메서드 사용: toInt() toLong(), toDouble()
  • nullable일 경우 safecall, elvis 연산으로 처리 필요
/** Kotlin **/
// 기본타입 명시적 변환
val num1 = 4
val num2:Long = num1.toLong()
println(num1+num2)

// nullable 처리
val num3: Int? = 3
val num4: Long = num3?.toLong() ?: 0L
/** java **/
int number1 = 4;
long number2 = number1; // 큰타입(long)으로 암시적 변경
System.out.println(number1+number2)

타입 캐스팅

  • value is Type: 타입 검증
    • java의 instanceof Type 과 동일
    • 특정 타입이 아닌 걸 찾을땐 !is 사용
  • value as Type : 타입으로 변환
    • java의 (Type) 과 동일
    • 스마트 캐스트를 통해 생략이 가능하다.
    • as? 안전한 타입 형변환
      • 사용하면 타입이 null이거나 맞지 않을때 null 반환
      • 이후 safe call 사용
fun printAgeIfPerson(obj:Any?){
    // if(obj !is Person){  person 이 아니라면
    if(obj is Person){
        val person = obj as Person
        println(person.age)
    }

        //nullable일경우 as? 사용
    val person = obj as? Person  // null이 들어오면 전체가 Null이 된다.
    println(person?.age)   // safe call
}
/** java **/
public static void printAgeIfPerson(Object obj) {
        //if (!(obj instanceof Person)) { person 타입이 아니라면
    if (obj instanceof Person) {
        Person person = (Person) obj;
        System.out.println(person.getAge());
    }
}

Kotlin의 3가지 특이한 타입

Any

  • Java의 Object 역할
  • 모든 Primitive type의 최상의 타입도 Any이다.
  • Any 자체로는 Null을 포함 할 수 없어 null을 포함하고 싶다면 Any?로 표현
  • Any에 equals / hashCode / toString 존재

Unit

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

Nothing

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

String Interpolation

  • ${변수} 를 통해 문자열 안에 변수를 넣어줄 수 있다.
  • 중괄호를 생략해서 사용 가능하나 가독성, 일괄변경, 정규식 활용 측면에서 왠만하면 넣어주는 것을 추천
// String Interplation
val person = Person("지훈",100);
println("이름 : ${person.name} / 나이 : ${person.age} ")
println("이름 : $person.name / 나이 : $person.age ")

//java
System.out.println(String.format("이름 : %s / 나이 : %s ", person.name, person.age)) 

trimIndent

  • 여러줄에 걸친 문자를 작성할때 trimIndent사용하면 편리하다.
  • 큰따옴표 세개로 사용
val name = "지훈"
println( """
    내
    이름은
    ${name}  
""".trimIndent()
)

/* 결과
내
이름은
지훈
*/

String Indexing

  • 문자열을 가져올때 는 Java의 배열처럼 대괄호 [] 를 사용한다
//String indexing
val str = "ABC"
println(str[0])
println(str[2])

/* 결과
A
B
*/

Reference

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide) - 인프런 | 강의

 

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide) - 인프런 | 강의

이 강의를 통해 Kotlin 언어의 특성과 배경, 문법과 동작 원리, 사용 용례, Java와 Kotlin을 함께 사용할 때에 주의할 점 등을 배울 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com