본문 바로가기

인문학도 개발일지/앱프로그래밍

[코틀린 kotlin] 새차원의 코틀린 강좌 - 2. Basic Syntax

 

 

 

 

패키지 정의

- 파일 최상단에 위치
- 디렉터리와 패키지를 일치시키지 않아도 됨

 

 

 

함수 정의

- 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)}