String API, isBlank() vs isEmpty()우린 Android 에서 java 언어로 String 의 null or empty check 를 TextUtils.isEmpty() 로 하곤 했을 것이다.코틀린에서는 String 클래스 내 API 로 isBlank() 와 isEmpty() 두 가지를 제공한다.사용 시 자주 헷갈리는 두 API 차이를 분석해보자.isBlank()fun CharSequence.isBlank(): Boolean문자열이 비어 있거나 공백 문자만으로 구성되어 있으면 true 를 리턴한다.Kotlin, isBlankisEmpty()fun CharSequence.isEmpty(): Boolean문자열이 비어있으면 true 를 리턴한다.Kotlin, isEmpty 두 API ..
primary constructor call expected 기본 생성자 호출이 필요 합니다 Kotlin 기본 생성자에 대한 호출이 Kotlin 보조 생성자의 정의에 없을 때 발생 class Student(var name: String="") { var age: Int = 14 constructor (name: String, age: Int){ this.age = age } fun printMsg(){ println("Name is $name. Age is $age."); }} this 키워드를 사용하여 해결 기본 생성자 똑는 기본 생성자를 호출하는 이전 보조 생성자에 대한 호출을 포함한다 class Student(var name: String="") { var age: Int = 14 construct..
lateinit var is initialized isInitialized 를 이용하여 lateinit var 이 초기화되었는지 여부를 확인 할 수 있다 12345678910111213class Foo { lateinit var lateTest: String fun init() { println("before init : ${this::lateTest.isInitialized}") lateTest = "value" println("after init : ${this::lateTest.isInitialized}") }} fun main(args: Array) { Foo().init()}Colored by Color Scriptercs + Reference http://kotlinlang.org/docs/r..
Kotlin 의 특수 기호 ?. safe call 을 수행한다메소드가 호출되거나 수신기가 null 이 아닌 경우 속성에 액세스 ?. 을 이용한 null safety if ( user != null )println("user is not null")elseuser = false 위의 코드를 ?. 을 이용하면 user?.let { println("user is not null") }.let { println("user is null") } 위와 같이 표현 할 수 있다 ?: 왼쪽의 값이 null 인 경우 오른쪽 값을 가져온다 ( 엘비스 연산자 ) Elvis Operator val l: Int = if( b != null ) b.length else -1 을 val l = b?.length ?: -1 처럼 표현..
lateinit vs lazy Kotlin 에서 초기화 지연 방식 두 가지를 지원한다 lateinit public class Test { lateinit var mock: Mock @SetUp fun setup() { mock = Mock() } @Test fun test() { mock.do() } } lazy public class Example{ val name: String by lazy { “Amit Shekhar” } } 언제, 어느것을 사용할지 선택하는 방법 - lazy 는 val 속성에만 사용할 수 있지만, lateinit 은 최종 필드로 컴파일 할 수 없기 때문에 vars 에만 적용 할 수 있으므로 불변성을 보장 할 수 없다. - lateinit var 는 객체가 보이는 곳이라면 어디서든..