안녕하세요
코틀린의 <변수와 자료형> 에 대해 알아보겠습니다
대부분 언어에서 가장 첫번째로 배우는 것이 변수인 것 같은데요,
코틀린은 변수와 자료형을 어떻게 사용하는지 알아보도록 하겠습니다!
시작 전에 간단하게 코틀린의 기본적인 문법에 대해 알아보자면
1. 코틀린은 세미콜론 ';'을 사용하지 않는다
코틀린은 언어 차원에서 구문이 끝나는지 알아서 판단하기 때문에
다른 언어들과 달리 구문이 끝나는 부분에서 세미콜론을 붙이지 않습니다
fun main() {
println("Hello Kotlin")
}
이렇게 작성해주면 알아서 구문이 끝나는 것을 판단해줍니다!
2. 클래스 이름은 파스칼 표기법 사용 / 함수나 변수 이름은 카멜 표기법
클래스 이름은 파스칼 표기법일 사용하여 모든 단어를 대문자로 시작하는데요,
예시로 ClassName, KotlinClass
이런식으로 사용할 수 있습니다!
그리고 함수나 변수 이름은 카멜 표기법을 사용하여 첫 단어만 소문자로 시작합니다
예시로 functionName, onCreateView
이런식으로 사용됩니다
자 이제 본격적으로 변수의 선언법부터 알아보겠습니다
<변수의 선언>
코틀린은 var, val 이 두가지로 변수를 선언합니다
그렇다면 var과 val은 어떤 차이점이 있을까요?
- var : 언제든지 읽기 쓰기가 가능하고, 가변 변수(Mutable)로 변수(variable)의 약자
- val : 선언시에만 초기화가 가능하고, 중간에 값을 변경할 수 없음
그리고 변수는 선언 위치에 따라 두 가지 이름으로 불리는데요,
클래스에 선언될 경우 Property(속성),
이 외의 Scope 내에 선언된 변수는 Local Variable(로컬 변수)
라고 불립니다
변수 선언 시, 코틀린은 고전적인 언어들과 다른 점이 있는데요
바로 '변수 선언 시 무조건 초기화를 해주어야 한다는 것' 입니다
고전적인 언어들은 변수가 선언된 후 초기화 되지 않으면 기본값으로 초기화 되거나
값이 할당되지 않았다는 표시로 null 값을 가지게 되지만
코틀린은 기본 변수에서 null을 허용하지 않으며 또한 변수에 값을 할당하지 않은 채로 사용하면 문법 에러를 표시하고
컴파일을 막아주므로 의도치 않은 동작이나 null pointer exception 등을 원천적으로 차단해 준다는 장점이 있습니다
변수에 값을 할당하는 것은 반드시 선언 시에 할 필요는 없으며 변수를 참조하여 사용하기 전까지만 해주면 됩니다!
null을 허용하지 않는 변수
fun main() {
var a: Int = 123
println(a)
}
그런데 프로그램에 따라서는 변수에 값이 할당되지 않았다는 것을 하나의 정보로 사용하는 경우도 있습니다
이 경우에는 변수 선언 시 자료형 뒤에 물음표를 붙이면 null을 허용하는 nullable 변수로 선언해 줄 수 있습니다
nullable 변수는 값이 null인 상태로 연산할 시 *null pointer exception이 발생할 수 있으므로
꼭 필요한 경우에 한해 주의해서 사용해야 합니다
*null pointer exception이란?
객체에 값이 할당되지 않았을 때 (null일 경우) 해당 값을 호출하면 발생하는 에러
null을 허용하는 변수
fun main() {
var a: Int? = null
}
위 코드처럼 null을 허용한 변수를 사용할 때는 ?. 을 이용하여 안전한 호출(safe call)을 해주어야 합니다
안전한 호출은 nullable한 변수를 검사하면 null pointer exception을 호출하는 것 대신 그냥 null을 출력하는 방식입니다
안전한 호출 (safe call)
var a: String? = null
var len = a?.length
println(len)
// 출력: null
이 외에도 엘비스 연산자(?:)와 non-null 단정자(!!.)가 있는데요
엘비스 연산자는 변수가 null인지 아닌지를 검사하고 변수가 null이 아니라면 왼쪽 식을 그대로 실행하고 null이라면 오른쪽 식을 실행합니다
엘비스 연산자 (?:)
var a: String? = null
var len = a?.length?:-1
println(len)
// 출력: -1
그리고 non-null 단정자는 변수에 할당된 값이 null이 아니라고 단정하고 null 검사없이 컴파일을 진행합니다
하지만 이 경우 변수에 null이 할당되었다면 null pointer exception이 발생할 수도 있습니다
non-null 단정자 (!!.)
var a: String? = null
var len = a!!.length
println(len)
// 출력: null pointer exception 발생
그럼 변수에서 사용할 수 있도록 코틀린에서 제공하는 자료형들을 보겠습니다
<기본 자료형 primitive type>
기본 자료형은 자바와의 호환을 위해 자바와 거의 동일합니다
숫자형으로는
정수형인 Byte(8bits), Short(16bits), Int(32bits), Long(64bits) 이 있고,
실수형인 Float(32bits), Double(64bits)가 있어 사용하고자 하는 숫자에 따라 알맞은 자료형을 사용하시면 됩니다
- 정수형의 리터럴
*리터럴: 코드 내에 값을 표기하는 것
정수형 데이터를 직접 코드에서 표기할 때는 10진수, 16진수, 2진수로 숫자를 표기할 수 있습니다
(코틀린은 8진수의 표기는 지원하지 않습니다)
32비트 이내의 10진수가 기본형으로 숫자만 표시하면 되며
64비트인 Long 타입의 10진수는 숫자 뒤에 L을 붙여 더 큰 메모리를 사용하는 정수임을 표시해야 합니다
16진수의 경우 '0x'를 앞에 붙이면 되고,
2진수의 경우 '0b'를 앞에 붙이면 됩니다
var intValue:Int = 1234
var longValue:Long = 1234L
var intValyeByHex:Int = 0x1af // 16진수
var intValueByBin:Int = 0b10110110 // 2진수
- 실수형의 리터럴
실수의 경우 기본이 Double형이며, 소수점을 포함하여 숫자를 쓰거나 필요시 지수 표기법을 추가하면 됩니다
Double이 아닌 Float형의 경우 뒤에 소문자 또는 대문자 f를 붙여주면 16비트의 float형으로 취급합니다
var doubleValue:Double = 123.5
var doubleValueWithExp:Double = 123.5e10 // 지수 표기법 사용
var floatValue:Float = 123.5f
문자형
문자 1개를 넣을 수 있는 Char입니다
코틀린은 내부적으로 문자열을 유니코드 인코딩 중에 한 방식인 *UTF-16 BE로 관리합니다
따라서 글자 하나하나가 2bytes(16bits)의 메모리 공간을 사용합니다
*UTF-16이란?
UTF란 유니코드 문자를 인코딩하는 방식을 나타내며 몇 bit를 사용하여 1개의 Index를 표현할 것인가를 듯합니다.
즉, UTF-16은 16bit를 사용하여 1개의 Index를 표현합니다
- 문자형의 리터럴
문자 하나를 작은 따옴표(')로 감싸서 표기합니다
또한 아래 사진과 같은 특수문자도 지원합니다
var charValue:Char = 'a'
var koreanCharValue:Char = '가'

논리형
논리형인 Boolean은 참 또는 거짓인지 판별하는데 사용되는데요, true인지 false인지 둘 중에 하나를 저장하는 값입니다
- Boolean의 리터럴
직접 true 혹은 false라고 표기해주면 됩니다
var booleanValue:Boolean = true
이 외에 기본적으로 문자열을 사용할 수 있습니다
- 문자열의 리터럴
문자열 변수는 코드에서 표기할 때 따옴표(")내에 문자열을 써주시면 됩니다
또한 여러 줄로 된 문자열을 적을 때는 따옴표 3개를 사용하면 (""") 줄바꿈이나 특수문자까지 그대로 문자열로 사용할 수 있습니다
val stringValue = "one line string test"
var multiLineStringValue = """multiline
string
test"""""
코틀린 첫번째 포스팅 <변수와 자료형>은 여기서 마무리하도록 하겠습니다
다음 글에서 또 뵙겠습니다! :)
*위 글은 유튜브 테크과학! DeMo님의 강좌를 참고하여 작성하였습니다
'Kotlin' 카테고리의 다른 글
[Kotlin] 06. 흐름제어와 논리연산자 (0) | 2023.07.17 |
---|---|
[Kotlin] 05. 반복문과 증감연산자 (0) | 2023.07.16 |
[Kotlin] 04. 조건문과 비교연산 (0) | 2023.07.15 |
[Kotlin] 03. 타입추론과 함수 (0) | 2023.07.14 |
[Kotlin] 02. 형변환과 배열 (0) | 2023.07.13 |