1. 데이터 타입
- 코틀린에서는 문장의 끝에 세미콜론 (;) 을 붙이지 않는다!
- 코틀린에서는 모든 것이 객체이다.
- 기본 타입: Byte, Short, Int, Long, Float, Double, Char, Boolean, Array, String
- Char: 자바와 다르게 숫자형이 아니여서 'a' 대신 65와 같이 사용이 불가능하다.
- 숫자 값을 저장할 때 underscores (_)를 사용하여 보기 편하게 나타낼 수 있다. ex) $1\_000\_000$
- 작은 타입에서 큰 타입으로 대입이 안된다. 명시적 형변환이 필요하다!
- 산술 연산에서는 묵시적 형변환이 이루어진다.
- 문자열의 비교 시 "==" 으로 사용 가능하다.
2. 변수 및 상수
- 변수: var / 상수: val 로 정의해서 사용한다.
var a: Int = 7 // 변수
val b: String = "greenjoa" // 상수
val a = 100
val b: Long = a // 숫자 타입간 자동 변환 안됨
- 모든 변수는 null을 허용하지 않으므로 객체의 생성과 동시에 초기화해야 한다.
- Null 을 허용하려면 타입에 물음표를 추가해야 한다. -> var a: String? = null
- var 변수 앞에 lateinit 키워드를 붙이면 선언해두고 나중에 초기화할 수 있다.
- val 상수를 늦게 초기화하려면 by lazy 를 통해서 초기화 블록을 생성할 수 있다.
- 변수명 뒤에 "!!" 를 추가하면 null값이 아님을 보증할 수 있다. (아닐 경우 에러가 뜬다.) -> val name2: String = name!!
- 안전한 호출: 변수 뒤에 "?."를 붙여 호출하면 null값이 아닌 경우에만 호출이 된다.
- Null이 아닌 기본 값을 반환하고 싶을 때는 "?:" (Elvis) 연산자를 사용한다.
3. 배열
// 배열 생성
val item:Array<String> = arrayOf("사과", "바나나", "키위")
// Object 타입의 배열
val item:Array<Any> = arrayOf("바나나", 1, false)
// 빈 배열 생성
val arr = arrayOfNulls<Int>(10)
// 배열 값 접근
for (num in items) {
println(num)
}
4. 연산자
- 비트 연산자: and, or, xor, inv, shl, shr, ushr
- in 연산자: 특정 객체가 컬렉션에 저장되어 있는지 확인 (find와 동일)
- 범위(..) 연산자: a..b: a에서 b까지의 범위 값이 생성됨 ex) a[i..j] 처럼 구간 접근 가능
- invoke 연산자: 객체를 함수처럼 호출할 수 있음
- is, !is 연산자: 타입 확인 연산자
5. 입출력
- 출력: println, print 함수 사용. 출력 문자열 내에 "$"는 변수 값 출력
- 입력: String 입력 시 readline 함수 사용 (다른 타입은 형변환 필요함)
- 다른 방법: 자바의 Scanner 객체 사용 -> val reader = Scanner(System.'in') (키보드 좌상단 `)
- 랜덤 클래스: import Java.util.random -> val num = (0..10).random()