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] 코틀린 개요 (0) | 2024.08.29 |