코틀린 기본 문법 10분 요약

2020-10-22 18:00 구르소

kotlin-summary-01

코틀린 10분 요약을 통해서 문법을 이해해보자.

1. 변수

var: 변할 수 있는 변수

var a: Int = 1
a = 2

val: 변하지 않는 변수

val a: Int = 1
a = 2 // error

2. null

var a: String? = null
var b: String = "1"

?를 붙이지 않으면 null이 올수 없다.

3. 함수

fun 키워드로 함수 정의

fun main(args: Array<String>) {
    println("Hello World!!!")
}

void는 생략가능.

fun main(args: Array<String>) = println("Hello World!")

한 줄로 끝날 경우 요약 가능.

4. 주석

// 한 줄 주석
/* 여러줄 주석 */

5. 문자열 템플릿

fun main(args: Array<String>) {
    val person = Person("alex", 14, false)
    println("${person.name} ${person.age}")
}
fun main(args: Array<String>) {
    val name = "alex"
    println("$name")
}

6. 조건문

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

요약 가능.

7. while, when, for

while

var cnt = 0
while(cnt < 10) {
    println(cnt)
    cnt++
}

when + enum

enum class Years(val years: Int) {
    ZERO(0),
    TEN(10),
    TWENTY(20),
    THIRTY(30),
    FORTY(40),
    FIFTY(50),
    SIXTY(60),
    SEVENTY(70),
    EIGHTY(80),
    NINETY(90);
}

class Person(var name: String, var age: Int, var isMarried: Boolean) {
    fun getYears(years: Years): Int {
        return when(years) {
            Years.ZERO -> Years.ZERO.years
            Years.TEN -> Years.TEN.years
            Years.TWENTY -> Years.TWENTY.years
            Years.THIRTY -> Years.THIRTY.years
            Years.FORTY -> Years.FORTY.years
            Years.FIFTY -> Years.FIFTY.years
            Years.SIXTY -> Years.SIXTY.years
            Years.SEVENTY -> Years.SEVENTY.years
            Years.EIGHTY -> Years.EIGHTY.years
            Years.NINETY -> Years.NINETY.years
        }
    }
}
fun main(args: Array<String>) {
    val person = Person("alex", 14, false)
    println(person.getYears(Years.TEN))
}

for

for(x in 0..9) {
    print(x)
}

8. class, interface

interface Clickable {
    fun click() = println("click")
}

open class Button: Clickable {
    override fun click() = println("override click")
}

class RadioButton: Button() {
    override fun click() {
        println("RadioButton click")
    }
}

fun main(args: Array<String>) {
    val btn = RadioButton()
    btn.click()
}

Button 클래스에 override는 오버라이드가 가능한 변경자이다. 원래라면 open을 붙여야 사용 가능해진다. 막고 싶으면 final을 명시하면 된다.

변경자 의미
final 오버라이드할 수 없음(기본값)
open 오버라이드할 수 있음
abstact 반드시 오버라이드해야 함
override 상위 클래스나 상위 인스턴스의 멤버를 오버라이드하는 중

9. 생성자

class RadioButton: Button {
    init {
        println("11111")
    }
    constructor(title: String) {
        println(title)
    }
    constructor(title: String, text: String) {
        println("$title $text")
    }
    override fun click() {
        println("RadioButton click")
    }
}

fun main(args: Array<String>) {
    val btn = RadioButton("22222", "333333")
    btn.click()
}

result:

11111

22222 333333

init와 constructor는 중복사용이 가능하고 init가 먼저 실행된다.

10. 접근 제한자

접근 제한자 의미
public 기본 값으로 누구나 접근 가능
private 클래스 내부에서만 접근 가능
protected 클래스 자신과 상속받은 클래스에서 접근 가능
internal 프로젝트의 모듈 안에서 누구나 접근이 가능
open class MM {
    var a: String = "a"
    private var b: String = "b"
    protected var c: String = "c"
    internal var d: String = "d"
}

fun main(args: Array<String>) {
    var mm = MM()
    print(mm.a)
    print(mm.b)
    print(mm.c)
    print(mm.d)
}

a, d만 실행되고 b, c는 실행되지 않습니다.

a: public 가능

b: private 내부에서만 가능

c: 상속받아야지 가능

d: 같은 모듈이라 가능

-끝-

  • java
  • kotlin
책을 집필하게 되었다. 집필에 반년이 걸렸고 출판까지 8개월의 시간이 걸렸다. 첫 회사에서 처음 접하게 되었던 Flask, 어떻게 보면 지겨울 정도로...
요즘 자바스크립트에 푹 빠져있다. 취업을 위해서는 엔터프라이즈 언어를 배우는게 더 도움이 될꺼라는 조언을 받았지만 가슴이 시키는 것을 하고 싶었다. 책...
배달의 민족에서 치킨천마리 이벤트를 진행했다. 댓글에 학교명을 입력해 가장 많이 참여한 학생들의 학교에 치킨을 제공하는 거였다. 참여를 부탁하는 글을 보고...