본문 바로가기
Language/코틀린

코틀린 kotlin 기초 문법 Restart

by javapp 자바앱 2024. 2. 23.
728x90

 

학습 환경 Intellij

 

 

패키지 에러

Error: "Only the Kotlin standard library is allowed to use the 'kotlin' package"

package kotlin

fun main() {
    println("Hello Kotlin!")
}

 

-> package 명이 kotlin 이면 에러 발생

다른 패키지명으로 변경

 

 

출력

    var name = "name"
    println(name[0])
    println("제 이름은 $name 입니다.")
    println("제 이름은 ${name} 입니다.")

n
제 이름은 name 입니다.
제 이름은 name 입니다.

 

 

 

데이터입력

    val reader = Scanner(System.`in`)
    reader.nextInt()

 

 


 

타입

 

변수

    // 변수 - 타입 추론
    var i = 10
    var j : Int = 20
    var name : String = "이름"

 

 

상수

val num = 20

 

톱 레벨 상수  (전역 변수로 가능)

const val num = 20

 

 


 

형변환 

    var intValue = 10
    var longValue = 100L
    var name : String = intValue.toString()
    longValue = intValue.toLong()
    intValue = longValue.toInt()

 

 


 

조건문

 

if  else 동일

    // 조건 식으로 활용 가능
    var num = 20
    var answer = if (num > 10) {
        "10 보다 크다"
    } else if (num > 5) {
        "5 보다 크다"
    } else {
        "else"
    }
    println(answer)

    // 3항 대체
    // boolean result = i > 10 ? true : false
    var i = 5
    val result = if (i > 10) true else false

 

 

when 문법 

    // 조건 식으로 활용 가능
    var num = 20
    var answer = when {
        num > 10 -> {
            "10 보다 크다"
        }
        num > 5 -> {
            "5 보다 크다"
        }
        else -> {
            "else"
        }
    }
    println(answer)

 

 


 

 

반복문

    val items = listOf("1", 1)
    items.forEach {
        item -> println(item)
    }

    for (i in 0..(items.size - 1)) {
        println(items[i])
        // break, continue
    }

 

 

while 동일

 

 


 

 

배열

val array = arrayOf(1,2,3)
array[0] = 10

보통 컬렉션을 많이 씀

 

 

컬렉션

    // 변경 안됨
    val items = listOf("1", 1)

    // 변경가능
    val muItems = mutableListOf(1,2,3,4)

 

 


 

 

예외처리

try {
    
} catch (e: Exception) {
    println(e.message)
}

 

 

 


 

 

Null Safety

var name: String? = null // String? 타입
name = null


var name2: String = ""
if(name != null)
name2 = name // String 타입, name!! -> 강제 변환이지만 지양 


// null 이 아닐 때만 실행
name?.let {
    name2 = name
}

 

 


 

 

함수

 

sum(b = 10, a = 20)
sum(20, 10)


// c 는 default
fun sum(a: Int, b: Int, c: Int = 0) : Int {
    return a + b + c
}

 

 

 


 

 

클래스

 

 

class Person(
        private val name: String, 
        var age: Int
)

 

 

data class

fun main() {
    val john = Person("John", 20)
    val john2 = Person("John", 20)

    println(john)
    println(john2)
    println(john == john2)
}

data class Person(
    val name: String,
    var age: Int
)

Person(name=John, age=20)
Person(name=John, age=20)
true

 

 

 

getter setter

 

private set : 데이터 변경 못하게 막음 

 

    println(john.hobby) // 출력
   

class Person(
        private val name: String,
        var age: Int
) {
    init {
        print("init")
    }

    var hobby = "축구"
        private set
        get() = "취미: $field"
}

취미: 축구

 

 


 

 

 

상속

 

클래스 상속

open class Person

class SuperMan : Person() {

}

 

 

상속, 오버라이드는 "open" 으로 열어줘야됩니다.

abstract class Animal {
    open fun move() {

    }
}

class Dog : Animal() {
    override fun move() {

    }
}

 

 

 

인터페이스

interface Drawable {
    fun draw()
}

open class Person

 

class SuperMan : Person(), Drawable {
    override fun draw() {
        TODO("Not yet implemented")
    }
}

 

 

 


 

 

 

타입 체크

 

val dog: Animal = Dog()
if (dog is Dog) {
    println("Dog")
}

 

abstract class Animal {
    open fun move() {

    }
}

class Dog : Animal() {
    override fun move() {

    }
}

 

 


 

 

제네릭

fun main() {
    val box = Box(10)
    val box2 = Box("boxString")
    println(box.value)
}

class Box<T>(var value: T)

 

 

 


 

 

콜백 함수

반환값이 함수

fun main() {
    myFunc({
        println("함수 호출")
    })
    
    // 매개변수가 함수 하나일 때, 람다 표기법
    myFunc() {
        println("함수 호출")
    }
}

fun myFunc(callback : () -> Unit) {// void -> void
    callback()
}

fun myFunc(callback : () -> Unit : {}) { // 디폴트로 빈값 가능
    callback()
}

함수 호출

 

 


 

 

코루틴

    lifecycleScope.launch{
        myFunc() {
            println("함수 호출")
        }
    }


// 정지함수 
suspend fun myFunc(callback : () -> Unit) {// void -> void
    callback()
}

라이프 사이클에 따라 동작 

 

 

 

댓글