시작하기에 앞서
- 필요한 기본지식
- IntelliJ IDEA 로 새로운 프로젝트 만들기
- Kotlin REPL코드 실행하는법
- 배울것
- kotlin data types, operators, variables
- booleans와 조건문 동작
- nullable, non-nullable 의 차이
- array, list, loop 동작
Operators / type
- numeric operators
- 코틀린은 다른 언어와 마찬가지로 +, -, *, / 를 사용한다
- Int, Long, Double, Float 등의 숫자 type을 제공한다
- <REPL 예제 실행 결과>
- 정수형, 실수형 타입 간 교차 실행 해본다
- number 함수
kotlin은 숫자를 primitive(기본 형, 기본 type)으로 제공하지만, 객체와 같이 함수를 호출 할 수 있다
boxing
object 로 감싸는것
kotlin에서 자동으로 이루어진다
꼭필요한 경우가 아니면 메모리 효율 측면에서 불리하기때문에 사용을 권장하지 않는다
- java에서는 primitive type / object type 모두 지원하는데 primitive type은 stack에 바로 저장이 가능하기 떄문에 heap을 할당하지 않아도 된다. 하지만 Collection을 사용하거나 제너릭으로 타입을 처리할때 등 auto-boxing된다
- kotlin에서는 primitive type이 없다 .
- kotlin의 성능상 의문은 잘 설명되어있는 블로그 글을 인용한다
코틀린에는 primitiveType은 없지만, 바이트코드로 변환 시 가능한 한 primitiveType으로 바꿔주어 연산 시 성능 문제는 발생하지 않을 것으로 보이며 Collection은 마찬가지로 autoBoxing 처리를 하고 있다.
출처: https://meteorkor.tistory.com/36 [Meteor]
2. type
코틀린은 서로다른 타입을 자동으로 형변환 하지 않는다. 오류를 야기할수 있기 때문
명시적으로 casting이 필요함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
val b2: Byte = 1
val i4: Int = b2.toInt() // OK!
println(i4)
⇒ 1
val i5: String = b2.toString()
println(i5)
⇒ 1
val i6: Double = b2.toDouble()
println(i6)
⇒ 1.0
|
cs |
3. variable types 변수 선언 타입
코틀린은 두가지 변수 선언 타입이 존재한다 .
- val : 한번 선언한 후 값을 바꿀수 없다. 값을 변경하려고하면 오류발생
- var: 초기화 후 값을 변경할 수 있다 .
- 코틀린은 타입을 명시하지 않아도 할당된 값에따라 자동으로 타입을 유추한다
- 한번 타입이 결정되면 다른 타입의 값을 할당할 수 없다
4. String
- '+' - 연산을 통해 string을 결합할 수 있다
- $, ${} - 구문을 통해 변수 및 구문을 string으로 결할 수 있다.
1
2
3
4
|
val numberOfFish = 5
val numberOfPlants = 12
"I have $numberOfFish fish" + " and $numberOfPlants plants"
"I have ${numberOfFish + numberOfPlants} fish and plants"
|
cs |
조건문, Booleans
- Boolean operators
- <, ==, >, !=, <=, >=
1. 기본적인 if문은 다른 언어와 동일하다
2. range를 이용한 if문
- <, ==, >, !=, <=, >=
1
2
3
4
|
val grade = 55
if (grade in 0..100) {
print(grade)
}
|
cs |
3. when을 이용한 조건문
기존에 if/ else if/ else 문을 사용하던것을 when으로 대체할 수 있다.
다른 언어의 switch 문을 대체 할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
|
when (numberOfFish) {
0 -> println("Empty tank")
in 1..39 -> println("Got fish!")
else -> println("That's a lot of fish!")
}
when {
(numberOfFish == 0) -> println("Empty tank")
(numberOfFish in 1..39) -> println("Got fish!")
else -> println("That's a lot of fish!")
}
|
cs |
Nullability
- 변수는 기본적으로 non-null이다
1
|
var rocks: Int = null // error: null can not be a value of a non-null type Int
|
cs |
2. ? operator를 사용하면 nullable이 된다.
1
|
var marbles: Int? = null
|
cs |
3. list 와 같은 복잡한 데이터 유형인 경우
- list 자체가 null 이 되도록 할수있다
- list 자체가 null 이 가능하지만 list내부 element는 null이 불가능 하도록 할수있다
- list 자체, 내부 element 둘다 null 이 가능하게 할 수 있다.
4. ?, ?:
- ? 연산을 이용하면 if, else문을 줄이고 null 체크가 가능고, null이 아닌경우에 해당하는 구문을 실행할수있다
1
2
3
4
5
6
7
8
9
|
// using if/else
var fishFoodTreats = 6
if (fishFoodTreats != null) {
fishFoodTreats = fishFoodTreats.dec()
}
// using the ? operator
var fishFoodTreats = 6
fishFoodTreats = fishFoodTreats?.dec()
|
cs |
- ?: 엘비스 연산자는 ?연산과 연달아(chain) null 체크가 가능하며 null 인경우에 해당하는 구문을 실행 할 수 있다.
1
|
fishFoodTreats = fishFoodTreats?.dec() ?: 0
|
cs |
5. !! (bang bang / double-bang) operator
- 강제 non-null 변환 연산자
- 강제로 변환했는데 null인경우 exception이 발생된다
- 추천하지 않으나 기존 java 코드의 사용으로 사용이 불가피한 경우만 사용..
1
|
val len = s!!.length // throws NullPointerException if s is null
|
cs |
'AndroidCodelabs' 카테고리의 다른 글
Android Room with a View - Kotlin (0) | 2022.02.18 |
---|---|
[Kotlin Bootcamp for Programmers] - 1. get Started 정리 (0) | 2021.07.18 |