코틀린 & Java 44

[Kotlin] Data Class란?

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

코틀린 & Java 2022.10.25

[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..

코틀린 & Java 2022.10.24

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

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

코틀린 & Java 2022.10.24

[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 ..

코틀린 & Java 2022.10.05

[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..

코틀린 & Java 2022.09.21

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/

코틀린 & Java 2022.01.11

LiveData와 StateFlow의 차이

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

코틀린 & Java 2021.12.27

코틀린 코딩컨벤션 정리

클래스 레이아웃 일반적으로 클래스의 내용은 다음의 순서로 정렬된다. 1. Property declartions and initializer block 2. Secondary constructors 3. Method declarations 4. Companion object 관련된 것들을 한데 모아 클래스를 읽는 사람이 위에서 아래로 무슨 일이 일어나고 있는지 로직을 따라갈 수 있도록 해라. 중첩 클래스들이 외부에서 사용되도록 의도되었고 클래스 내부에서 참조되지 않는다면 companion object 다음의 마지막에 위치시켜라. 콜론 아래와 같은 경우에 콜론 앞에 공백을 넣어라 - 타입과 슈퍼 타입을 분리할 때 - 동일한 클래스의 다른 생성자 또는 슈퍼 클래스의 생성자에게 위임할 때 - object 키워드..

코틀린 & Java 2021.12.13

스트림 함수

변환 map() : 컬렉션 내 인자를 다른 값 혹은 타입으로 변환할 때 사용합니다. val cities = listOf("Seoul", "Tokyo") cities.map { city -> city.toUpperCase() }.forEach { print(it) } // 대문자로 변환 cities.map { city -> city.length }.forEach { print(it) } // length 변환 mapIndexed() : 컬렉션 내 포함된 인자의 인덱스 값을 변환 함수 내에서 사용할 수 있습니다. val numbers = 0..10 numbers.mapIndexed{ idx, number -> idx * number }.forEach{ print("$it ") } //변환 함수에서 각 인자와..

코틀린 & Java 2021.08.04

Kotlin 코딩규칙 서식

들여 쓰기 들여 쓰기에는 공백 4개를 사용하십시오. 탭을 사용하지 마십시오. 중괄호의 경우 구성이 시작되는 줄 끝에 여는 중괄호를 배치하고 여는 구성과 수평으로 정렬 된 별도의 줄에 닫는 중괄호를 배치합니다. if (elements != null) { for (element in elements) { } } i) Kotlin에서 세미콜론은 선택 사항이므로 줄 바꿈이 중요합니다. 언어 디자인은 Java스타일 중괄호를 가정하며 다른 형식화 스타일을 사용하려고 하면 놀라운 동작이 발생할 수 있습니다. 수평 공백 이항 연산자 (a + b) 주위에 공백을 두십시오. 예외: "범위"연산자 (0..i)주위에 공백을 두지 마십시오. 단항 연산자 (a++)주위에 공백을 두지 마십시오. 제어 흐름 키워드 (if, when..

코틀린 & Java 2021.07.07