윤굥굥
yg323
윤굥굥
전체 방문자
오늘
어제
  • 굥굥 DEV
    • Computer Science
      • 자료구조 및 알고리즘
      • 운영체제
      • 네트워크
      • 데이터베이스
    • Programming Language
      • Java
      • Kotlin
    • Android
      • with Kotlin
    • Algorithm
      • with Kotlin
    • 하나씩 습득하는 중

블로그 메뉴

  • ↓백준 모아보기 ↓
  • 💚 플레티넘 문제 모아보기
  • 💛 골드 문제 모아보기
  • 🤍 실버 문제 모아보기
  • 🤎 브론즈 문제 모아보기

공지사항

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
윤굥굥

yg323

Programming Language/Kotlin

[공식문서를 읽자] Basic Syntax

2022. 1. 29. 20:24
 

Basic syntax | Kotlin

 

kotlinlang.org

Package definition and imports

패키지 명세와 import 문은 소스 파일의 최상단에 위치한다. 디렉토리와 패키지를 일치시킬 필요는 없다 : 소스 파일은 독단적으로(임의로?) 시스템에 배치할 수 있다. 

package my.demo

import kotlin.text.*

// ...

Program entry point

코틀린 애플리케이션의 진입점은 main 함수이다. 

// 문자열 인자가 없는 main 함수
fun main() {
println("Hello world!")
}
// 문자열 인자가 있는 main 함수
fun main(args: Array) {
println(args.contentToString())
}

Print to the standard output

  • print() : 한 줄에 출력
  • println() : 마지막에 개행 문자가 추가되어있음. 다음 출력은 그 다음줄에 

Functions

// 두개의 Int형 파라미터와 Int형 리턴타입
fun sum(a: Int, b: Int): Int {
return a + b
}

fun main() {
print("sum of 3 and 5 is ")
println(sum(3, 5))
}
// 함수의 body는 표현식이 될 수 있다. 반환 타입은 생략이 가능하다.
fun sum(a: Int, b: Int) = a + b
fun main() {
println("23 + 30 = ${sum(23, 30)}")
}
// 반환 타입이 없는 함수도 생성 가능하다. 정확하게는 Unit형의 반환타입인데, 생략이 가능하다.
fun printSum(a: Int, b: Int): Unit {
println("$a + $b = ${a + b}")
}

fun main() {
printSum(-3, 11)
}

Variables

val 키워드를 이용하여 read-only 변수 선언이 가능하다. 한번 변수를 초기화하고 나면 재정의가 불가능하다.

fun main() {
val a: Int = 1 // 선언 즉시 초기화
val b = 2 // `Int` type 추론
val c: Int // 추후 초기화시 타입 명시를 해주어야함
c = 3 // 선언 후 초기화, 참조 전에는 반드시 초기화 되어있어야 함
println("a = $a, b = $b, c = $c")
}

var 키워드를 이용하여 재정의 가능한 변수 선언이 가능하다.

fun main() {
var x = 1130 // `Int` type 추론
x += 323
println("x = $x")
}

변수는 top level 에 선언이 가능하다. 

val PI = 3.14
var x = 0

fun increment() {
x += 1
}

fun main() {
println("x = $x; PI = $PI")
increment()
println("increment()")
println("x = $x; PI = $PI")
}

Creating classes and instances

클래스를 선언할 때는 class 키워드를 사용한다. 클래스의 속성들은 선언부 또는 body에 선언 가능하다.

클래스 선언에 나열된 매개 변수를 가진 기본 생성자를 자동으로 사용할 수 있습니다.

class Rectangle(var height: Double, var length: Double) {
var perimeter = (height + length) * 2
}
fun main() {
val rectangle = Rectangle(5.0, 2.0)
println("The perimeter is ${rectangle.perimeter}")
}

클래스의 상속 관계는 : 키워드를 통해 나타낼 수 있다. 클래스가 상속이 가능하게 변경하려면 open 키워드를 class 키워드 앞에 붙여 만든다. 

open class Shape
class Rectangle(var height: Double, var length: Double): Shape() {
    var perimeter = (height + length) * 2
}

Comments

// : 한줄 주석

/* */ : 여러줄 주석

String templates

큰 따옴표 안에 ${} 키워드를 사용하면 변수를 출력할 때 용이하다. 일종의 문법적 설탕

fun main() {
var a = 1
// 간단한 문자열일때
val s1 = "a is $a"

a = 2
// 임의의 표현식(?)일때
val s2 = "${s1.replace("is", "was")}, but now is $a"
println(s2)
}

 

Conditional expressions

코틀린은 if문을 표현식으로 사용할 수 있다. 

fun maxOf(a: Int, b: Int) = if (a > b) a else b

fun main() {
println("max of 3 and 23 is ${maxOf(3, 23)}")
}

for loop

in 키워드를 이용하여 특정 범위 안에서 for 문을 생성할 수 있다. 컬렉션 또는 범위를 두어 사용한다.

fun main() { val items = listOf("apple", "banana", "grape") for (index in items.indices) { println("item at $index is ${items[index]}") } }

while loop

for 문 뿐만 아니라 while문도 사용이 가능하다. 

fun main() { val items = listOf("apple", "banana", "grape") var index = 0 while (index < items.size) { println("item at $index is ${items[index]}") index++ } }

when expression

Switch문과 비슷한 역할을 한다. 

fun describe(obj: Any): String = when (obj) { 1 -> "One" "Hello" -> "HI" is Long -> "Long" !is String -> "Not a string" else -> "Unknown" } fun main() { println(describe(1)) println(describe("Hello")) println(describe(1000L)) println(describe(2)) println(describe("other")) }

Ranges

.. 키워드를 사용하여 범위를 생성할 수 있다. 닫힌 범위 이기 때문에 끝 값을 포함한다. 
until 키워드를 사용하면 끝 값을 포함하지 않는 half-open 범위를 만들 수 있다.

fun main() { val x = 10 val y = 9 if (x in 1..y+1) { println("fits in range") } }
fun main() { val list = listOf("a", "b", "c") if (-1 !in 0..list.lastIndex) { println("-1 is out of range") } if (list.size !in list.indices) { println("list size is out of valid list indices range, too") } }
fun main() {
for (x in 1..5) {
print(x)
}
}

step 키워드와 downTo 키워드를 사용하여 증감을 만들어 낼 수도 있다. 

fun main() {
for (x in 1..10 step 2) {
print(x)
}
println()
for (x in 9 downTo 0 step 3) {
print(x)
}
}

Collections

list, set map 컬렉션과 강력한 collection 내장 함수를 제공한다. (람다식을 이용하여 collection을 필터링하고 맵핑할 수 있다.)

fun main() {
val fruits = listOf("banana", "avocado", "apple", "grape")
fruits
.filter { it.startsWith("a") }
.sortedBy { it }
.map { it.uppercase() }
.forEach { println(it) }
}

in 연산자를 사용하여 collection에 요소가 포함되어 있는지 확인할 수 있다. 

fun main() {
val items = setOf("apple", "banana", "grape")
when {
"orange" in items -> println("juicy")
"apple" in items -> println("apple is fine too")
}
}

Nullable values and null checks

null 값이 가능한 경우 ? 키워드를 타입 이름 끝에 붙여서 참조를 nullable로 명시적으로 표시해야된다. 

Type checks and automatic casts

is 키워드를 이용하여 표현식이 타입의 인스턴스인지 확인할 수 있다. 특정 유형에 대해 불변 지역 변수이거나 속성을 검사하는 경우 명시적으로 캐스팅할 필요가 없다. 

저작자표시 비영리 변경금지 (새창열림)
    'Programming Language/Kotlin' 카테고리의 다른 글
    • [공식문서를 읽자] Control flow - Returns and jumps
    • [공식문서를 읽자] Control flow - Conditions and loops
    • [공식문서를 읽자] Types - Type checks and casts
    • [공식문서를 읽자] Types - Basic types
    윤굥굥
    윤굥굥

    티스토리툴바