코틀린 & 컴포즈 & Java 57

[Kotlin] 람다에 대해 알아보자

람다 (Λ λ)11번째 그리스 알파벳 으로 대문자는 Λ, 소문자는 λ이다. 람다라고 읽으며 영어로는 lambda라고 적는다.프로그래밍 언어 에서 사용되는 개념으로, 익명 함수 Anonymous functions 를 지칭하는 용어이다.고차 함수함수를 인자로 받거나 결과로 반환하는 함수를 고차함수(高次函數)라 한다.람다식은 주로 고차 함수에 인자(argument)로 전달되거나 고차 함수가 돌려주는 결과값으로 쓰인다장점코드의 간결성 : 불필요한 루프문의 삭제가 가능하며, 동일한 함수를 재활용할 수 있는 여지가 커진다.인터페이스 없이 콜백구조를 간단하게 구현할 수 있다.지연 연산을 지원하는 방식 을 통하여 효율적인 퍼포먼스를 기대 → 5.3절5.1.1) 람다 소개// Java btn.setOnClickListe..

[Kotlin] Open Class란?

Open Class란? -java에서는 상속의 재 정의를 방지하기 위해 final을 사용합니다. -kotlin에서는 반대로 상속의 재 정의를 허용하기 위해서 open을 사용합니다. open클래스의 open함수가 있다면, 이는 상속을 받아 재 정의가 가능한 형태가 제공됩니다. //v()는 재 정의가 가능하고, nv()는 재 정의가 불가능한 형태. open class Base{ open fun v(){ print("ABC") } fun nv(){} }

[Kotlin] Object Class란?

Object Class란? 코틀린에는 static keyword가 없기 때문에 java의 static 개념을 코틀린에서 어떻게 표현해야 하는지 살펴보겠습니다. -싱글턴을 정의하는 방법 -동반객체 companion object를 이용한 팩토리 메서드 구현 -무명클래스(익명 클래스)의 선언 위 세가지를 object란 keyword를 이용해서 표현. 싱글턴(Singleton) 코틀린에서는 object를 이용하여 클래스를 정의함과 동시에 객체를 생성할 수 있습니다. object Payroll{ val allEmployes = arrayListOf() fun calculateSalary(){ } } object로 선언하면 클래스 선언과 동시에 객체가 생성됩니다. Payroll.allEmployes.add(Pers..

[Kotlin] Data Class란?

Data Class란? 데이터 클래스는 데이터 보관 목적으로 만든 클래스를 말한다. 데이터 클래스는 프로퍼티에 대한 toString(), hashCode(), equals(), copy()메소드를 자동으로 만들어 줍니다. 그래서 boilerplate code를 만들지 않아도 됩니다. boilerplate란 표준문안 이라는 뜻 :최소한의 변경으로 재사용할 수 있는것 :적은 수정만으로 여러 곳에 활용 가능한 코드, 문구 :각종 문서에서 반복적으로 인용되는 문서의 한 부분 반복되지만 자주쓰이는 형태를 자동화한다는게 보일러플레이트의 핵심. data class Site(val url: String, val title: String){ val description = "" } toString()의 인자를 보면 생성..

[Android] Looper에 대해 알아보자

Android Looper에 대해 알아보자 Looper 루퍼는 이벤트 루프와 메시지 큐의 레퍼런스를 가지고 있는 클래스로 쓰레드가 메시지큐에 접근할 수 있는 수단을 제공한다. 루퍼 클래스는 한 쓰레드당 오직 한 개만 존재할 수 있다. worker 쓰레드가 생성된 후 main쓰레드와 메시지 통신을 하기 위해서는 반드시 루퍼를 생성해야 한다. 다음은 전형적인 루퍼를 가진 worker 쓰레드 구현의 예이다 looper의 prepare()메서드를 이용하여 looper객체 생성 //frameworks/base/core/java/android/os/Looper.java static final ThreadLocal sThreadLocal = new ThreadLocal(); public static void prep..

[Android] Java Stream에 대해 알아보자

Android Java Stream에 대해 알아보자 Java Stream 스트림이란? 스트림을 이용하면 선언형(즉, 데이터를 처리하는 임시 구현 코드 대신 질의로 표현할 수 있다.)으로 컬렉션 데이터를 처리할 수 있다. 선언형으로 코드를 구현할 수 있다. 즉, 루프와 if조건문 등의 제어 블록을 사용해서 어떻게 동작을 구현할지 지정할 필요없이 선언형 방식으로 동작의 수행을 지정할 수 있다. filter, sorted, map, collect같은 여러 빌딩 블록 연산을 연결해서 복잡한 데이터 처리 파이프라인을 만들수 있다. 여러 연산을 파이프라인으로 연결해도 여전히 가독성/명확성이 유지된다. filter메서드의 결과는 sorted메서드로, 다시 sorted의 결과는 map메서드로, map메서드의 결과는 c..

[Android] 코틀린 확장 함수(kotlin extention)에 대해 알아보자

[Android] 코틀린 익스텐션(kotlin extention)에 대해 알아보자 유용한 함수 🟩 sort() collection의 각 요소들을 정렬해줍니다. fun main(args: Array) { val a: MutableList = mutableListOf(3, 2, 1) a.sort() //a.sorted() 는 새로운 collection을 반환 println(a) val sorted = a.sortedByDescending { it } // 내림차순 println(sorted) //sortBy() : Object 의 특정 Property 들을 기준으로 정렬 val list = mutableListOf(1 to "a", 2 to "b", 7 to "c", 6 to "d", 5 to "c", 6 ..

[Android] 가비지 컬렉터(Garbage Collector), 참조(Reference)에 대해 알아보자

[Android] 가비지 컬렉터(Garbage Collector), 참조(Reference)에 대해 알아보자 # Java의 Garbage Collector 1. 힙(heap) 내의 객체 중에서 가비지(garbage)를 찾아낸다. 2. 찾아낸 가비지를 처리해서 힙의 메모리를 회수한다. # GC와 Reachability - Java GC는 객체가 Garbage인지 판별하기 위해서 Reachability라는 개념을 사용 - 어떤 객체에 유효한 참조가 있으면 'reachable', 없으면 'unreachable' - unreachable 객체를 가비지로 간주해 GC를 수행 - 유효한 최초의 참조가 있어야 하는데 이를 객체 참조의 root set # Reference - java.lang.ref는 Strong r..

lateinit 초기화 확인하기

실제 값을 사용할 때 lateinit을 한번 체크해줌으로써 안전하게 접근할 수 있다. ::을 통해서만 접근이 가능한 .isInitialized을 사용하여 체크할 수 있다. // 부르는 시점 초기화 sampleAdapter = SampleAdapter(ImageLoaderAdapterViewModel(this@SampleMainActivity, 3)) if (::sampleAdapter.isInitialized) { sampleAdapter.addItem() sampleAdapter.notifyDataSetChanged() } } 참조 : https://thdev.tech/kotlin/2018/03/25/Kotlin-lateinit-lazy/

LiveData와 StateFlow의 차이

LiveData에는 Post 및 Set의 2가지 방출 기능이 있습니다. 기사 중 하나에 따르면 LiveData의 단점은 두 가지 값 방출 기능, 즉 setValue 및 postValue가 있다는 것입니다. setValue — 메인 스레드에서만 사용할 수 있습니다. 그렇지 않으면 충돌합니다. postValue — 모든 스레드에서 사용할 수 있습니다. 그러나 메인 스레드가 사용 중이면 값이 떨어지고(잃어버린) 가장 최근에 게시된 값만 사용됩니다. StateFlow에는 1개의 방출 기능만 있습니다. 세트도 포스트도 없습니다. 설정할 stateFlow.value일 뿐입니다. 따라서 배경인지 전경인지(메인 스레드) 걱정할 필요가 없습니다. 주 스레드가 사용 중일 때 stateFlow가 어떻게 동작하는지 궁금합니다..