[Kotlin] 변수, 타입 사용


Java 개발자를 위한 Kotlin 소개(

이 게시물에서 다루는 내용 자바 개발자를 위한 Kotlin 소개 에서 발췌.

https://inf.run/BpYf

Java 개발자를 위한 Java에서 Kotlin으로의 시작 가이드 – Infron | 강의

본 강의에서는 Kotlin 언어의 특징과 배경, 문법과 동작 원리, 사용 예 및 Java와 Kotlin 인프라를 함께 사용할 때 고려해야 할 사항에 대해 알아봅니다.

www.inflearn.com


1. 변수 유형

  • var: 변수, val(불변. java 최종)
  • 객체 인스턴스 생성 시 타입은 var 또는 val로 사용되며 new 연산자는 사용하지 않습니다.
var num1 = 6
num1 = 7

val num2 = 0
// num2 = 1		불가

var person = Person("김멍목")

2. 유형 지정

  • 유형을 지정할 때 변수 이름:유형을 지정하십시오.
  • Java와 달리 모든 변수는 기본적으로 0을 포함하지 않도록 설정됩니다.
  • 유형을 지정할 때 ?를 추가하여 null을 포함할 수 있습니다.
  • 참고로 프로그래머는 패킹과 언패킹에 대해 걱정할 필요가 없습니다. (kotlin에서 올바르게 처리됨)
var num3:Long = 5L
var num4:Long? = null	// null 사용 가능한 변수

3. 사용량 제로

  • nullable 형식에 직접 이 형식의 메서드를 사용할 수 없습니다. (null 체크를 한 경우 사용 가능)
  • nullable 유형에 사용되는 방법은 Safe Call입니다.
    • Safe Call 메서드가 ? 첨부됩니다.
  • null인 경우 값이나 구문을 적용하여 값을 바꿀 수도 있습니다. (엘비스 연산자)
  • nullable 변수가 null이 될 수 없다고 생각한다면!! 붙여넣기만 하면 됩니다.
    (0을 입력하면 NPE 발생)
  • Java 코드에서 제로 인식 주석을 사용하면 Kotlin 코드가 주석을 이해하고 위와 같이 작동합니다.
var str1: String? = null

// println(str1.length)      null 가능한 타입에는 위에서 null 체크를 하지 않는 이상 바로 해당 타입의 메서드를 사용할 수 없다.
println(str1?.length)       // 이와 같이 str1?로 메서드를 호출하면 가능하며, 이것을 Safe Call 이라고 함.(null 일 때 리턴 값은 null)
println(str1?.length ?: 0)  // str1?.length의 값이 null 이면 0 반환. ?: 으로 null 일 때 사용할 값 or 구문을 지정 가능하며, 이것을 Elvis 연산자 라고 한다.

var str2: String? = "ABC"
println(str2!!.length)      // str2는 null이 가능한 변수지만, null이 절대 아니다라고 !!를 통해서 알려줌으로써 해당 타입의 메서드를 사용 가능하다.

4. 유형 변환 방법

  • Kotlin은 변수의 유형을 첫 번째 선언된 값의 유형으로 설정합니다.
  • 기본 유형을 변환할 때 명시적으로 변환해야 합니다. (Java에 대한 암시적 변환)
// Kotlin은 처음 선언된 값의 타입으로 변수의 타입을 정해준다.
var num1 = 1        // Int
var num2 = 1L       // Long
var num4 = 1.0      // Double
var num3 = 1.0f     // Float

// 기본 타입의 변환의 경우 명시적으로 변환을 해줘야 한다. (Java의 경우 암묵적으로 변환)
var number1 = 1
//  var number2 = number1       X
var number2 = number1.toLong()  // toLong으로 명시적으로 형변환을 해야한다.

// nullable 변수를 Long으로 변환하는 예
var nullableNum:Int? = 1
var number3:Long = nullableNum?.toLong() ?: 0L

클래스 캐스트

  • (Kotlin) is = (Java) instanceof (및 그 반대의 경우 !is)
  • (Kotlin) obj as Person = (Java) (Person) obj
    • as: 해당 유형이 적용되지 않는 경우 ClassCaseException 발생
    • 처럼? : 유형이 적용되지 않거나 null인 경우 null 반환
fun printPersonName(obj: Any)    {
    if(obj is Person){                  // (Kotlin) is = (Java) instanceof      (반대로 !is 가능)

        // (Kotlin)  obj as Person = (Java)  (Person) obj
        var person = obj as Person      // Person Type이 아닌데, Person Type으로 형변환 시, ClassCastException 발생. (만약, as?를 사용했다면 null 반환)
        println(person.name)

        println(obj.name)               // 위에서 Person인 지 체크를 했기 때문에 알아서 Person으로 변환이 가능하다.
    }
}


fun printPersonNameNullable (obj: Any?)    {
    if(obj is Person){                  // (Kotlin) is = (Java) instanceof
        var person = obj as? Person      // (Kotlin)  obj as Person = (Java)  (Person) obj
        println(person?.name)

        println(obj?.name)               // 위에서 Person인 지 체크를 했기 때문에 알아서 Person으로 변환이 가능하다.
    }
}

5. 일체, 단결, 무

어느

  • (코틀린) 임의 = (자바) 객체
  • 모든 유형의 최상위 유형 = Any

단위

  • (Kotlin) 단위 = (Java) 비어 있음
  • void와 달리 변수형으로도 사용할 수 있습니다.
  • 실제로 존재하는 유형을 나타냅니다.

아무것도 아님

  • 함수가 비정상적으로 종료되었음을 나타냅니다.
  • 등 해당 기능이 정상적으로 종료되지 않음을 알리기 위해 B. 예외 처리 기능 또는 무한 루프 기능.

6. 문자열 조작 방법

  • 문자열에 변수를 포함하려면 ${variablename }을 사용하십시오.
  • 문자열의 특정 인덱스에 있는 문자를 가져오려면 배열처럼 사용하십시오.
  • 여러 줄을 입력하는 경우 “””를 삽입하십시오.
    var name = "김멍목"
    var age = 28

    // = (java) String s = String.format("내 이름은 %s, 나이는 %s", name, age);
    var s = "내 이름은 ${name}, 나이는 ${age}"

    // = (java) s.charAt(0)
    var s1 = s(0)

    // 여러줄을 사용하는 경우, """ """ 을 사용하면 된다.
    var newLineStr = """
        내이름은 ${name}
        나이는 ${age}
    """.trimIndent()