1. 표현식(Expression)
자바에서는 표현식이 단독으로 오는 것을 허용하지 않기 때문에 53 + 62 - 126과 같은 코드는 오류를 일으키지만 코틀린은 표현식이 단독으로 오는 것을 허용하므로 오류가 발생하지 않는다.
위에서 보이는 피연산자와 연산자로 이루어진 뭉치는 결국 하나의 값으로 수렴하게 되는데 이렇게 하나의 값으로 수렴하는 수식 뭉치를 표현식이라고 한다.
연산자 없이 리터럴 53만 있어도 하나의 표현식이 된다.
2. 변수(Variable)
코틀린은 var와 val 키워드를 사용하여 변수를 선언한다.
var는 변수 선언 후 값을 수정할 수 있고 val는 변수 선언 후 한번 값을 저장하면 값을 수정할 수 없다.
식별자(변수의 이름)는 키워드를 제외한 영문자, 숫자, 언더스코어(_)로만 지을 수 있으며, 숫자는 맨 앞에 올 수 없다.
추가로 코틀린에서는 낙타 표기법을 주로 사용하고 있으며, ;(세미콜론)으로 문장을 마무리 하지 않아도 된다.
fun main(args: Array<String>): Unit
{
// var 변수 키워드
// total 변수 이름(식별자)
// Int 변수의 타입
var total:Int
total = 0
var a:Int = 10+53-7 // 선언과 동시에 초기화
println(a)
var b:Int = 43+75+a
println(b)
total = a + b
println(total)
val x: Int = 10 // 불변 변수
println(x)
}
3. 비트 연산자
코틀린의 비트 연산자는 기호가 아닌 문자로 되어 있다.
fun main(args: Array<String>): Unit
{
println(15 and 7) // Java의 &
println(5 or 2) // Java의 |
println(15 xor 5) // Java의 ^
println(32767.inv()) // Java의 ~32767
println(1 shl 3) // Java의 << 1을 왼쪽으로 3칸 시프트
println(8 shr 1) // Java의 >> 8을 오른쪽으로 1칸 시프트
println(-17 ushr 2) // Java의 >>> 부호를 유지한 채 -17을 오른쪽으로 시프트
}
4. 정수 타입과 실수 타입
숫자 리터럴 안에는 언더스코어(_)를 넣어 숫자를 알아보기 쉽게 표현이 가능하다.
정수 리터럴이 0x로 시작하면 16진수로, 0b로 시작하면 2진수로 인식한다.
fun main(args: Array<String>): Unit
{
val a: Byte = 125
val b: Short = (100 + 200) * 100
// 숫자 리터럴 안에 언더스코어를 넣어 숫자를 좀 더 알아보기 쉽게 표현 가능(위치, 개수는 마음대로)
var c: Int = 12_4354_6538
println(a) // 125
println(b) // 30000
println(c) // 1243546538
// 정수 리터럴이 0x로 시작하면 16진수 인식
// 정수 리터럴이 0b로 시작하면 2진수로 인식
c = 0xFF_88_88
println(c) // 16746632
c = 0b01010010_01100011_01110101_01000101
println(c) // 1382249797
// 정수 리터럴의 값이 Int의 범위를 초과하면 자동으로 Long 타입이 됨
var d: Long = -543_7847_3984_7238_4723
println(d) // 5437847398472384723
// Int보다 작은 범위의 타입의 연산의 결과는 무조건 Int 타입으로 나옴
c = a + b // Byte + Short
d = c + 10L // Int + Long -> Long 타입의 결과
println(c) // 30125
println(d) // 30135
var e: Float = 67.6f
val f: Double = 658.456
// 67.6f + 658.456 계산을 하면 726.056이 됨
// 726.056은 Double 타입으로 Float 타입인 변수 e에 저정할 수 없으므로 Float 타입으로 변환
e = (e + f).toFloat()
println(e) // 726.05597
}
5. 문자 타입과 문자열
문자 한 개를 작은따옴표로 감싸면 그 부분은 Char 타입이 된다.
코틀린에서는 \u 다음 4자리의 16진수를 입력하면 그 번호에 해당하는 문자로 치환하여 보여준다.
fun main(args: Array<String>): Unit
{
var ch: Char = 'A'
println(ch)
// 코틀린에서 \u 다음 4자리의 16진수를 입력하면 그 번호에 해당하는 문자로 치환
ch = '\uAC00'
println(ch)
ch = '한'
println(ch.toInt()) // .code로 사용해도 해당 문자의 유니코드 값을 돌려줌
}
문자열은 문자들을 일렬로 나열한 것을 말하며, String이 문자열을 저장할 수 있는 타입이다.
\n은 줄바꿈을 나타내는 특수문자이며, String 타입의 표현식 우측에 대괄호[]를 적고 그 안에 Int 값을 적으면, 그 번호에 맞는 문자를 Char 타입으로 꺼낼 수 있다.
fun main(args: Array<String>): Unit
{
var str: String = "Hello"
println(str)
str = str + "\nKotlin!"
println(str)
println(str[8]) // String에도 대괄호를 사용하여 원하는 문자를 반환할 수 있음
val num = 10 * 5 + 3
println(str + num)
}
6. 문자열 안에 표현식의 값을 집어넣기
$ 뒤에 변수 이름을 적으면 해당 부분은 변수의 값으로 대체 된다.
변수의 값이 아닌 표현식의 값을 문자열에 포함하고 싶으면 ${표현식}을 문자열 안에 적어야 한다.
fun main(args: Array<String>): Unit
{
val a = 10
val b = 20
// 이렇게 작성해도 컴파일되면 a의 값 + a로 변환됨.
// 사람이 읽고 쓰기 좋게 추가적으로 제공하는 문법을 문법적 설탕이라고 부름
println("a의 값: $a")
println("b의 값: $b")
println("a + b = ${a+b}")
}
7. 타입 별명(Type Alias)
typealias라는 키워드를 사용하면 이미 존재하는 타입에 별명을 붙일 수 있다.
typealias Number = Int
fun main(args: Array<String>): Unit
{
val a: Number = 10
println(a)
}