자료형은 변수에 입력한 자료가 문자이냐, 정수이냐, 실수이냐에 따라 달라진다.
1, 2, 3과 같은 정수에서는 Int, "Hello"와 같은 경우 문자열, 1.2, 3.6 과 같이 실수형인 경우 Float, Double 등이 있다.
변수를 선언할 때에는 두가지 방법이 있다. C나 C++에서는
#include<stdio.h> // C++인 경우 #include<iostream>
// using namespace std;
int main() {
int a;
float b;
double c;
char str[10];
return 0;
}
위와 같이 선언하지만 Kotlin에서는
fun main() {
val a:Int = 4
val b:Float = 1.5F
val c:Double = 2.6
val str:String = "Hello"
var d:Int = 4
var e:Float = 1.5F
var f:Double = 2.6
var string:String = "Hello"
}
위와 같이 선언한다. val 혹은 var 과 같은 선언 키워드를 입력해주고, 뒤에 앞으로 사용할 변수이름을 넣어준다.
그리고 콜론 뒤에 자료형을 넣어주고 초기 값을 설정해주면 된다.
즉, 선언키워드 변수이름: 자료형 = 초기값
형태로 선언해주면 되는 것이다.
여기서 하나 의문이 들수도 있다. val 과 var은 무슨차인가??
val은 value의 약자로 불변형 변수를 선언하는 것이고, var는 variable의 약자로 가변형 변수를 선언할 때에 사용한다.
하지만 꼭 위와 같이 선언하지 않아도 된다. 변수를 선언하는 방식은 다양하게 존재한다.
fun main() {
val username = "JJangGu"
val num = 10
}
위와 같이 선언해도 무방하다. 여기서 username과 num은 대입된 정보의 자료형을 추론하여 결정한다.
참고로 변수 이름에 대고 Ctrl + Shift + p 를 누르면 자료형을 확인해 볼 수 있다.

변수를 선언하고 변수 이름을 설정해줄 때 몇 가지 주의해야할 사항들이 있다.
- 예약된 키워드(while, for, if 등..)을 사용하면 안된다.
- 의미가 담긴 이름으로 짓기.
- 변수명이 길다면 카멜 표기법을 사용하기.
카멜표기법은 단어가 변경되는 시점에서 대문자로 표현해주는 표기법으로 일반 변수나 함수이름 등에 적용할 수 있다.
예를 들어 numberOfBooks나 myFirstNumber과 같이 표현해주면 된다.
ps) 참고로 파스칼 표기법도 존재한다. 파스칼 표기법은 클래스 명이나 인터페이스 등에서 적용할 수 있다. 파스칼 표기법은 AnimalCategory나 CarEngine처럼 카멜표기법과 유사하지만 변수 이름의 맨 앞글자를 대문자로 표현해 주었다는 점에서 차이점이 있다.
정수 자료형에서 음수표현이 가능한 자료형은 다음과 같다.
자료형 | 크기 | 값의 범위 |
Long | 8byte(64bit) | -2^63~2^63-1 |
Int | 4byte(32bit) | -2^31~2^31-1 |
Short | 2byte(16bit) | -32,768~32,767(-2^15~) |
Byte | 1byte(8bit) | -128~127(s2^7~) |
또 음수표현이 불가능한 자료형은 다음과 같다.
자료형 | 크기 | 값의 범위 |
ULong | 8byte(64bit) | 0~2^64-1 |
UInt | 4byte(32bit) | 0~2^32-1 |
UShort | 2byte(16bit) | 0~2^16-1(0~65535) |
UByte | 1byte(8bit) | 0~2^8-1(0~255) |
추가로 실수 자료형의 크기와 값의 범위는 다음과 같다.
자료형 | 크기 | 값의 범위 |
Double | 8Byte(64bit) | 약4.9E-324~1.7E+308 |
Float | 4Byte(32bit) | 약1.4E-45~3.4E+38 |
자료형은 다음과 같이 사용할 수 있다.
- 자료형 생략
- val num = 127 -> int형으로 추론
- val num = -32768 -> int형으로 추론
- 접미사, 접두사 사용
- val num = 123 -> int형으로 추론
- val num = 123L -> 접미사 L을 통해 Long형으로 추론
- val num = 0x0F -> 접두사 0x를 통해 16진법으로 표현된 int형으로 추론(0F = 0000 1111 = 15)
- val num = 0b00001011 -> 접두사 0b를 통해 2진법으로 표현된 int형으로 추론(0000 1011 = 11)
- 작은 값의 사용
- val num:Byte = 127 -> 명시적으로 자료형을 byte로 지정
- val num = 32767 -> 명시적으로 자료형을 지정하지 않으면 short형 범위의 값도 int형으로 추론
- val num:Short = 32767 -> 명시적으로 자료형을 short형으로 지정
- 부호가 없는 정수 자료형
- val num:UInt = 153u
- val num:UShort = 65535u
- val num:Ulong = 46322342uL
- val num:UByte = 255u
- 실수 자료형
- val num = 3.14 -> 기본적으로 double형으로 추론
- val num = 3.14F -> 식별자 F에 의해 float형으로 추론
- 논리 자료형 (True or False)
- val isTrue = true
- val isOpen: Boolean -> 선언만 한 경우에는 자료형을 반드시 명시해 주어야 한다.
- 문자 자료형
- val ch = 'c' -> char로 추론
- val ch = :Char -> 선언만 한 경우에는 자료형을 반드시 명시해 주어야 한다.
ps) 공부를 하다 보면 자릿수가 큰 수를 다룰 경우도 있을 텐데 쉽게 쓰고 읽는 방법이 있다. 그것은 바로 읽기 쉽게 4자리 마다 언더바를 이용해서 자릿수를 구분해주는 것이다.
- val num = 1_0000_0000
- val num = 1234_1234_1234_1234
- val num = 0xAB_CD_EF_12
- val num = 0b1101_0010
이번에는 문자열에 대해서 다뤄보고자 한다. 문자열은 String으로 선언된다.
fun main() {
var str1:String = "Hello"
var str2 = "world"
var str3 = "Hello"
}
위와 같이 문자열을 선언해줄 수 있다. 이 때 동적 공간안에 String Pool이라는 공간에 선언한 문자열이 들어가게 되는데 일단 선언하고 이 공간에 들어가게 되면 값을 변경할 수 있는 var 로 선언했을 지라도 값을 변경할 수가 없게 된다.
즉, var로 선언된 변수의 참조 주소는 바꿀 수 있지만 일단 선언되어 생성된 메모리 공간에 들어간 값은 변경할 수 없다.
코틀린에서는 문자열을 출력할 때에 $ 기호를 이용하여 출력한다.
fun main() {
var a = 1
val s1 = "a is $a"
var b = 1
val str1 = "b = $b"
val str2 = "b = ${b + 2}"
println("s1: $s1")
println("str1: \"$str1\", str2:\"$str2\"")
}
결과:
s1: a is 1
str1: "b = 1", str2:"b = 3"
문자열에서 사용할 수 있는 비교 연산자가 있다. == 와 === 인데, == 는 단순히 값만 비교를 하고, === 는 값과 함께 참조까지 비교한다. 자바에서는 == 으로 참조까지 비교할 수 있다.
fun main(){
var str1:String = "Hello"
var str2 = "world"
var str3 = "Hello"
println("str1 === str2: ${str1 === str2}") // false
println("str1 === str3: ${str1 === str3}") // true
}
위에서 str1과 str3는 변수명이 다를 지라도 같은 값을 가지고 있기 때문에 같은 참조를 가리킨다.
자료형은 변수에 입력한 자료가 문자이냐, 정수이냐, 실수이냐에 따라 달라진다.
1, 2, 3과 같은 정수에서는 Int, "Hello"와 같은 경우 문자열, 1.2, 3.6 과 같이 실수형인 경우 Float, Double 등이 있다.
변수를 선언할 때에는 두가지 방법이 있다. C나 C++에서는
#include<stdio.h> // C++인 경우 #include<iostream>
// using namespace std;
int main() {
int a;
float b;
double c;
char str[10];
return 0;
}
위와 같이 선언하지만 Kotlin에서는
fun main() {
val a:Int = 4
val b:Float = 1.5F
val c:Double = 2.6
val str:String = "Hello"
var d:Int = 4
var e:Float = 1.5F
var f:Double = 2.6
var string:String = "Hello"
}
위와 같이 선언한다. val 혹은 var 과 같은 선언 키워드를 입력해주고, 뒤에 앞으로 사용할 변수이름을 넣어준다.
그리고 콜론 뒤에 자료형을 넣어주고 초기 값을 설정해주면 된다.
즉, 선언키워드 변수이름: 자료형 = 초기값
형태로 선언해주면 되는 것이다.
여기서 하나 의문이 들수도 있다. val 과 var은 무슨차인가??
val은 value의 약자로 불변형 변수를 선언하는 것이고, var는 variable의 약자로 가변형 변수를 선언할 때에 사용한다.
하지만 꼭 위와 같이 선언하지 않아도 된다. 변수를 선언하는 방식은 다양하게 존재한다.
fun main() {
val username = "JJangGu"
val num = 10
}
위와 같이 선언해도 무방하다. 여기서 username과 num은 대입된 정보의 자료형을 추론하여 결정한다.
참고로 변수 이름에 대고 Ctrl + Shift + p 를 누르면 자료형을 확인해 볼 수 있다.

변수를 선언하고 변수 이름을 설정해줄 때 몇 가지 주의해야할 사항들이 있다.
- 예약된 키워드(while, for, if 등..)을 사용하면 안된다.
- 의미가 담긴 이름으로 짓기.
- 변수명이 길다면 카멜 표기법을 사용하기.
카멜표기법은 단어가 변경되는 시점에서 대문자로 표현해주는 표기법으로 일반 변수나 함수이름 등에 적용할 수 있다.
예를 들어 numberOfBooks나 myFirstNumber과 같이 표현해주면 된다.
ps) 참고로 파스칼 표기법도 존재한다. 파스칼 표기법은 클래스 명이나 인터페이스 등에서 적용할 수 있다. 파스칼 표기법은 AnimalCategory나 CarEngine처럼 카멜표기법과 유사하지만 변수 이름의 맨 앞글자를 대문자로 표현해 주었다는 점에서 차이점이 있다.
정수 자료형에서 음수표현이 가능한 자료형은 다음과 같다.
자료형 | 크기 | 값의 범위 |
Long | 8byte(64bit) | -2^63~2^63-1 |
Int | 4byte(32bit) | -2^31~2^31-1 |
Short | 2byte(16bit) | -32,768~32,767(-2^15~) |
Byte | 1byte(8bit) | -128~127(s2^7~) |
또 음수표현이 불가능한 자료형은 다음과 같다.
자료형 | 크기 | 값의 범위 |
ULong | 8byte(64bit) | 0~2^64-1 |
UInt | 4byte(32bit) | 0~2^32-1 |
UShort | 2byte(16bit) | 0~2^16-1(0~65535) |
UByte | 1byte(8bit) | 0~2^8-1(0~255) |
추가로 실수 자료형의 크기와 값의 범위는 다음과 같다.
자료형 | 크기 | 값의 범위 |
Double | 8Byte(64bit) | 약4.9E-324~1.7E+308 |
Float | 4Byte(32bit) | 약1.4E-45~3.4E+38 |
자료형은 다음과 같이 사용할 수 있다.
- 자료형 생략
- val num = 127 -> int형으로 추론
- val num = -32768 -> int형으로 추론
- 접미사, 접두사 사용
- val num = 123 -> int형으로 추론
- val num = 123L -> 접미사 L을 통해 Long형으로 추론
- val num = 0x0F -> 접두사 0x를 통해 16진법으로 표현된 int형으로 추론(0F = 0000 1111 = 15)
- val num = 0b00001011 -> 접두사 0b를 통해 2진법으로 표현된 int형으로 추론(0000 1011 = 11)
- 작은 값의 사용
- val num:Byte = 127 -> 명시적으로 자료형을 byte로 지정
- val num = 32767 -> 명시적으로 자료형을 지정하지 않으면 short형 범위의 값도 int형으로 추론
- val num:Short = 32767 -> 명시적으로 자료형을 short형으로 지정
- 부호가 없는 정수 자료형
- val num:UInt = 153u
- val num:UShort = 65535u
- val num:Ulong = 46322342uL
- val num:UByte = 255u
- 실수 자료형
- val num = 3.14 -> 기본적으로 double형으로 추론
- val num = 3.14F -> 식별자 F에 의해 float형으로 추론
- 논리 자료형 (True or False)
- val isTrue = true
- val isOpen: Boolean -> 선언만 한 경우에는 자료형을 반드시 명시해 주어야 한다.
- 문자 자료형
- val ch = 'c' -> char로 추론
- val ch = :Char -> 선언만 한 경우에는 자료형을 반드시 명시해 주어야 한다.
ps) 공부를 하다 보면 자릿수가 큰 수를 다룰 경우도 있을 텐데 쉽게 쓰고 읽는 방법이 있다. 그것은 바로 읽기 쉽게 4자리 마다 언더바를 이용해서 자릿수를 구분해주는 것이다.
- val num = 1_0000_0000
- val num = 1234_1234_1234_1234
- val num = 0xAB_CD_EF_12
- val num = 0b1101_0010
이번에는 문자열에 대해서 다뤄보고자 한다. 문자열은 String으로 선언된다.
fun main() {
var str1:String = "Hello"
var str2 = "world"
var str3 = "Hello"
}
위와 같이 문자열을 선언해줄 수 있다. 이 때 동적 공간안에 String Pool이라는 공간에 선언한 문자열이 들어가게 되는데 일단 선언하고 이 공간에 들어가게 되면 값을 변경할 수 있는 var 로 선언했을 지라도 값을 변경할 수가 없게 된다.
즉, var로 선언된 변수의 참조 주소는 바꿀 수 있지만 일단 선언되어 생성된 메모리 공간에 들어간 값은 변경할 수 없다.
코틀린에서는 문자열을 출력할 때에 $ 기호를 이용하여 출력한다.
fun main() {
var a = 1
val s1 = "a is $a"
var b = 1
val str1 = "b = $b"
val str2 = "b = ${b + 2}"
println("s1: $s1")
println("str1: \"$str1\", str2:\"$str2\"")
}
결과:
s1: a is 1
str1: "b = 1", str2:"b = 3"
문자열에서 사용할 수 있는 비교 연산자가 있다. == 와 === 인데, == 는 단순히 값만 비교를 하고, === 는 값과 함께 참조까지 비교한다. 자바에서는 == 으로 참조까지 비교할 수 있다.
fun main(){
var str1:String = "Hello"
var str2 = "world"
var str3 = "Hello"
println("str1 === str2: ${str1 === str2}") // false
println("str1 === str3: ${str1 === str3}") // true
}
위에서 str1과 str3는 변수명이 다를 지라도 같은 값을 가지고 있기 때문에 같은 참조를 가리킨다.