728x90
자료형과 변수
자료형과 변수
자료형
- Int
- String
- Float
- ...
변수
- val (Value) : 불변형(Immutable)
- var (Variable) : 가변형(Mutable)
변수의 선언
val | username: | String | = | "Kildong" | |
선언 키워드 | 변수 이름 | 자료형 | 값 |
변수 선언 예
val username = "Kildong" // 자료형을 추론하여 String 으로 결정 var username // 자료형을 지정하지 않은 변수는 사용할 수 없음. val init: Int // 사용 전 혹은 생성자 시점에서 init 변수를 초기화 해야 함. val number = 10 // number 변수는 Int 형으로 추론
여기서 주의할 점은, var username 과 같이 자료형을 지정하지 않은 변수는 사용할 수 없다는 점이다. 다음과 같이 끊어서도 사용할 수도 없다.
var username username = "Kildong" // Compile Error!
변수 이름 생성 규칙
- 변수 이름은 123abc 와 같이 숫자로 시작하면 안 된다.
- 변수 이름에는 while, if 와 같이 코틀린에서 사용되는 키워드는 사용할 수 없다.
- 변수 이름은 의미 있는 단어를 사용하여 만드는 것이 좋다.
- 여러 단어를 사용하여 변수 이름을 지을 경우, 카멜 표기법(Camel Expression)을 사용하라.
변수명
- 일반 변수, 함수명 등은 단봉 낙타와 같은 카멜 표기법을 사용한다.
camelCase numberOfBooks myFirstNumber manyVariableCamelCase myFunction
- 클래스, 인터페이스 등은 쌍봉 낙타 혹은 파스칼 표기법(Pascal Expression)을 사용한다.
AnimalCategory CarEngine
자료형 알아보기
기본형(Primitive Data Type)
- 가공되지 않은 순수한 자료형으로 프로그래밍 언어에 내장
- int, long, float, double 등
참조형(Reference Type)
- 동적 공간에 데이터를 둔 다음 이것을 참조하는 자료형
- Int, Long, Float, Double 등
당연히 기본형이 성능이 더 좋다! 코틀린에서는 참조형만 사용하도록 하고 있는데, 사용 시 컴파일 과정에서 기본형으로 변환된다. 코틀린에서는 참조형을 선언해서 사용하지만, 컴파일 과정을 거치면 기본형 같이 사용한다.
기본형과 참조형의 동작 원리 이해하기
- 자바의 기본형과 참조형의 원리
int a = 77; // 기본형 Person person = new Person(); // 객체 참조형으로, person 객체를 위해 참조 주소(A12)를 가진다.

기본형 자료형은 스택(Stack) 영역에 쌓이게 되고, 참조형 자료형은 힙(Heap) 영역에 쌓이게 된다.
정적 자료형은 스택에, 동적 자료형은 힙에 쌓인다는 것을 기억하자!
- 코틀린에서는 코딩 시 참조형만 사용되며, 코틀린 컴파일러가 자동적으로 최적화한다.
- 컴파일 과정을 거친 후 기본형이 사용된다.
정수 자료형
- 음수가 사용되는 부호 있는 정수 자료형
형식 | 자료형 | 크기 | 값의 범위 |
정수 자료형 | Long | 8 Bytes (64 Bits) | −263~263−1 |
Int | 4 Bytes (32 Bits) | −231~231−1 | |
Short | 2 Bytes (16 Bits) | −215~215−1(−32,768~32,767) | |
Byte | 1 Byte (8 Bits) | −27~27−1(−128~127) |
- 부호 없는 정수 자료형 (1.3버전 실험적)
형식 | 자료형 | 크기 | 값의 범위 |
부호 없는 정수형 |
ULong | 8 Bytes (64 Bits) | 0~264−1 |
UInt | 4 Bytes (32 Bits) | 0~232−1 | |
UShort | 2 Bytes (16 Bits) | 0~216−1(0~65,535) | |
UByte | 1 Byte (8 Bits) | 0~28−1(0~255) |
- 코틀린의 정수 자료형은 부호가 있는 것과 부호가 없는 것으로 나눌 수 있다.
- 숫자 크기에 상관 없이 기본은 모두 Int 형으로 추론된다.
자료형 사용 예
- 자료형 생략
val num05 = 127 // Int 형으로 추론 val num06 = -32768 // Int 형으로 추론 val num07 = 2147483647 // Int 형으로 추론 val num08 = 9223372036854775807 // Long 형으로 추론
- 접미사, 접두사 사용
val exp01 = 123 // Int 형으로 추론 val exp02 = 123L // 접미사 L을 사용해 Long 형으로 추론 val exp03 = 0x0F // 접두사 0x를 사용해 16진 표기가 사용된 Int 형으로 추론 val exp04 = 0b00001011 // 접두사 0b를 사용해 2진 표기가 사용된 Int 형으로 추론
- 작은 값의 사용
val exp08: Byte = 127 // 명시적으로 자료형을 지정 (Byte) val exp09 = 32767 // 명시적으로 자료형을 지정하지 않으면 Short 형 범위의 값도 Int 형으로 추론 val exp10: Short = 32767 // 명시적으로 자료형을 지정 (Short)
- 부호 없는 정수 자료형
val uint: UInt = 153u val ushort: UShort = 65535u val ulong: ULong = 46322342uL val ubyte: UByte = 255u
- 큰 수를 읽기 쉽게 하는 방법 (가독성 향상)
- 읽기 쉽게 하기 위해 언더 스코어(_)를 포함해 표현
val number = 1_000_000 val cardNum = 1234_1234_1234_1234L val hexVal = 0xAB_CD_EF_12 val bytes = 0b1101_0010
실수 자료형
형식 | 자료형 | 크기 | 값의 범위 |
실수형 | Double | 8 Bytes (64 Bits) | 약 4.0E−324~1.7E+308 (IEEE754) |
Float | 4 Bytes (32 Bits) | 약 1.4E−45~3.4E+38 (IEEE754) |
val exp01 = 3.14 // Double 형으로 추론 (기본) val exp02 = 3.14F // 식별자 F에 의해 Float 형으로 추론

- 코틀린은 자료형을 명시하지 않으면 Double 형으로 추론한다.
- 만약 Float 형으로 지정하고 싶으면 간략하게 식별자 F를 실수 옆에 붙이는 방법을 사용하면 된다.
var doubleNum = 0.03 // Double 형으로 추론 var floatNum = 0.03F // Float 형으로 추론
- 실수의 개수는 무한하지만 메모리 공간은 유한하다. 그래서 메모리에 모든 실수를 표현하기는 어렵다.
- 이러한 메모리의 단점을 극복하기 위해 실수를 표현할 때 부동 소수점(Floating-Point) 방식을 사용한다.
- 부동 소수점 방식은 실수를 가수, 지수로 나누어 표현하는 방식이다.
- 3.14×1016=3.14E+16
- 부동 소수점 방식은 실수를 가수, 지수로 나누어 표현하는 방식이다.
val exp03 = 3.14E-2 // 왼쪽으로 소수점 2칸 이동, 0.0314 val exp04 = 3.14e2 // 오른쪽으로 소수점 2칸 이동, 314
- 컴퓨터는 음수를 표현하기 위해 2의 보수라는 개념을 사용하고 있다.
- 컴퓨터의 연산기는 덧셈 기능의 회로만 있으며, 덧셈 기능을 뺄셈으로 구현하기 위해서 만들어진 규칙이다.
부동 소수점의 이해
- 32비트와 64비트의 부동 소수점 표현

- Float 형
- 1 Bit : 부호
- 8 Bits : 지수
- 23 Bits : 가수
- Double 형
- 1 Bit : 부호
- 11 Bits : 지수
- 52 Bits : 가수
부동 소수점의 표현
- −12.375(10) 의 표현
- 음수 : −
- 127 (bias) 기준으로 구분
- 절댓값 : 12.375
- 1100.0112
- 1.100011×23
- 정수부의 1 생략
- 100011을 가수부에 표현
- 23 은 진수부에 다음과 같이 표현한다.
- 127(bias)+3=130(10)=10000010
- 음수 : −
소수를 이진법으로 나타내는 방법은 다음과 같다.참고 사이트 : https://woo-dev.tistory.com/93
IEEE 방식의 부동 소수점 제한
- 공간 제약에 따라 부동 소수점 연산의 단점이 존재한다.
fun main() { var num: Double = 0.1 for (x in 0..999) { num += 0.1 } println(num) // 100.0.9999999999859 }
0.1을 1000번 더하면 100이 나와야 하지만, IEEE 방식의 부동 소수점 방식으로 계산을 할 경우 정확하지 않은 결과값이 출력된다.
정수 자료형과 실수 자료형의 최솟값과 최댓값 출력하기
- MIN_VALUE 또는 MAX_VALUE 자료형 요소를 이용하여 자료형의 최솟값과 최댓값을 확인할 수 있다.
fun main() { println("Byte min: " + Byte.MIN_VALUE + " max: " + Byte.MAX_VALUE) println("Short min: " + Short.MIN_VALUE + " max: " + Short.MAX_VALUE) println("Int min: " + Int.MIN_VALUE + " max: " + Int.MAX_VALUE) println("Long min: " + Long.MIN_VALUE + " max: " + Long.MAX_VALUE) println("Float min: " + Float.MIN_VALUE + " max: " + Float.MAX_VALUE) println("Double min: " + Double.MIN_VALUE + " max: " + Double.MAX_VALUE) }
Byte min: -128 max: 127 Short min: -32768 max: 32767 Int min: -2147483648 max: 2147483647 Long min: -9223372036854775808 max: 9223372036854775807 Float min: 1.4E-45 max: 3.4028235E38 Double min: 4.9E-324 max: 1.7976931348623157E308
2의 보수란?
자료형의 최소 최대
- 음수는 2의 보수 표현을 사용해 연산된다.
- 절댓값의 이진수에 값을 뒤집고 1을 더한다.
- 예) −6(10)
- 6의 2진값 : 00000110(2)
- 값 뒤집기 : 11111001(2)
- 1을 더하기 : 11111010(2)
- 2의 보수를 사용하는 이유?
- 제한된 자료형을 음수/양수로 나누어 최대한 사용하며, 2의 보수는 가산 회로만으로 뺄셈을 표현할 수 있기 때문

그 밖의 자료형
논리 자료형
형식 | 자료형 | 크기 | 값의 범위 |
논리형 | Boolean | 1 Bit | true, false |
val isOpen = true // isOpen은 Boolean으로 추론 val isUploaded: Boolean // 선언만 한 경우 자료형(Boolean) 반드시 명시
문자 자료형
형식 | 자료형 | 크기 | 값의 범위 |
문자 | Char | 2 Bytes (16 Bits) | 0∼216−1 (\u0000 ~ \uFFFF) |
val ch = 'c' // ch는 Char로 추론 val ch2: Char // 선언만 한 경우 자료형(Char) 반드시 명시
문자열 자료형
- String 으로 선언되며 String Pool 이라는 공간에 구성
fun main() { var str1: String = "Hello" var str2 = "World" var str3 = "Hello" println("str1 === str2: ${str1 === str2}") println("str1 === str3: ${str1 === str3}") }
![]() |
- 코틀린에서 == 는 값만 비교하지만, === 는 '참조'까지 비교한다. - 자바는 == 으로 참조까지 비교할 수 있고, === 연산자는 없다. - var로 선언된 str1의 참조 주소는 가변형으로, 바뀔 수 있다. (다른 것 지정 가능) - 다만, 일단 선언돼 생성된 메모리 공간의 Hello 는 변경되지 않는다. (변경 불가능) |
표현식에서 문자열
- 표현식과 $ 기호를 사용하여 문자열 출력하기
var a = 1 var s1 = "a is $a" // String 자료형의 s1을 선언하고 초기화. 변수 a가 사용됨.
- 사용 예제
fun main() { var a = 1 val str1 = "a = $a" val str2 = "a = ${a + 2}" // 문자열에 표현식 사용 println("str1: \"$str1\", str2: \"$str2\"") }
str1: "a = 1", str2: "a = 3"
참고 사이트
코틀린 프로그래밍 기본 1
부스트코스 무료 강의
www.boostcourse.org
728x90
'Programming > Kotlin' 카테고리의 다른 글
[Kotlin] 검사와 자료형 변환 (0) | 2022.09.21 |
---|---|
[Kotlin] 널(Null) (0) | 2022.08.28 |
[Kotlin] InteliJ IDEA 살펴보기 & main() 함수 (0) | 2022.08.26 |
[Kotlin] 자바 JDK 설치하기 / 환경 변수 설정하기 (0) | 2022.08.26 |
[Kotlin] 코틀린의 개요 (0) | 2022.08.24 |
[Kotlin] 코틀린 한 눈에 알아보기 (0) | 2022.08.21 |
보일러플레이트(Boilerplate) (0) | 2021.04.05 |
함수에서 다양한 인자의 개수를 전달받기 (vararg 키워드) (0) | 2021.03.15 |