1️⃣ 변수와 상수
var는 변수 선언, val는 상수 선언에 이용된다. val는 Java의 final과 동일하여 선언 시에만 값 초기화가 가능하다.
또한 타입 추론또한 지원하기 때문에 자료형을 명시하지 않아도 초기화하는 값으로 타입이 지정된다.
var a: Int
a = 20
var b: Int = 123
b = 15
val a: Int = 150
📌 null값 사용하기
코틀린에서 null값을 사용하기 위해서는 타입 뒤에 ?를 붙여줘야 한다. Java에서는 NPE로 귀찮은 일이 많았는데 코틀린에서 ?를 지원하기 때문에 좀더 쉽게 null 처리를 할 수 있다.
var a: Int? = 10
a = null // 오류 발생
var b: Int? = null // 정상
또한 Swift에서와 같이 Chaining을 제공하는데, 사실 ? 문법은 이미 Java 8에서 등장한 Optional 객체를 요약한 것이라고 한다.
아래 예시는 str이 null이 아닐 때에만 toUppserCase()를 실행하는 예시이다.
val str = "abc"
println(str?.toUpperCase())
이는 Java에서 아래와 같다.
if(str!=null) {
return str.toUpperCase()
} else {
return null
}
그리고 null인 경우에 대비하여 값을 할당할 수 있는 엘비스 연산자가 존재한다.
val a: String? = null
println(a?.length: 0)
추가로, 강제로 null이 아님을 명시할 수도 있다. 물론 null인 경우 NPE가 발생한다.
var a: String? = null
var b = a!!
만약 null이 아닌 경우에만 특정 구문을 실행하고 싶다면 let을 이용하면 된다.
var a: String? = "안녕하세요"
a?.let { println(it) }
2️⃣ 함수
가장 기본적인 함수의 형태는 아래와 같다.
fun add(a: Int, b: Int): Int {
return a + b
}
Java와 비교했을 때, 파라미터의 이름과 타입 위치가 바뀌었고, 콜론이 추가되었으며, return 타입을 뒤쪽에 명시해주는 것을 볼 수 있따.
또한 함수의 축약도 가능하다.
fun add(a: Int, b: Int) = a + b
3️⃣ 자료형(type)
코틀린의 기본적인 자료형은 아래와 같다.
정수 : Byte, Short, Int, Long / UByte, UShort, UInt, ULong
실수 : Float, Double
논리 : Boolean
문자 : Char
문자열 : String
앞서 말했듯 코틀린은 타입 추론을 통해 변수의 자료형을 부여한다.
val a: Byte = 123 // Byte형을 지정해서 선언
val b: Int = 123 // 기본적으로 Int형으로 추론
val c = 123L // Long형 추론
val d = 0X0F // 16진수형 Int형 추론
또한 언더스코어(_)를 이용하여 가독성을 높일 수 있다. 자릿수를 구분하는 용도로 사용되지만 아무 위치에나 추가할 수 있다. 값에는 변화가 없다.
val a = 1_234_567
val b = 123_4_56_7
여러가지 자료형들의 예시
val a:Float = 3.14e-2 // 0.0314
val b = 3.14e2 // 314
val c: Boolean = true
val d: Char = 'A'
val e: String = "Hello"
4️⃣ 반복문
📌 for문
기본적인 반복문의 형태는 아래와 같다.
// 기본적인 형태
for(i in 1..5){
println(i)
}
// 역순으로 반복
for(i in 5 downTo 1){
println(i)
}
// 일정 간격으로 반복
for(i in 1..5 step 2){
println(i)
}
// 끝 번호를 제외하고 반복
for(i in 1 until 5){
println(i)
}
ArrayList의 경우에는 아래와 같이 사용할 수 있다.
var arrayList: ArrayList<String> = ArrayList<>()
for(str in arrayList){
println(str)
}
📌 While문
while문도 다른 언어와 마찬가지로 사용할 수 있다.
while(i < 3){
println(i)
i++
}
📌 흐름제어
break와 continue도 다른 언어와 동일하다.
for(i in 1..5){
if(i==1) continue
}
for(i in 1..5){
if(i==1) break
}
5️⃣ 조건문
📌 if문
if문의 경우 다른 언어들과 동일하다.
var a = 5
if(a > 3){
println(a)
} else {
print("exit")
}
📌 When문
when문은 Switch를 대신하여 사용할 수 있다. 눈여겨 볼 부분은 else가 default의 역할을 한다는 것이다.
whenPrint(2)
fun whenPrint(a: Any){
when(a) {
5 -> print(a)
"awd" -> print(a)
else -> print(a)
}
}
또한 값을 return할 때에도 when문을 사용할 수 있다.
값을 return할 때에는 모든 케이스를 정의해줘야 한다.
var input: Boolean? = false
val a = when(input) {
true -> 5
false -> 0
null -> 3
}
또한 When문에서는 is문을 통한 타입 비교나 범위를 통해 조건을 설정해줄 수 있다.
var score = 0
val grade = when(score) {
in 90 .. 100 -> "A"
in 80 until 90 -> "B"
else -> "F"
}
6️⃣ 배열
코틀린의 배열은 Array의 타입으로 구성된다.
아래와 같이 arrayOf 메서드로 특정 원소를 가지는 배열을 생성할 수 있으며, 타입은 생략 가능하다.
val arr: Array<Int> = arrayOf(1,2,3)
val arr2: Array<String> = arrayOf("안","녕")
val arr = arrayOf(1,2,3)
val arr2 = arrayOf("test","test2")
배열을 생성할 때 초기화되는 값이 필요하다면 아래와 같이 할 수 있다.
val arr: Array<Boolean> = Array(3) { false }
만약 Null 배열을 선언하고 싶으면 아래와 같이 arrayOfNulls를 이용하면 된다.
val arr = arrayOfNulls<Int>(5)
2차원 배열은 다음의 방식으로 만들 수 있다.
var arr = Array<Array<Int>>(5){ Array<Int>(5){ 0 } }
var arr1 = Array(5, { Array(5, { 0 }) })
var arr2 = arrayOf(arrayOf(1, 2, 3), arrayOf(4, 5, 6))
참조
'Java & Kotlin' 카테고리의 다른 글
[Java] Java의 Collection FrameWork, List - Map - Set, 간단히 보기! (0) | 2022.05.24 |
---|---|
[Java] Comparable과 Comparator : 비교를 위한 인터페이스 (2) | 2022.04.14 |
[Java] int, char, String 사이의 형 변환 방법 정리 (0) | 2022.03.24 |
[Java] Java의 난수 생성법 2가지 (0) | 2022.03.24 |