추가로, 강제로 null이 아님을 명시할 수도 있다. 물론 null인 경우 NPE가 발생한다.
var a: String? = null
var b = a!!
만약 null이 아닌 경우에만 특정 구문을 실행하고 싶다면 let을 이용하면 된다.
var a: String? = "안녕하세요"
a?.let { println(it) }
함수
가장 기본적인 함수의 형태는 아래와 같다.
fun add(a: Int, b: Int): Int {
return a + b
}
Java와 비교했을 때, 파라미터의 이름과 타입 위치가 바뀌었고, 콜론이 추가되었으며, return 타입을 뒤쪽에 명시해주는 것을 볼 수 있따.
또한 함수의 축약도 가능하다.
func add(a: Int, b: Int) = a + b
자료형(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"
반복문
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
}
조건문
if문
if문의 경우 다른 언어들과 동일하다.
var a = 5
if(a > 3){
println(a)
} else {
print("exit")
}
When문
when문은 Switch를 대신하여 사용할 수 있다. 눈여겨 볼 부분은 else가 default의 역할을 한다는 것이다.
변수와 상수
var는 변수 선언, val는 상수 선언에 이용된다. val는 Java의 final과 동일하여 선언 시에만 값 초기화가 가능하다. 또한 타입 추론또한 지원하기 때문에 자료형을 명시하지 않아도 초기화하는 값으로 타입이 지정된다.
null값 사용하기
코틀린에서 null값을 사용하기 위해서는 타입 뒤에 ?를 붙여줘야 한다. Java에서는 NPE로 귀찮은 일이 많았는데 코틀린에서 ?를 지원하기 때문에 좀더 쉽게 null 처리를 할 수 있다.
또한 Swift에서와 같이 Chaining을 제공하는데, 사실 ? 문법은 이미 Java 8에서 등장한 Optional 객체를 요약한 것이라고 한다. 아래 예시는 str이 null이 아닐 때에만 toUppserCase()를 실행하는 예시이다.
이는 Java에서 아래와 같다.
그리고 null인 경우에 대비하여 값을 할당할 수 있는 엘비스 연산자가 존재한다.
추가로, 강제로 null이 아님을 명시할 수도 있다. 물론 null인 경우 NPE가 발생한다.
만약 null이 아닌 경우에만 특정 구문을 실행하고 싶다면 let을 이용하면 된다.
함수
가장 기본적인 함수의 형태는 아래와 같다.
Java와 비교했을 때, 파라미터의 이름과 타입 위치가 바뀌었고, 콜론이 추가되었으며, return 타입을 뒤쪽에 명시해주는 것을 볼 수 있따.
또한 함수의 축약도 가능하다.
자료형(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형 추론
또한 언더스코어(_)를 이용하여 가독성을 높일 수 있다. 자릿수를 구분하는 용도로 사용되지만 아무 위치에나 추가할 수 있다. 값에는 변화가 없다.
여러가지 자료형들의 예시
반복문
for문
기본적인 반복문의 형태는 아래와 같다.
ArrayList의 경우에는 아래와 같이 사용할 수 있다.
While문
while문도 다른 언어와 마찬가지로 사용할 수 있다.
흐름제어
break와 continue도 다른 언어와 동일하다.
조건문
if문
if문의 경우 다른 언어들과 동일하다.
When문
when문은 Switch를 대신하여 사용할 수 있다. 눈여겨 볼 부분은 else가 default의 역할을 한다는 것이다.
또한 값을 return할 때에도 when문을 사용할 수 있다. 값을 return할 때에는 모든 케이스를 정의해줘야 한다.
또한 When문에서는 is문을 통한 타입 비교나 범위를 통해 조건을 설정해줄 수 있다.
배열
코틀린의 배열은 Array의 타입으로 구성된다.
아래와 같이 arrayOf 메서드로 특정 원소를 가지는 배열을 생성할 수 있으며, 타입은 생략 가능하다.
배열을 생성할 때 초기화되는 값이 필요하다면 아래와 같이 할 수 있다.
만약 Null 배열을 선언하고 싶으면 아래와 같이 arrayOfNulls를 이용하면 된다.
2차원 배열은 다음의 방식으로 만들 수 있다.