Sqlite3 에서 csv 파일을 데이터베이스에 import 해보기
·
[ TroubleShooting ]
이번에 간단하게 애플리케이션 개발을 진행하고 있다. 기존에 사용하지 않았던, 코틀린으로 공부와 개발을 진행하고 있는데, 로컬로 사용할 DB 를 만드는 과정 중, csv 파일을 import 해오는 과정이 필요했다.  어차피 안드로이드에서 쓰는 Room 도 결국에는 sqlite3 과 완벽하게 호환되니, sqlite3 이랑 익숙해지는 것도 꽤 괜찮을 것 같다는 생각이 든다. 무튼 결론적으로, csv 파일을 sqlite3 DB 에 옮기는 과정은 크게 다음과 같은 절차로 진행하면 된다. 1. 애플리케이션에서 사용할 Table 생성 2. csv 파일을 불러올 temp Table 생성 3. temp Table -> 실제 애플리케이션에서 사용할 Table 로 옮기기  쿼리는 다음과 같다. INSERT INTO wise..
lateinit 과 lazy
·
[ Kotlin ]
코틀린 고급편 강의 수강 후 정리한 글입니다.lateinit인스턴스화 시점과 프로퍼티 초기화 시점을 분리하고 싶을 때 사용한다.인스턴스화를 한 번만 하고, 테스트를 할 때 변수를 초기화하고 싶은데, 인스턴스화 할 때, 초기값을 넣어주고 싶지 않을 때. lateinit 을 사용하지 않는다면 다음과 같은 방법을 고려해볼 수 있다.방법 1. 기본 값을 넣어주기변수가 변경되어야 하니, val 대신 var 이 필요하고, 기본값이 있으니 생성자에 있을 필요가 없다.하지만 위험한 방법이다. name 을 초기화 하지 않더라도, 예외가 발생하지 않기 때문이다."Hong" 이라는 이름이 실제로 존재하는 이름일 수 도 있다. 이런 문제를 해결하기 위한 방법 -> nullable 로 만들어보는 것이다.class PersonT..
코틀린의 제네릭 제약과 제너릭 함수
·
[ Kotlin ]
코틀린 고급편 강의 수강 후 정리한 글입니다.Generic Constraints ( 제너릭 제약 )type 파라미터 T 에 제약을 거는 방법을 알아본다.Animal 을 상한선으로 정할 수 있다.fun main() { Cage5() // X Cage5() // OK Cage5() // OK}// 다음과 같이 T 옆에 적어주면 된다. class Cage5 {}더불어서, Animal 을 상한으로 하면서, Comparable 을 구현하고 있어야 한다는 것도 정할 수 있다. 제한 조건을 여러개 둘 수 있다.where 키워드를 사용해서 다음과 같이 사용할 수 있다.fun main() { Cage5() // X Cage5() // OK Cage5() // OK}// 다음과 같이 T 옆..
코틀린의 선언 지점 변성/ 사용 지점 변성
·
[ Kotlin ]
코틀린 고급편 강의를 수강한 후, 정리한 글입니다 클래스를 공변하게 만드는 방법제너릭 클래스 자체를 공변하게 만들 수 있는 방법은 없을까? 코틀린에서는 클래스에서의 공변이 가능하다.생산만 하는 클래스 Cage3. 내보내기만 하고 있는 클래스이다. 이럴 경우에는 클래스 자체를 공변하게 만들 수 있다.class Cage3 { private val animals: MutableList = mutableListOf() fun getFirst(): T { return this.animals.first() } fun getAll(): List { return this.animals }}클래스 자체가 공변하다면 다음과 같을 때, 에러 발생이 나지 않을 것이다.val..
코틀린의 배열과 리스트, 제너릭과 무공변, 공변, 반공변
·
[ Kotlin ]
인프런에서 제공하고 있는 코틀린 고급편 강의를 수강한 후 정리한 글입니다.지난 시간 리뷰class Cage2 {private val animals: MutableList = mutableListOf() fun getFirst() : T { return animals.first() } fun put(animal: T) { this.animals.add(animal) } fun moveFrom(cage: Cage2) { this.animals.addAll(cage.animals) }}지난 시간에 금붕어 케이지에 금붕어를 넣었었고, 금붕어를 물고기 케이지로 옮겨 넣으려 했지만, 안됐다 근데 그냥 금붕어를 물고기 cage 에 넣는 것은 가능했..
코틀린의 제너릭과 타입 파라미터
·
[ Kotlin ]
인프런에서 제공하고 있는 코틀린 고급편 강의를 수강한 후 정리한 글입니다. 제너릭과 타입 파라미터다음과 같은 Animal 클래스, Cage 클래스가 있다.class Cage { private val animals: MutableList = mutableListOf() fun getFirst(): Animal { return animals.first } fun put(animal: Animal) { this.animals.add(animal) } fun moveFrom(cage: Cage) { this.animals.addAll(cage.animals) }}abstract class Animal(val name: String,)ab..
코틀린의 scope function - 20강
·
[ Kotlin ]
인프런에서 제공하고 있는 강의를 보고 정리한 글입니다.Scope Function 이란?일시적인 영역을 형성하는 함수를 말한다.fun printPerson(person: Perosn?) { if (person != null) { println(person.name) println(person.age) }}// Refactoringfun printPerson(person: Person?) { person?.let { println(it.name) println(it.age) }}Safe Call (?.) 을 사용했다. person 이 null 이 아닐 때에 let 을 호출한다.let 은 scope function 의 한 종류이다...
코틀린에서 부가적으로 알아둘만한 것들 - 19강
·
[ Kotlin ]
인프런에서 제공하고 있는 강의를 보고 정리한 글입니다. Type Alias 와 as importType Alias긴 이름이나 클래스 혹은 함수 타입이 있을 때, 축약하거나 더 좋은 이름을 쓰고 싶은 경우가 있는데, 그럴 때 사용할 수 있다.fun filterFruits(fuirts: List, filter : (Fruit) -> Boolean) {}// 너무 길다...! 이럴 경우, 축약하고 싶을 수 있다. 너무 길어서, 줄이고 싶을 때 다음과 같이 줄일 수 있다.typealias FruitFilter = (Fruit) -> Boolean 이름이 긴 클래스를 컬렉션에 사용할 때도 간단히 줄일 수 있다.as import다름 패키지의 같은 이름 함수를 동시에 가져오고 싶은 경우가 있을 것이다.어떤 클래스나 ..
코틀린에서 컬렉션을 함수형으로 다루는 방법 -18강
·
[ Kotlin ]
인프런의 강의를 보고 정리한 글입니다.Filter 와 Map필터와 맵을 처리하기 위한 다음과 같은 메서드들이 있다.filter, filterIndexed, map, mapIndexed, mapNotNull// 1. Only Appleval apples = fruits.filter { fruit -> fruit.name == "Apple" }// 2. Apple's Priceval applePrices = fruits.filter { fruit -> fruit.name == "Apple} .map { fruit -> fruit.currentPrice }// 3. replace filterFruits to function t..
코틀린에서 함수 및 람다를 다루는 방법 - 16강, 17강
·
[ Kotlin ]
인프런에서 제공하고 있는 강의를 보고 정리한 글입니다. 확장 함수어떤 클래스 안에 있는 메소드처럼 호출할 수 있지만, 함수는 밖에서 선언할 수 있도록 제공한다.fun main() { val str = "ABC" str.lastChar() // 원래 멤버함수에 있는 것처럼 사용한다. }// 확장 함수. String 을 확장한다fun String.lastChar() { return this[this.length-1] // 불려진 instance 에 접근이 가능함. }확장함수는 public 인데, 확장 함수에서 수신객체 클래스의 private 함수를 가져오면 깨지는 것이 아니다. 애초에 private protected 를 가져올 수 없다.확장함수와 멤버함수의 시그니처가 동일하면, 멤버함수가 호..
coding-wave
'분류 전체보기' 카테고리의 글 목록