패키지 정의
- 파일 최상단에 위치
- 디렉터리와 패키지를 일치시키지 않아도 됨
함수 정의
- fun 키워드로 정의
fun sum(a: Int, b: Int): Int {
return a+ b
}
- 함수 몸체가 식(expression)인 경우 return 생략 가능
- 이런 경우 return type이 추론됨
fun sum(a: Int, b: Int) = a+b
- 리턴 할 값이 없는 경우 Unit(Object)로 리턴: java의 void에 해당
fun printKotlin(): Unit {
println("hello Kotlin")
}
- Unit은 생략 가능
fun printKotlin() {
println("hello Kotlin")
}
지역 변수 정의
- val: 읽기 전용 변수
- 값의 할당이 1회만 가능, Java의 final과 유사
val a: Int = 1 //즉시 할당
val b = 2 //'Int' type 추론
val c: Int //컴파일 오류, 초기화 필요
c = 3 //컴파일 오류, 읽기전용
- var: Mutable 변수
var x = 5
x += 1
주석
- Java, Javascript와 동일
- //: 한 줄 주석
- /* */: 여러 줄 주석(block comment)
- block comment가 java와 다르게 중첩 허용됨
// 한 줄 주석
/* 여러
줄
주석 */
/* block comment
/* 중첩 가능 */
*/
문자열 템플릿
- String Interpolation(문자열 보간법)
var a = 1
var s1 = "a is $a"
a = 2
var s2 = "${s1.replace("is", "was")}, but now is $a"
조건문
- java와 거의 비슷
fun maxOf(a:Int, b:Int): Int {
if (a > b) {
return a
} else {
return b
}
}
- 조건식으로 사용 가능
fun maxOf(a: Int, b: Int) = if(a > b) a else b
nullable
- nullable mark: ?
- 값이 null일 수 있는 경우 타입에 nullable 마크를 명시해야 한다.
fun parseInt(str: String): Int? {
//정수가 아닌 경우 null을 리턴
}
- nullable 타입의 변수를 접근 할 때는 반드시 null 체크를 해야 한다.
fun printProduct(arg1: String, arg2: String) {
val x: Int? = parseInt(arg1)
val y: Int? = parseInt(arg2)
//null 체크를 하지 않으면 컴파일 에러 발생
if (x != null && y != null) {
println(x * y)
} else {
println("either '$arg1' or '$arg2' is not a number")
}
}
자동 타입 변환
- 타입 체크만 해도 자동으로 타입 변환
fun getStringLength(obj: Any): Int? {
if (obj is String) {
//'obj'가 자동으로 String 타입으로 변환 됨
return obj.length
}
return null
}
while loop
val items = listOf("apple", "banana", "kiwi")
var index = 0
while (index < items.sizes) {
println("item at $index is ${items[index]}")
index++
}
when expression
fun describe(obj: Any): String =
when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
ranges
- In 연산자를 이용해서 숫자 범위를 체크 가능
val x = 3
if ( x in 1..10) {
println("fits in range")
}
- range를 이용한 for loop
for (x in 1..5) {
print(x)
}
collections
- in으로 loop 가능
val items = listOf("apple", "banana", "kiwi")
for (item in items) {
println(item)
}
- in으로 해당 값이 collection에 포함되는지 체크 가능
val items = setOf("apple", "banana", "kiwi")
when {
"orange" in items -> println("juicy")
"apple" in items -> println("apple is fine too")
}
- 람다식을 이용해서 컬렉션에 filter, map 등의 연산 가능
val fruits = listOf("banana", "avocado", "apple", "kiwi")
fruits
.filter {it.startsWith("a")}
.sortedBy {it}
.map {it.toUpperCase()}
.forEach {println(it)}
'인문학도 개발일지 > 앱프로그래밍' 카테고리의 다른 글
[안드로이드][레이아웃] bottom navigation bar - android material로 기본 디자인 적용하기 (0) | 2020.04.24 |
---|---|
[코틀린 kotlin] 새차원의 코틀린 강좌 - 3. Basic Types (0) | 2020.04.16 |
[코틀린 kotlin] 새차원의 코틀린 강좌 - 1. why kotlin (0) | 2020.04.15 |
[안드로이드][코틀린] 하단 네비게이션바(bottom navigation)-프래그먼트(fragment) 연결 (0) | 2020.03.28 |
[안드로이드][레이아웃] 하단바 커스텀 - bottom navigation (0) | 2020.03.27 |