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()
}
라이프 사이클에 따라 동작
댓글