목록전체 글 (86)
에르노트
안드로이드 초창기(킷캣 이전)에 카메라 프리뷰를 다루는 예제는 매우 간단했다. 그런데 5.0롤리팝에 오면서 기존 android.hardware.camera가 Deprecated 되버리고 새롭게 더 복잡한 camera2로 대체되었다. 더불어 6.0마시멜로에 와서는 권한 체크가 강화되면서 더 신경쓸 일이 많아져서 이전과는 완전히 새로운 코드가 필요하게 되었다. 그래서 최신 트렌드에 맞추어 camera2 예제를 코틀린으로 리팩토링 해보았다. 우선 카메라2 공식문서는 여기를 확인하면 된다. 그리고 본 예제는 이 블로그의 예제를 기반으로 작성되었다. 카메라에 보이는 것들은 SurfaceView를 통해 표현된다. 일반 뷰의 경우 뷰를 그리는 일은 메인 스레드에서 담당한다. 그러나 카메라가 표현하는 프리뷰는 실시간으..
자바와 비교했을 때 코틀린의 가장 특징적인 부분을 하나만 고르라면 이 범위 지정 함수(Scope Function)가 아닐까 싶다. 이들은 코틀린의 표준 라이브러리에 포함되어 있는 표준 함수 중에서도 형제처럼 비슷한 형태를 띄고 있으면서 묘하게 다르게 동작한다. 공식 문서에도 대놓고 'Basically, these functions do the same..' 이라고 나와 있으며 람다식의 접근 방법과 반환형의 차이가 있을뿐이라고 한다. 하지만 이 미묘한 차이로 인해 관습적으로 제각각 다른 용도로 쓰이고 있으며, 그러한 일반적인 사용법들에 대해서 정리해보고자 한다. let() public inline fun T.let(block: (T) -> R): R { contract { callsInPlace(block..
자바에서는 연산자 오버로딩을 문법적으로 지원하지 않는다. 하지만 코를린에서는 연산자의 역할을 함수로 정의함으로써(Convention) 일반적인 함수를 정의하는 느낌 그대로 연산자를 이용할 수 있다. 따라서 플러스(+)와 같은 연산자에 여러 가지 다른 의미를 심어줄 수 있는데 이를 연산자 오버로딩(Operator Overloading)이라고 한다. val a = 1 val b = 2 println(a + b) //1번 println(a.plus(b)) //2번 //1번과 2번은 100%은 같은 의미이다! 이처럼 연산자를 사용하는 것은 관련된 멤버 메서드를 호출하는 것과 같다. fun main(){ println(Point(1, 3) + Point(2, 2)) } class Point(var x: Int, ..
fun Array.reverse() fun ByteArray.reverse() fun ShortArray.reverse() fun IntArray.reverse() fun LongArray.reverse() fun FloatArray.reverse() fun DoubleArray.reverse() fun BooleanArray.reverse() fun CharArray.reverse() fun MutableList.reverse()자바에서 Collections 클래스의 reverse(list) 형태로 제공되었던 reverse() 함수가 코틀린에서는 확장 함수 형태로 제공된다. 따라서 Collections를 import 할 필요없이 사용하려는 Array 혹은 MutableList에서 바로 reverse()..
구글 JetPack component에 포함되어 안드로이드 로컬 데이터베이스 접근을 도와주는 Room 라이브러리를 공부하던 중 'Entity class must be annotated with @Entity'라는 에러를 겪었다. 다행히 별 복잡한 문제는 아니었고 에러문구 자체가 해결법인 간단한 문제였다. 전에 사용해 본 또 다른 모바일 로컬 DB인 Realm에서는 RealmObject을 상속받는 형태로 Entity를 정의했었다. 그런데 Room Database에서는 일반적인 자바 클래스 혹은 코틀린의 데이터 클래스를 그대로 사용한다. 따라서 내가 작성한 클래스가 DB의 엔티티로 쓰일 것임을 명시해줘야하고, @Entity 어노테이션이 바로 그 표식인 것이다. 실제 예시는 아래와 같다. @Entity dat..