코린이 탈출기
02 변수와 자료형, 연산자 (02-2 변수와 자료형) 본문
02-2 변수와 자료형
변수란 값을 넣을 수 있는 상자라고 비유할 수 있습니다. 변수는 상자이고 상자에 적힌 Int, String, Float은 상자에 담긴 성질인 자료형을 의미합니다.

변수를 선언하고 자료형 추론하기
변수는 val, var라는 키워드를 이용하여 선언할 수 있습니다. val로 선언하면 최초로 지정한 변수의 값으로 초기화하고 더 이상 바꿀 수 없는 읽기 전용 변수가 됩니다. var로 변수를 선언하면 최초로 지정한 변수의 초깃값이 있더라도 값을 바꿀 수 있습니다.
변수를 선언하는 방법
앞에서 설명했던 것처럼 변수를 선언하려면 val, var를 사용해야 합니다. 변수의 값이 변경되지 않아야 한다면 val을 이용하고, 변경되어야 한다면 var를 이용하여 변수를 선언하면 됩니다.

다음은 변수를 선언한 예입니다. 변경되지 않는 변수 name이 string 자료형으로 선언되었고 "Sohee" 값으로 할당되었습니다. 그런데 코틀린은 자료형을 지정하지 않고 변수를 선언하면 변수에 할당된 값("Sohee")을 보고 알아서 자료형을 지정할 수 있습니다. 바로 이것을 '자료형을 추론한다, 타입 추론'라고 합니다.
val name = "Sohee"
즉, 다음과 같이 name 변수에 "Sohee"라는 값만 할당하면 됩니다. "Sohee"는 문자열이므로 코틀린이 이 변수의 자료형을 String으로 지정합니다.
단, 값을 할당하지 않으면 변수를 선언하려면 자료형을 반드시 지정해야 합니다.
|
자료형 알아보기
코틀린의 자료형은 참조형 자료형을 사용합니다.
보통 프로그래밍 언어의 자료형은 기본형 자료형과 참조형 자료형으로 구별합니다. 기본형은 가공되지 않은 순수한 자료형을 말하며 프로그래밍 언어에 내장되어 있습니다. 참조형은 객체를 생성하고 동적 메모리 영역에 데이터를 둔 다음 이것을 참조하는 자료형을 말합니다.
자바에서는 int, float, double 등 기본형과 String, Date와 같은 참조형을 모두 사용하지만 코틀린에서는 참조형만 사용합니다. 참조형으로 선언한 변수는 성능 최적화를 위해 코틀린 컴파일러에서 다시 기본형으로 대체됩니다. 따라서 코틀린에서는 참조형을 기본형으로 고려하는 등의 최적화를 신경 쓰지 않아도 됩니다.
기본형과 참조형의 동작 원리
자바는 기본형과 참조형 모두 사용할 수 있습니다. 기본형이 참조형보다 코드 수행 시간이 더 빠릅니다. 코틀린은 겉으로는 참조형을 사용하는 것 같지만 컴파일 과정을 거치면 참조형이 기본형으로 바뀝니다. 컴파일러가 자동으로 최적화를 수행하는 것이지요.
정수 자료형
| 형식 | 자료형 | 크기 | 값의 범위 |
| 정수 자료형 | Long | 8바이트(64비트) | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
| Int | 4바이트(32비트) | -2,147,483,648 ~ 2,147,483,647 | |
| Short | 2바이트(16비트) | -32,768 ~ 32,767 | |
| Byte | 1바이트(8비트) | -128 ~ 127 |
정수를 표현할 때 숫자를 그냥 사용하면 10진수를 나타내지만 접미사나 접두사를 사용하면 다음과 같이 2진수나 16진수를 표현할 수 있습니다.
val exp01 = 123
// Int형으로 추론
val exp02 = 123L
// 접미사 L을 사용해 Long형으로 추론
val exp03 = 0x0F
// 접두사 0x를 사용해 16진 표기가 사용된 Int형으로 추론
val exp04 = 0b00001011
// 접두사 0b를 사용해 2진 표기가 사용된 Int형으로 추론
보통의 숫자 값은 Int형으로 추론되기 때문에 만일 좀 더 작은 범위의 정수 자료형인 Byte형이나 Short형을 사용하기 위해서는 직접 자료형을 명시해야 합니다.
이번에는 음의 부호를 사용하지 않는 정수 자료형 즉, 양수만 표현할 수 있는 부호가 없는(unsigned) 정수 자료형을 알아보겠습니다. 이러한 정수 자료형은 부호가 있는 자료형보다 2배 더 많은 양수를 표현할 수 있다는 장점이 있지만, 코틀린이 업데이트되면 이 자료형은 변경될 수 있으니 상업 제품을 개발할 때는 주의하세요. (부호가 없는 자료형은 코틀린 1.3 버전에서 실험적으로 도입한 기능입니다.)
| 형식 | 자료형 | 크기 | 값의 범위 |
| 부호 없는 정수 자료형 |
Long | 8바이트(64비트) | 0 ~ 18,446,744,073,709,551,615 |
| Int | 4바이트(32비트) | 0 ~ 4,294,967,295 | |
| Short | 2바이트(16비트) | 0 ~ 65,535 | |
| Byte | 1바이트(8비트) | 0 ~ 255 |
☆ 실생활에서는 큰 수의 자릿값을 쉼표(,)로 구분하지만, 코틀린에서는 언더스코어( _ )를 사용합니다. 언더스코어는 값에 영향을 주지 않으므로 원하는 위치 아무 데나 넣을 수 있습니다.
실수 자료형
실수 자료형은 말 그대호 실수를 저장하는 데 사용합니다.
| 형식 | 자료형 | 크기 | 값의 범위 |
| 실수 자료형 | Double | 8바이트(64비트) | 약 4.9E - 324 ~ 1.7E + 308 (IDDD 754 표준) |
| Float | 4바이트(32비트) | 약 1.4E - 45 ~ 3.4E + 38 (IDDD 754 표준) |
정수와 마찬가지로 실수도 자료형을 명시하지 않으면 Double형으로 추론합니다. 만약 Double형이 아니라 Float형으로 지정하고 싶다면 간략하게 식별자 F를 실수 옆에 붙이면 됩니다.
val exp05 = 3.14
// Double형으로 추론(기본)
val exp06 = 3.14F
// 식별자 F에 의해 Float형으로 추론
실수의 개수는 무한하지만, 메모리 공간은 유한하기 때문에 이러한 메모리 단점을 극복하기 위해 실수를 표현할 때 부동 소수점(Floating-point) 방식을 사용합니다. 숫자는 그대로 두고 소수점만 둥둥 떠다니며 실수를 표현하여 부동 소수점이라고 부르는 것입니다.

코틀린에서 소수점의 이동은 숫자 오른쪽에 e나 E와 함께 밑수인 10을 제외하고 지수만 적으면 됩니다. 가수에서 왼쪽으로 소수점을 이동하려면 -, 오른쪽으로 이동하려면 + 또는 생략하여 작성하면 됩니다.
val exp07 = 3.14E-2
// 왼쪽으로 소수점을 2칸 이동 => 0.0314
val exp08 = 3.14E2 또는 3.14E+2
//오른쪽으로 소수점을 2칸 이동 => 314
하지만 부동의 소수점을 이용하면 표현 비트의 제한 때문에 약간의 오차가 있으므로 사용할 때 주의해야 합니다.
논리 자료형
참, 거짓을 표현하는 논리 자료형은 조건을 검사할 때 많이 사용합니다. 코틀린에서는 논리 자료형의 값은 true, false입니다.
| 형식 | 자료형 | 크기 | 값의 범위 |
| 논리 자료형 | Boolean | 1비트 | ture, false |
문자 자료형
문자 자료형은 문자를 표현하기 위해 사용하며 문자 자료형 값은 작은 따옴표(')로 감싸 표현합니다.
| 형식 | 자료형 | 크기 | 값의 범위 |
| 문자 자료형 | Char | 2바이트(16비트) | 0 ~ 32,767 |
컴퓨터는 문자 자료형 값을 저장할 때 문자 세트를 참고하여 번호로 저장합니다. 쉽게 말해 컴퓨터는 문자 A를 65로 이해합니다. 만약 정수 자료형을 이용하여 문자 자료형을 선언하려면 toChar()을 이용하여 선언하면 됩니다.
문자 자료형에는 1개의 문자만 저장할 수 있습니다. 만약 여러 문자가 나열된 문자열을 저장하려면 문자열 자료형을 사용해야 합니다.
val exp09 = 'A'
val exp10: Char = 65
// 에러 발생
val exp11 = 65
val exp12 = exp11.toChar()
// exp11에 해당하는 문자열 할당 => A
val exp13 = 'ab'
// 에러 발생
문자열 자료형 알아보기
문자열 자료형은 문자 자료형에서 더 나아가 여러 문자를 배열하여 저장할 수 있는 자료형입니다. 문자 자료형인 Char와 같은 기본형으로 처리되지만, 문자열 자료형은 기본형에 속하지 않는 배열 형태로 되어있는 특수한 자료형이기 때문입니다.
문자열 자료형 선언과 저장 방식 이해하기
다른 여러 자료형과 마찬가지로 문자열 자료형도 자료형의 이름을 지정하거나 추론 방식으로 선언할 수 있습니다. 문자열 자료형 값은 큰 따옴표(")로 감싸 표현합니다.
val exp14 = "Hello"
표현식과 $ 기호 사용하여 문자열 추출하기
변수의 값이나 표현식을 문자열 안에 넣어 출력하기 위해서는 달러($) 기호와 함께 변수나 표현식을 사용하면 됩니다.
val a = 1
val b = "one is $a"
// => "one is 1"
만약 변수가 아닌 표현식을 문자열에 포함시키려면 중괄호({})를 사용하면 됩니다.
val c = 1
val d = "three = ${c + 2}"
// => "three = 3"
이스케이프 문자는 백슬래시(\)를 붙여 사용하는 특수문자 표기법입니다. 코틀린에서 사용하는 기호의 기능을 사용하지 않고 그대로 출력하고 싶을 경우 사용합니다.
val e = "hello"
val f = ""hello""
// 에러 발생
val g = "\"hello\""
// 출력할 경우 => "hello"
val h = "\$hello"
// 출력할 경우 => $hello
형식화된 다중 문자열 사용하기
여러 줄의 문자열에 줄 바꿈, 탭 등의 특수문자가 포함된 경우에는 """기호를 사용하면 됩니다.

i를 출력할 경우 """ 안에 있는 문자열을 그대로 출력하게 됩니다. 하지만 들여 쓰기가 된 상태에서 출력하게 됩니다. 들여 쓰기를 제거하기 위해서는 'trimIndent()' 사용하면 됩니다.

자료형에 별명 붙이기
자료형에 별명을 붙여 사용하고 싶을 경우에는 typealias라는 키워드를 사용하면 됩니다. 앞으로 배울 고차 함수와 람다식에서도 많이 사용합니다.
typealias TextName = String
val name: TextName = "Sohee"
사용법은 차후에 활용 부분에서 살펴보겠습니다.
'책 > Do it! 코틀린 프로그래밍' 카테고리의 다른 글
| 02 변수와 자료형, 연산자 (02-3 자료형 검사하고 변환하기) (0) | 2023.01.30 |
|---|---|
| 02 변수와 자료형, 연산자 (02-1 코틀린 패키지) (0) | 2022.03.23 |
| 01 코틀린 시작하기 (0) | 2022.03.17 |