본문 바로가기

프로그래밍 언어 기초/KOTLIN

[Kotlin] 변수와 자료형

개요

오늘은 코틀린의 변수와 자료형에 대해서 알아보도록 하겠습니다.
변수란, 컴퓨터 메모리에 저장할 자료(Data)를 저장하기 위한 공간으로 자료형(Type, 形)에 따라 그 크기가 다릅니다.

그리고 이러한 자료형은 프로그램에서 사용 가능한 다양한 변수의 '종류'를 구분해줍니다.
변수에 대한 보다 자세한 설명이 궁금하시다면 아래의 게시글을 참고해주세요 😀

 

https://1-hee.tistory.com/2

 

chapter 1. 자바 변수와 연산자 그리고 메서드

1.1. 변수(Variable)이란? 컴퓨터 메모리에 자료(Data)를 저장하기 위한 공간으로 자료형(Type, 形)에 따라 그 크기가 다릅니다. 우리가 사용하는 컴퓨터는 기술의 발전으로 커다란 양의 데이터도 거뜬

1-hee.tistory.com

 

 


1. 코틀린에서 변수 선언하기

코틀린에서 변수는 아래와 같이 선언할 수 있습니다.

fun main(args: Array<String>) {
    var myVariable1 = "안녕하세요"
    var myVariable2 = 123
    val myVariable3 = false

    // myVariable3 = true
    /*
    error: val cannot be reassigned
    myVariable3 = true

     */
}

 

코틀린에서 변수의 선언에 사용할 수 있는 키워드로는 var와 val가 있는데요.
var는 또 다시 값을 넣을 수 있는 '변경 가능한' 변수이고,

val는 다시 값을 넣을 수 없는 '변경 불가능한' 변수입니다.

경우에 따라서 한 번 작성한 변수에 다른 곳에서 다시 값이 들어와야 한다면 var 키워드를 통해 변수를 선언해 사용할 수 있고,
한 번 작성한 이후에 다시 값을 넣어줄 일이 없고, 다른 값이 들어오지 말아야 한다면 val를 통해 값을 다시 넣는 것을 막을 수 있습니다.


2. 코틀린의 자료형(Type)

코틀린에서 자료형(Type)은 크게 아래와 같이 다섯 가지로 구분할 수 있습니다.

 

  • Numbers
  • Booleans
  • Characters
  • Strings
  • Arrays

그리고 이러한 자료형은 변수 선언시에 명시적으로 표시하는 데 사용할 수 있습니다.

예를 들어, 정수형 변수를 선언한다면 아래와 같이 콜론(:)+자료형의 추가하여 변수에 정수형임을 명시할 수 있습니다.

val intValue:Int = 0

 


2.1 Numbers

숫자를 다룰 수 있는 자료형입니다. 수학에서 다루는 정수와 실수를 모두 포함합니다.

코틀린에서 정수를 다루는 자료형은 아래와 같습니다.

 

자료형(Type) 크기(bits) 최소 값(Min Value) 최대 값(Max Value)
Byte 8 -128 127
Short 16 -32768 32767
Int 32 -2,147,483,648 (-2^31)  2,147,483,647 (2^31 - 1)
Long 64  -9,223,372,036,854,775,808 (-2^63)  9,223,372,036,854,775,807 (2^63 - 1)

 

val one = 1 // Int
val threeBillion = 3000000000 // Long
val oneLong = 1L // Long
val oneByte: Byte = 1



코틀린에서 소수점 표현이 가능한 실수를 다루는 자료형은 아래와 같습니다.

 

자료형(Type) 크기(bits) 유효 비트 수
(Significant bits)
지수 비트
(Exponent bits)
소수점 자리
(Decimal digits)
Float 32 24 8 6~7
Double 64 53 11 15~16

 

 

val pi = 3.14 // Double
// val one: Double = 1 // Error: type mismatch
val oneDouble = 1.0 // Double

 


float 변수에 담을 값에 대해 Float 유형임을 명시적으로 지정하려면, 숫자의 끝에 f를 붙이면 됩니다.

float 변수에 6-7자리 이상의 십진수가 포함되면 자동으로 반올림됩니다.

 

val e = 2.7182818284 // Double
val eFloat = 2.7182818284f // Float, actual value is 2.7182817

 


2.1.1. 숫자의 자리수 표현


변수에 담을 수 있는 숫자는, 경우에 따라서 매우 큰 수가 담길 수 있습니다.

개발자가 코드를 볼때, 변수에 담긴 숫자의 자리수를 쉽게 파악할 수 있도록

코틀린에서는 아래와 같이 숫자 값에 대한 자리수를 구분할 수 있습니다.

val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010

 

 


2.2 Booleans

코틀린에서 참(true)과 거짓(false)를 나타낼 수 있는 불리언(boolean) 데이터는 아래와 같이 작성할 수 있습니다.

val myTrue: Boolean = true
val myFalse: Boolean = false

 

 


2.3 Characters

코틀린에서도 자바의 char, Character와 같은 자료형을 사용할 수 있습니다.

코틀린에서 이 두 자료형은 Char로 관리할 수 있으며 아래와 같이 사용할 수 있습니다.

 

val aChar: Char = 'a'
println(aChar)
println('\n') // Prints an extra newline character
println('\uFF00')

 

 

또한, 개행 문자('\n')와 같은 이스케이프 문자도 사용할 수 있습니다.

코틀린에서 사용 가능한 개행 문자는 아래와 같습니다.

  • \t – tab
  • \b – backspace
  • \n – new line (LF)
  • \r – carriage return (CR)
  • \' – single quotation mark
  • \" – double quotation mark
  • \\ – backslash
  • \$ – dollar sign


2.4. Strings

코틀린에서 문자열(String) 값은 아래와 같이 작성할 수 있습니다.

val s = "Hello, world!\n"

 

 

또한, 아래와 같이 for문을 통해 문자열의 문자 하나 하나 탐색할 수 있습니다.

val str = "hello world!"

for (c in str) {
    println(c)
}

 


코틀린에서는 영어 문자열의 UpperCase와 LowerCase에 대응 가능합니다.

만일, 아래와 같은 알파벳 문자열이 있다면 다음과 같이 변환할 수 있습니다.

 

val str = "abcd"

// Creates and prints a new String object
println(str.uppercase())
// ABCD

// The original string remains the same
println(str) 
// abcd


여기서 중요한 것은 변수에 담긴 문자열을 .uppercase() 함수로 변환했더라도

원래 변수에 있었던 값은 변하지 않는다는 점을 기억해주세요.

다음으로 문자열 자료형은 아래와 같이 + 연산을 할 수 있습니다.

코틀린에서 문자열의 덧셈은 아래와 깉이 문자 또는 문자열을 추가하는 연산으로 활용할 수 있습니다.

val s = "abc" + 1
println(s + "def")
// abc1def

 


2.4.1. String templates

 

코틀린에서 문자열은 반복문과 함께 사용할 때, 탬플릿으로 쉽게 커스텀할 수 있습니다.

 

val i = 10
println("i = $i")
// i = 10

val letters = listOf("a","b","c","d","e")
println("Letters: $letters")
// Letters: [a, b, c, d, e]

 

 

위와 같이 기존의 문자열에 '$' 또는 '${}'를 통해 변수의 값을 함께 사용할 수 있습니다.

 


2.4.2. String formatting

 

코틀린에서는 다양한 숫자 자료형을 문자열로 바꿀 때, 포멧 스트링을 지원합니다.

포멧 스트링은 n자리 수 문자열 만들기 등에 유용하게 사용할 수 있습니다.

포멧 스트링은 문자열로 변환하려는 데이터의 자료형에 따라 다음과 같이 구분하여 사용합니다.

 

// Formats an integer, adding leading zeroes to reach a length of seven characters
val integerNumber = String.format("%07d", 31416)
println(integerNumber)
// 0031416

// Formats a floating-point number to display with a + sign and four decimal places
val floatNumber = String.format("%+.4f", 3.141592)
println(floatNumber)
// +3.1416

// Formats two strings to uppercase, each taking one placeholder
val helloString = String.format("%S %S", "hello", "world")
println(helloString)
// HELLO WORLD

// Formats a negative number to be enclosed in parentheses, then repeats the same number in a different format (without parentheses) using `argument_index$`.
val negativeNumberInParentheses = String.format("%(d means %1\$d", -31416)
println(negativeNumberInParentheses)
//(31416) means -31416

 



2.5. Arrays

프로그램에서 연속된 데이터는 인접한 메모리 영역에 함께 저장하는 것이 효율적입니다.

자바와 같은 프로그래밍 언어에서는 연속된 데이터의 효율적 저장을 위해,

 

연속된 메모리의 공간을 확보해 하나의 변수에 여러개의 데이터를 담을 수 있는 배열(Array)를 제공합니다.

코틀린에서도 마찬가지로 이러한 배열(Array)자료형을 사용할 수 있습니다.

또한, 자바에서의 배열(Array)과 호환도 좋습니다.

만약 배열 생성 시 초기 값을 직접 입력하는 경우라면 아래와 같이 배열을 선언할 수 있습니다.

var riversArray = arrayOf("Nile", "Amazon", "Yangtze")

// Using the += assignment operation creates a new riversArray,
// copies over the original elements and adds "Mississippi"
riversArray += "Mississippi"
println(riversArray.joinToString())
// Nile, Amazon, Yangtze, Mississippi

 

자바에서 배열은 한번 사이즈를 정하면, 그 크기를 바꾸기 어려운데,

코틀린에서는 var로 선언한 배열의 경우 += 연산자를 통해 값을 추가하면

자동으로 원래 배열에서 새로운 요소를 추가하여 배열을 생성해줍니다.

코틀린에서 배열을 생성할 때, null로 값을 초기화하거나

빈 배열을 생성하고자 할 때는 아래와 같이 선언할 수 있습니다.

 

// Creates an array with values [null, null, null]
val nullArray: Array<Int?> = arrayOfNulls(3)
println(nullArray.joinToString())
// null, null, null

// create empty Arrays
var exampleArray: Array<String> = emptyArray()

 

 

이외에도 Int나 Float과 같은 값을 담을 배열에 초기 값을 0으로 정해줄 수도 있습니다.

예를 들어 정수형(Int) 데이터를 담을 배열의 크기를 설정하고

초기 값을 0으로 초기화하고 싶다면 아래와 같이 작성할 수 있습니다.

val exampleArray = IntArray(5)
println(exampleArray.joinToString())

 


2.5.1. 중첩된 배열(= 다차원 배열), Nested arrays

코틀린에서 배열은 1차원의 정보를 나타낼 때 사용할 수 있습니다.

그런데, 배열을 중첩하여 n차원의 정보를 나타내려면 아래와 같이 선언할 수 있습니다.

// Creates a two-dimensional array
val twoDArray = Array(2) { Array<Int>(2) { 0 } }
println(twoDArray.contentDeepToString())
// [[0, 0], [0, 0]]

// Creates a three-dimensional array
val threeDArray = Array(3) { Array(3) { Array<Int>(3) { 0 } } }
println(threeDArray.contentDeepToString())
// [[[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]]]

1차원 배열에서 배열의 요소는 인덱스(index)를 통해 조회할 수 있습니다.
코틀린의 다차원 배열에서도 마찬가지로 인덱스를 통해 아래와 같이 조회할 수 있습니다.

val simpleArray = arrayOf(1, 2, 3)
val twoDArray = Array(2) { Array<Int>(2) { 0 } }

// Accesses the element and modifies it
simpleArray[0] = 10
twoDArray[0][0] = 2

// Prints the modified element
println(simpleArray[0].toString()) // 10
println(twoDArray[0][0].toString()) // 2

 


2.5.2. 배열의 비교, Compare arrays

코틀린은 서로 다른 변수에 담긴 배열에 같은 값이 있는지 쉽게 검사할 수 있습니다.

아래와 같이 `contentEquals` 연산자를 활용하면 배열 안의 값이 같은지 확인할 수 있습니다.

val simpleArray = arrayOf(1, 2, 3)
val anotherArray = arrayOf(1, 2, 3)

// Compares contents of arrays
println(simpleArray.contentEquals(anotherArray))
// true

// Using infix notation, compares contents of arrays after an element
// is changed
simpleArray[0] = 10
println(simpleArray contentEquals anotherArray)
// false

 

 

 

참고자료

https://kotlinlang.org/docs/

 

You will be redirected shortly

 

kotlinlang.org