본문 바로가기

분류 전체보기322

[Kotlin] ROOM Database 사용 방법 Environment Setting plugins{ ... } apply plugin: 'kotlin-kapt' dependencies { def room_version = "2.2.5" ... // room implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor // optional - Kotlin Extensions and Coroutines support for Room implementation "androidx.room:room-ktx:$room_version" //.. 2022. 1. 10.
[Kotlin] lazy lazy가 적용된 변수가 실제 사용되는 시점에 초기화를 진행함에 따라 코드의 실행시간을 최적화할 수 있음. 예제 fun main(){ val number: Int by lazy{ println("초기화를 합니다.") 7 } println("코드를 시작합니다.") println(number) println(number) } 예제 결과 2022. 1. 6.
[Kotlin] Data Class 데이터를 다루는데 최적화된 클래스로 equals(), hashcode(), toString(), copy(), componentX() 함수가 자동으로 생성됨. 예제 fun main(){ val a = General("보잉",212) println(a == General("보잉", 212)) println(a.hashCode()) println(a) val b = Data("루다", 306) println(b == Data("루다", 306)) println(b.hashCode()) println(b) } class General(val name: String, val id: Int) data class Data(val name:String, val id: Int) 예제 결과 2022. 1. 6.
[Kotlin] 오브젝트 Object Object로 선언된 객체는 최조 생성 시 자동으로 생성되며, 이후에는 코드 전체에서 공용으로 사용될 수 있음. Companion Object Class 내에 오브젝트가 존재할 경우, 인스턴스끼리 해당 오브젝트를 서로 공유함. 예제 fun main() { println(Counter.count) Counter.countUp() Counter.countUp() println(Counter.count) Counter.clear() println(Counter.count) } object Counter{ var count = 0 fun countUp(){ count++ } fun clear(){ count = 0 } } 예제 결과 Listener 이벤트를 수신해서 출력하는 클래스(EventPrin.. 2022. 1. 6.
[Kotlin] 스코프 함수 스코프 함수 스코프 함수의 경우 별도의 Scope에서 인스턴스의 변수와 함수를 조작할 수 있음. (apply, run, with, also, let) let, also의 경우 Scope 외부에서 동일한 이름의 변수나 함수가 존재할 때를 대비해 it과 같이 사용하기 위해 존재함. 예제 fun main(){ var a = Book("책1",10000).apply{ name = "[초특가]"+name discount() } a.pay() } class Book(var name:String, var price:Int){ fun pay(){ println("${name}의 가격은 ${price}원입니다.") } fun discount(){ price -= 2000 } } 결과 2022. 1. 5.
[Kotlin] 고차함수 고차함수 다른 함수를 인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수 예제 fun main(){ b(::a) // 일반 함수를 고차 함수로 변환하는 연산자 -> ::일반 함수명 val c: (String)->Unit = { str -> println("$str 람다함수") } b(c) } fun a(str:String){ println("$str a함수") } fun b(function: (String)->Unit){ //Unit is Not return function("b가 호출한") } 결과 2022. 1. 5.
[Kotlin] 추상화 (abstract, interface) abstract 기존 추상화 개념과 같음. 예제1 fun main(){ var a = real_Man() a.run() a.sniff() } abstract class Man { abstract fun run() fun sniff(){ println("냄새를 맡는 중") } } class real_Man: Man(){ override fun run(){ println("달리는 중") } } 예제1 결과 interface abstract, open 등과 같은 키워드를 사용하지 않더라도 추론을 통해 자동 적용되며, 한 번에 여러 인터페이스를 상속 시킬 수 있음. 예제2 fun main(){ var a = Man() a.run() a.eat() } interface Runner { fun run() // eq.. 2022. 1. 5.
[Kotlin] Class 상속 및 오버라이딩 방법 클래스 상속 Kotlin은 Default로 상속이 금지되어 있기 때문에 class 예약어 앞에 open을 사용해야함. 예제1 fun main(){ var a = Person("김민수",1996) a.introduce() var b = Dog("김민수",1996) b.introduce() b.bark() } open class Person (var name:String, var birthYear:Int){ fun introduce(){ println("안녕하세요. 저는${this.name}이고, ${this.birthYear}년에 태어났습니다.") } } class Dog (name:String, birthYear:Int): Person(name, birthYear){ fun bark(){ println(.. 2022. 1. 5.
[Kotlin] 보조 생성자 인스터스 생성 시 보조 생성자(constructor)를 통해 생성자(init)를 실행시키기 이전에 필요한 동작을 수행할 수 있음. 예제 fun main(){ var a = Person("박보영",1990) var b = Person("장원영",2004) var c = Person("이루다") var d = Person("차은우") } class Person (var name:String, var birthYear:Int){ init{ println("${this.birthYear}, ${this.name}") } constructor(name:String): this(name, 1997){ println("보조 생성자를 통해 생성일자를 1997년으로 설정하였습니다.") } } 결과 2022. 1. 5.