Kotlin

Kotlin - 변수와 자료형, 연산자

WangTak 2022. 4. 6. 23:04
반응형

오늘은 코틀린의 변수와 자료형, 연산자에 대해서 정리해보도록 하겠습니다. 언어를 배울 때 개인적으로는 익숙해져야 한다고 생각합니다. 이런 내용들을 숙지하고 코드를 보면서 코틀린과 좀 더 친해져 봅시다.

 

※ 변수의 사용 방법과 자료형 그리고 변수를 이용하여 연산할 때 사용하는 연산자

 

코틀린에서 프로젝트는 모듈(Module), 패키지(Package), 파일(File)로 구성

- 모듈은 목적지, 패키지는 여행용 가방, 파일은 가방 속에 넣는 짐

 

코드를 보면서 친해져 봅시다.

 

기본적인 클래스 사용 및 출력

package com.example.wangtak

class Person(val name: String, val age: Int)
package com.example

import com.example.wangtak.Person as User // 패키지에 있는 클래스를 가져옴
// 가져온 Person을 그냥 Person으로 써도 되지만 as 키워드를 사용하여 User라는 alias로 쓸 수 있습니다.

fun main() {
    val user1 = User("Wangtak", 26) // com.example.wangtak의 Person을 User로 사용
    val user2 = Person("A123", "Wangtak") // 이 파일 안에 있는 Person 클래스의 객체 생성

    // Kotlin 은 기본적으로 .fieldVariable 을 사용할 수 있으며 이것은 getter 임.
    println("user1.name : ${user1.name} | user1.age : ${user1.age}")
    println("user2.id : ${user2.id} | user2.age : ${user2.name}")
}

class Person(val id: String, val name: String)

 

변수와 자료형

val: 최초로 지정한 변수의 값으로 초기화 하고 더 이상 바꿀 수 없는 읽기 전용 변수가 됩니다.

var: 최초로 지정한 변수의 초기 값이 있더라도 값을 바꿀 수 있습니다. 

val를 주로 사용하고 변경해야 할 때 var로 바꾸는 방법을 권장하셨습니다. 이렇게 하면 오류 발생 확률을 많이 낮출 수 있습니다.

 

자료형에 별명 붙이기

- 자료형에 typealias 키워드를 사용

- 고차 함수와 람다식에서도 typealias를 많이 사용함

typealias Username = String // String을 Username이라는 별명으로 대체
val user: Username = "WangTak" // 이제부터 Username은 String과 같은 표현
이렇게 특정 자료형이나 클래스 등에 별명을 붙이면 좀 더 명확하게 용도를 나타낼 수 있습니다. 또한, 아주 긴 선언의 클래스를 짧게 줄일 수 도 있습니다.

 

Null Test

- 반드시 값이 할당되어 있어야 한다는 원칙이 있습니다.

- "값이 없는 상태" => null

- null 상태인 변수를 허용하려면 물음표(?) 기호를 사용

- null 허용 여부에 따라 String과 String?이 서로 다른 자료형이라는 것만 확실히 알아야 함

 

1. 세이프 콜 (?)

2. non-null 기호 (!!)

3. 조건문을 활용하기 (null test)

4. 엘비스 연산자 (?:)

 

var str1: String? = "Hello Kotlin" // null 허용 변수
str1 = null

/*
	String?형(null 허용 변수)이기 때문에
	세이프 콜(?)이나 non-null 단정 기호(!!)를 사용해야 합니다.
*/
println("str1: $str1 length: ${str1?.length}") // str1을 세이프 콜로 안전하게 호출
println("str1: $str1 length: ${str1!!.length}") // NPE 강제 발생

/*
	!!는 null이 아님을 단정짓는 것이기 때문에 컴파일은 되지만
	실행(Runtime) 중에 NPE를 발생시킵니다.
*/

 

스마트 캐스트

컴파일러가 자동으로 형 변환을 하는 스마트 캐스트(Smart Cast)를 사용한다면 편리하다.
대표적으로 스마트 캐스트가 적용되는 자료형은 Number형

 

자료형 검사하기 => is

변수의 자료형을 알아내는 방법 - is 키워드를 사용합니다.

밑에서 is의 사용 예시 코드를 확인해보시면 이해가 되실 겁니다. 자바의 instanceof를 생각하시면 이해가 바로 되실 거 같습니다.

 

묵시적 변환

| 코틀린의 모든 클래스는 Any형이라는 슈퍼클래스(Superclass)를 가집니다.

자바에서 최상위 클래스를 담당하는 Object가 코틀린에서는 Any

 

Any형으로 인자를 받는 함수

fun main() {
    checkArg("Hello")
    checkArg(5)
}

fun checkArg(x: Any) {
    if (x is String) {
        println("x is String: $x")
    }

    if (x is Int) {
        println("x is Int: $x")
    }
}

1. checkArg() 함수의 인자 x가 Any형으로 선언

2. x에 들어오는 인자의 자료형에 따라 문자열 혹은 정수형 등으로 받아서 처리

 => Any는 모든 클래스의 슈퍼 클래스이기 때문에 가능(다형성)

3. is 연산자를 이용하여 인자로 받은 값을 검사하여 (여기서 스마트 캐스트가 발생합니다.) 자료형이 변환하여 if문 수행

 

 

반응형