코틀린 문법 (1)

k_hyun·2023년 1월 20일
0

코틀린의 특징

  • 표현력과 간결함
  • 널 안전성 지원(널 허용, 불허용)
  • 자바와의 상호 운용성
  • 코루틴을 사용한 비동기 프로그래밍

val, var

val data1: Int = 10		// 타입 지정
var data2 = 10

fun main() {
	data1 = 20		// 오류
    data2 = 20		// 성공
}

val은 value로, 초깃값이 할당후 바꾸기 불가능
var은 variable로, 초깃값이 할당후 바꾸기 가능

val data1: Int		// 오류

class User {
	val data4: Int		// 오류
}

최상위 선언 변수 또는 클래스 멤버 변수는 선언과 동시에 초기화 해야함.

lateinit, lazy

lateinit var data1: Int			// 오류
lateinit val data2: String		// 오류
lateinit var data3: String		// 성공

lateinit으로 선언한 변수는 바로 초기화 하지 않아도 된다.
단, var변수 그리고 primitive type에서는 사용 불가능하다.

val data4: Int by lazy {
	println("lazy..")
    10
}

fun main() {
	println(data + 10)
    println(data)
}

by lazy를 사용한 data4는 main함수에서 처음으로 사용될 때 중괄호 안이 실행된다.
실행 결과는 아래와 같다.

lazy..
20
10

데이터 타입

코틀린의 모든 변수는 객체라는 것을 명심하자.
-> null 대입이 가능

String

fun main() {
	val name: String = "kkang"
	println("name : $name")
}

String 타입의 데이터에 변숫값을 포함할 때는 $ 기호를 이용한다.
실행 결과는 아래와 같다.

name : kkang

Any

val data1: Any = 10
val data2: Any = "hello"

Any는 코틀린에서 최상위 클래스이다. 모든 타입의 데이터를 할당할 수 있다.

Uint

fun some(): Uint {
	println(10 + 20)
}
==========================================
fun some() {
	println(10 + 20)
}

Uint는 반환문이 없음을 명시적으로 나타낼 때 사용된다.
해당 타입으로 변수를 선언할 수 있지만 의미는 없다.
위 둘은 같은 코드이다.

Nothing

null이나 예외를 반환하는 타입

널 허용 / 불허용

var data1: Int = 10
data1 = null 		// 오류

var data2: Int? = 10
data2 = null		// 성공

타입에 물음표를 붙이면 널 허용 나머지는 불허용.

함수 선언

fun some(data1: Int): Int {
	return data1 * 10
}

매개변수는 data1, 반환 타입 Int이다.
매개변수는 val이 자동으로 적용되며, 변경하려 할 시 오류가 뜬다.

컬렉션 타입

Array

val data1: Array<Int> = Array(3, { 0 })
// 0으로 초기화한 데이터 3개 나열한 정수형 배열

val data2: IntArray = IntArray(3, { 0 })
val data3 = arrayOf<Int>(10, 20, 30)
val data4 = intArrayOf(10, 20, 30)

한 타입의 Array를 선언하는데 기초타입의 경우 다양한 방식으로 표현이 가능하다.

List, Set, Map

각 클래스는 불변이며, 각각 listOf(), setOf(), mapOf()로 표현 가능하다.
가변 타입은 앞에 Mutable을 붙이면 된다.

var list = listOf<Int>(10, 20, 30)

var mutableList = mutableListOf<Int>(10, 20, 30)

var map = mapOf<String, String>(Pair("one", "hello"), "two" to "world")

map의 경우 Pair 또는 to를 사용해 key, value를 지정할 수 있다.

조건문 반복문

if~else 표현식

var data = 10
val result = if (data > 0) {
	true
} else {
	false
}

if~else 문을 결괏값을 반환하는데 사용한다.
else문을 생략할 수 없다.

when

var data = 10
when (data) {
	10 -> println(10)
    20 -> println(20)
    else -> {
    	println("another")
    }
}

data의 값이 10이므로 10이 출력된다.
when 괄호 안에 들어오는 타입은 다양하게 사용 가능하다.
외에도 아래와 같이 사용할 수 있다.

var data: Any = 10
when (data) {
	is String 	-> ...
    20, 30 		-> ...
    in 1.. 10 	-> ...
    else		-> ...
]

데이터를 명시하지 않는 경우

var data = 10
when {
	data >= 10 	->...
}

표현식으로 사용하는 경우

var data = 10
val result = when {
	data >= 10 	-> ...
}

반복문

for (i in 1..10) 

1 ~ 10까지 1씩 증가해서 i에 대입하여 사용

var data = arrayOf<Int>(10, 20, 30)
for (i in data.indices)

배열의 길이가 3이므로 i는 0, 1, 2가 된다.

0개의 댓글