Kotlin 기본 문법 정리
in Development on Kotlin
- 코틀린 기본 문법에 대한 글입니다
Kotlin
- 코틀린은 안드로이드나 서버 개발을 할 때 사용할 수 있는 언어
- kotlin server overview 참고하면 서버 사이드에서 장점을 알 수 있음
- 자바에서 많이 쓰이는 Spring도 사용 가능
- VCNC 시스템 아키텍쳐를 보면 서버 언어를 코틀린으로 쓰는 회사가 점점 증가하는듯!
- 이 코드를 읽기 위해 코틀린을 공부합니다..!
Basic Syntax
패키지 정의
package my.demo import java.util.*
- 함수 정의
fun 키워드로 정의
fun sum(a: Int, b: Int): Int { return a + b }
함수 몸체가 식인 경우 return 생략 가능, return type이 추론됨
fun sum(a: Int, b: Int) = a + b
- 리턴할 값이 없는 경우 Unit(Object)으로 리턴
- 자바의 void 역할
fun printKotlin(): Unit { println(“Hello Kotlin”) }
Unit은 생략 가능
fun printKotlin() { println("Hellok Kotlin") }
- 변수 정의
- val : 읽기전용 변수
값의 할당이 1회만 가능, 자바의 final과 유사
val a: Int = 1 val b = 2 // int type 추론 val c: Int // 컴파일 오류, 초기화 필요(값 할당 안함) c = 3 // 컴파일 오류, 읽기 전용이라 추후에 할당 불가
var : Mutable 변수
var x = 5 x += 1
- 주석
- 자바와 자바스크립트와 동일
- // : 한줄 추석
- /* */ : 여러 줄 주석(여러개 중첩 가능)
- 문자열 템플릿
String Interpolation(문자열 보간법)
var a = 1 val s1 = "a is $a" a = 2 val s2 = "${s1.replace('is', 'was')}, but now is $a"
조건문
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
값이 null일 수 있는 경우 타입에 nullable 마크를 명시
func parseInt(str: String): Int?{ // 정수가 아니면 null 리턴 }
- nullable 타입의 변수를 접근할 땐 반드시 null 체크를 해야 함
그렇지 않으면 컴파일 오류 발생
fun printProduct(arg1: String, arg2: String) { val x: Int? = parseInt(arg1) val y: Int? = parseInt(args2) if (x != null && y!= null) { println(x*y) } else { println("eithe '$arg1' or '$arg2' is not a number") }
- 자동 타입 변환
타입 체크만 해도 자동으로 타입 변환!!!
obj: Any는 object의 최상위 객체
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.size) { 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) { println(x) }
- collections
컬렉션도 in으로 loop 가능
val items = listOf("apple", "banana", "kiwi") for (item in items) { println(item) }
in으로 해당 값이 collection에 포함되는지 체크 가능
val items = setOf("apple", "banan", "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) }
Basic Types
- 기본 타입
- 코틀린은 모두 객체
- 모든 것에 멤버 함수나 프로퍼티를 호출 가능!
- 숫자
- Java의 숫자와 비슷
- Kotlin에서 Number는 클래스
- Java에서 숫자형이던 char가 kotlin에선 숫자형이 아님
- 리터럴(Literal)
- 10진수 (Int, Short)
- Long
- Double
- Float
- 2진수
- 8진수는 미지원
- 16진수
- Underscore in numeric literals
언더스코어를 사용해 표현 가능
val oneMillon = 1_000_000 val creditCardNumber = 1234_5678_9012_3456L
- Representation
- Java 플랫폼에서 숫자형은 JVM primitive type으로 저장
- Nullable이나 제네릭의 경우엔 박싱
- 박싱된 경우엔 identity를 유지하지 않음
- show bytecode → decompile하면 자바 코드로 변환
- Explicit Conversions
- 작은 타입은 큰 타입의 하위 타입이 아님
- 즉, 작은 타입에서 큰 타입으로 대입이 안됨
숫자끼리 변화할 땐 명시적으로 변환해야 함
val i: Int = b.toInt() // toByte(), toShort(), toInt() …
- 문자
Char는 숫자로 취급되지 않음
fun check(c: Char) { if (c == ‘a’) }
- 배열
- 배열은 Array 클래스로 표현
- get, set ([] 연산자 오버로딩됨)
size 등 유용한 멤버 함수 포함
var array: Array<String> = arrayOf("코틀린", "강좌") println(array.get(0)) println(array[0]) println(array.size)
- 배열 생성
- Array의 팩토리 함수 사용
arrayOf() 등의 라이브러리 함수 이용
val b = Array(5, { i -> i.toString() }) val a = arrayOf("0", "1", "2", "3", "4")
- 특별한 Array 클래스
- primitive 타입의 박싱 오버헤드를 없애기 위한 배열
- IntArray, ShortArray, IntArray
- Array를 상속한 클래스는 아니지만 Array와 같은 메소드, 프로퍼티를 가짐
size 등 유용한 멤버 함수 포함
val x: IntArray = intArrayOf(1, 2, 3) x[0] = 7 println(x.get(0)) println(x[0]) println(x.size)
- 문자열
- 문자열은 String 클래스로 구현
- String은 characters로 구성
- s[i] 같은 방식으로 접근 가능
immutable이므로 변경은 불가
var x: String = "Kotlin" println(x.get(0)) println(x.length)
- 문자열 리터럴
- escape string (“Kotlin”)
- 전통적인 방식으로 Java String과 비슷
- Backslash를 사용해 escaping 처리
- raw string (“"”Kotlin”””)
- escaping 처리 필요 없음
개행이나 어떤 문자 포함 가능
val s = "Hello, world₩n" val s = """ '''이것은 코틀린의 raw String 입니다.''' """
- escape string (“Kotlin”)
Reference
카일스쿨 유튜브 채널을 만들었습니다. 데이터 분석, 커리어에 대한 내용을 공유드릴 예정입니다.
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 의견이 있으시면 댓글 남겨주셔요.