본문 바로가기
Language/Kotlin

[Kotlin] 변수와 데이터 타입

by 진꿈청 2024. 8. 29.

Kotlin

코틀린에서 변수의 선언은 `val`과 `var`를 사용한다.

 

 

val

  • 변수를 선언할 때 지정한 값에서 더이상 변경하지 않아야 하는 경우 사용
  • final을 내장하고 있다고 생각하면 된다.

var

  • 변수의 값을 바꿀 수 있어야 하는 경우 사용

 

변수의 선언

변수를 선언하는 경우 아래와 같은 포멧으로 진행한다.

 

val variableName: String = "변수 선언 방법"
  • val: 변수 선언 키워드
  • variableName: 변수 이름
  • String: 데이터 타입
  • 변수 선언 방법: 값

변수를 선언할 때 데이터 타입은 생략이 가능하며, 값을 가지고 자료형을 자동으로 지정이 가능하다.

이것을 `자료형 추론` 이라고 한다.

 

변수는 아래와 같이 출력할 수 있다.

println("print value : $value")

 

자바와 달리 `$`를 붙임으로 위에서 선언한 변수 사용이 가능하다.

 

 

데이터 타입

`Kotlin`은 `Reference Data Type`을 사용한다.

`Reference Data Type`은 객체(메모리)를 생성하고 데이터를 할당하는 방식을 의미한다.

 

다만, 참조형으로 생성된 객체는 컴파일 과정에서 기본형으로 대체되어 문제없이 사용 가능하다.

 

데이터 타입의 최상위 클래스로는 `Any`가 있다.

 

좀 더 쉽게 설명하면 `Java`에서 `int`, `double`로 사용했던 걸 `Kotlin`에서는 `Int`, `Double`이런 형식으로 사용을 화면 된다.

그리고 컴파일 과정에서 기본형으로 대체가 된다. 즉, 메모리를 사용하긴 하지만 컴파일 과정에서 최적화를 해준다는 것이다.

 

 

숫자형 데이터 타입

숫자형 데이터 타입은 아래와 같다.

 

정수형 데이터 타입

  • Long(64 bits)
  • Int(32 bits)
  • Short(16 bits)
  • Byte(8 bits)

기본적으로 `Int`로 추론이 되며, 숫자 뒤에 `L`을 붙여주면 `Long` 타입으로 추론한다.

작은 숫자 또한 기본적으로 `Int`로 추론이 되기에 `Short`, `Byte`를 사용하기 위핸 명시적으로 적어줘야 한다.

 

그리고 앞서 말했듯이 데이터 타입은 생략이 가능하다. 그래서 아래와 같이 코드를 작성해도 `Syntax`에러가 발생하지 않는다.

val a = 1
val a = 1L

 

자동으로 데이터 타입 추론이 일어나기 때문이다.

 

 

실수형 데이터 타입

  • Double(64 bits)
  • Float(32 bits)

실수형은 기본적으로 `Double` 타입으로 추론된다.

 

 

(참고)숫자형 데이터 타입은 자리수를 구분하기 위해 언더바(_)를 사용할 수 있으며, 값에 영향을 주지 않는다.

 

 

논리형 데이터 타입

논리형 데이터 타입은 아래와 같다.

 

논리형 데이터 타입

  • Boolean: true, false

 

문자열 데이터 타입

문자, 문자열 데이터 타입은 아래와 같다.

 

문자 데이터 타입

  • Char(16 bits)

한 단어만 입력할 수 있으며, 선언할 때는 무조건 문자 값을 사용해야 한다.

(`Java`에서는 아스키 코드 숫자를 입력해도 문자로 사용할 수 있다.)

(하지만, `Kotlin`의 경우 객체 형태를 사용해서 컴파일 과정시 최적화를 위해 무조건 문자 값을 사용해야 한다고 한다.)

 

문자열 데이터 타입

  • String

문자열을 저장할 때 사용하는 타입이다.

 

 

그럼 해당 데이터 타입을 코드와 함께 알아보자.

 

 

VariableSample

package variable

class VariableSample {

    companion object{

        @JvmStatic
        fun main(args: Array<String>){
            val firstName : String = "Yoonsoo"
            val lastName = "Han"
            var age = 12

//            lastName = "Kim"
            age = 15

            println("my name is $firstName")
            println("my age is $age")
        }
    }
}

 

위의 클래스에서 `companion object`나 `@JvmStatic`은 일단 제외하고 변수 선언에 관해 살펴보자.

보면 `firstName`에는 `:String`으로 데이터 타입에 관해 표시하였지만, 밑의 `lastName`의 경우에는 표시해주지 않았다.

 

마찬가지로, `age`에 관해서도 표시해주지 않았다.

 

그리고 `lastName`은 변수 선언 키워드가 `val` 이므로 값을 변경할 수 없다.

 

따라서, `lastName = "kim"` 문장을 주석 해제하면 오류가 발생하므로, 주석처리를 해주었고

변수 선언 키워드 `var`을 사용한 `age`는 수정이 가능하므로 수정하면 된다.

 

그리고 `println`으로 출력할 때는 `$`을 붙여서 바로 변수가 사용이 가능하다.

 

 

DataTypeSample

 

다음으로는 데이터 타입을 알아보기 위한 클래스를 생성해보자.

 

package variable

class DataTypeSample {
    companion object {
        @JvmStatic
        fun main(args : Array<String>){
            // Number Data Type
            val number1 = 123
            val number2 = 12L
            val number3 = -123
            val number4 : Long = 123
            val number5 : Any = 123
            val number6 = 123.456
            val number7: Double = 123.456
            val number8: Float = 123.456F

            // Logical Data Type
            val isTrue = true
            val isFalse: Boolean = false
            var isFalse2: Any = false

            // Character, String Data Type
            val character = 'a'
            println(character)
            println(character + 1)

            val string1 = "text"
            val string2: Any = "text"
            isFalse2 = "oh"
        }
    }
}

 

위의 코드를 보면 데이터 타입을 명시한 것과 명시하지 않은 것이 보이는데,

앞서 말한 것처럼 데이터 타입 추론을 통해 명시하지 않아도 `Kotlin`이 데이터 타입을 결정한다.

 

여기서 몇 가지 알면 좋은 것들이 존재하는데,

  • `Long`은 데이터 타입을 붙이지 않아도 `L`을 붙이면 알아서 `Long`으로 생각한다.
  • `Any`로 데이터 타입을 지정하면 나중에 다른 데이터 타입의 값으로 변경해도 된다.
  • `Char` 형에 관해 `a`로 지정을 하면 컴파일시 기본 타입으로 지정이 되어 `+1`을 해줘도 잘 인식된다.
  • `Float`는 데이터 타입을 지정해줘도 끝에 `F`를 붙여줘야 정상적으로 인식된다. 

등이 될 것 같다.

 

 

'Language > Kotlin' 카테고리의 다른 글

[Kotlin] 클래스  (0) 2024.09.02
[Kotlin] 함수  (0) 2024.09.02
[Kotlin] 조건문과 반복문  (0) 2024.09.02
[Kotlin] 연산자  (0) 2024.09.02
[Kotlin] 코틀린 개요  (1) 2024.08.29