깨알 개념 122

[Kotlin] Coroutines - 동기 코드, 비동기 코드

본 게시글의 #1 ~ #3은 동기성 및 비동기성을 설명하기 위해서 스레드의 개념에 대해 고의적이고 논리적인 비약을 사용했다. 이 글을 보는 분은 꼭 #4의 주의할 점까지 봐주셔야 한다. #1 동기 코드 vs 비동기 코드#1-1 구분하기코루틴을 제대로 사용하기 위해선 먼저, '동기 코드'와 '비동기 코드(= 코루틴 코드)'를 명확하게 구분할 줄 알아야 한다. 둘을 구분하는 기준은 쉽게 말하자면 작업이 순차적으로 실행되는 지의 여부다. 순차적이라는 것은, 이전 작업이 완료될 때까지 다음 작업이 실행되지 않음을 의미한다. 비동기 코드는 동기 코드가 아닌 코드다. #1-2 비동기 코드의 예시import kotlinx.coroutines.CoroutineScopeimport kotlinx.coroutines.Di..

[Kotlin] Coroutines - 기초

본 게시글의 Coroutine 개념은 Android 내에서 사용되는 것을 전제로 작성되었다. #1 다중 스레드 구현#1-1 코루틴 Android의 Kotlin 코루틴  |  Android DevelopersAndroid의 Kotlin 코루틴 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동developer.android.com컴퓨터 과학에서의 멀티태스킹(Multitasking)에는 크게 2가지 종류이 있는데, 첫 번째 종류는 운영체제가 알아서 프로세스들을 전환하는 방법이고, 두 번째 종류는 프로세스 자체에서 스스로의 동작을 제어하는 방법이다. 전자는 운영체제의 스케쥴러가 수행한다. 개발..

[Android] RecyclerView - Adapter에 인자(Argument) 전달

#1 이전 글 [Android] RecyclerView - 기초#1 ListView vs RecyclerView 화면에 요소(Item)을 100개 표현한다고 해보자. ListView나 GridView 등의 전통적인 Container Widget들은 이 100개의 아이템을 모두 불러온(load)다. 그리고 화면을 스크롤하면 미리 Load되kenel.tistory.com이전 글의 완성된 앱이, Adapter가 인자(Argument)를 전달받도록 수정해본다. 추가로, ViewHolder에 클릭 리스너를 구현하는 예시와 그 클릭 리스너 또한 인자(Argument)로 전달하는 코드도 살펴본다. #2 Adapter가 인자를 전달받게 만들기#2-1 Menu.kt 만들기// package com.example.argu..

[Android] RecyclerView - 기초

#1 ListView vs RecyclerView화면에 요소(Item)을 100개 표현한다고 해보자. ListView나 GridView 등의 전통적인 Container Widget들은 이 100개의 아이템을 모두 불러온(load)다. 그리고 화면을 스크롤하면 미리 Load되어있는 아이템들이 보이는 방식이다. 메모리 효율이 낮다. 반면, RecyclerView는 아이템들을 미리 Load해두지 않는다. 아이템이 화면이 보이기 직전에, 이전 아이템의 껍데기를 재활용(Recycle)해서 그때 그때 Load한다. #2 Adapter RecyclerView.Adapter  |  Android Developersandroidx.appsearch.builtintypes.propertiesdeveloper.android..

[Kotlin] 람다(Lambda) 표현식

#1 람다 대수와 람다 표현식#1-1 람다 대수// 수학 - 함수의 표현f(x) = x + 1g(x, y) = x * y + 1// 수학 - 람다 대수로 함수 표현λx. x + 1λx. λy. x * y + 1프로그래밍에서의 람다 표현식(Lambda Expression)은 수학에서의 람다(λ) 대수(Lambda Calculus)에서 비롯된 개념이다. 람다 대수는 함수에 f나 g와 같은 이름을 붙이지 않는다. 함수의 몸통 즉, 계산 부분만을 단순하게 표현한다. #1-2 람다 표현식// 코틀린 - 함수의 표현fun f(x: Int): Int {    return x + 1}fun g(x: Int, y: Int): Int {    return x * y + 1}// 코틀린 - 람다 표현식으로 함수 표현{ x:..

[Kotlin] 함수 타입(Fuction types) 표현식

#1 코틀린의 함수는 일급 객체다 일급 객체 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 컴퓨터 프로그래밍 언어 디자인에서, 일급 객체(영어: first-class object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 ko.wikipedia.org 코틀린에서는 함수를 일급 객체(First-class object)로 취급한다. 코틀린에서 함수를 일급 객체로 취급한다는 것은 함수가 다른 객체들과 동등하게 다루어지고, 다양한 연산을 적용할 수 있다는 의미를 갖는다. 그렇다면, 함수의 데이터 타입 또한 존재할 것이다. val s : String에서 s는 데이터 타입이 String인 객체인 것처럼, 이 String의 역할을 하는 함수 버전 타입..

[Kotlin] 함수형 인터페이스 (Single Abstract Method Interface)

#1 일반 인터페이스 #1-1 평범한 인터페이스 interface MyNormalInterface { fun myFirstMethod(value: Int): String fun mySecondMethod(value1: Int, value2: String): Int ... } 우리가 잘 알고있는 인터페이스의 모습이다. #1-2 함수형 인터페이스의 후보 // 함수형 인터페이스의 형태지만, 함수형 인터페이스는 아님 interface MyFunctionalInterfaceCandidate { fun myMethod(value1: Int, value2: Int): Int } 가진 메소드가 추상 메소드 하나뿐인 인터페이스(Single Abstract Method, SAM)를 특별히 함수형 인터페이스라고 부른다. 해..

[Kotlin] 연산자 오버로딩 (Operator overloading)

#1 메소드 오버로딩 (Method overloading)class Calculator {    // 정수형 두 개를 더하는 메소드    fun add(x: Int, y: Int): Int {        return x + y    }     // 실수형 두 개를 더하는 메소드    fun add(x: Double, y: Double): Double {        return x + y    }}fun main() {    val calculator = Calculator()        // 정수형 덧셈    val result1 = calculator.add(3, 4)    println("Result of integer addition: $result1") // 출력 결과: 7        //..

[Android] Navigation - 애니메이션

#1 프래그먼트 전환 애니메이션을 적용할 샘플 앱 [Android] Navigation - 기초#1 이전 글 [Android] Navigation - 환경 설정 #1 Navigation#1-1 액티비티 및 프래그먼트 구성의 트렌드요즘 안드로이드 개발의 트렌드는 하나의 액티비티, 여러 개의 프래그먼트다. 이는 구글의 권장사항kenel.tistory.com위 게시글의 완성된 앱을 수정해 프래그먼트 전환 시 애니메이션을 적용해본다. #2 프래그먼트 전환 애니메이션#2-1 Action의 속성Navigation graph를 Design 모드로 연다. 그리고 Action을 클릭하면 Animation이라는 속성을 가지고 있음이 보인다. 즉, 프래그먼트의 전환 애니메이션은 Action이 관리한다는 얘기다. 총 4개의 ..

[Android] Navigation - 기초

#1 이전 글 [Android] Navigation - 환경 설정#1 Navigation#1-1 액티비티 및 프래그먼트 구성의 트렌드요즘 안드로이드 개발의 트렌드는 하나의 액티비티, 여러 개의 프래그먼트다. 이는 구글의 권장사항이기도 하다. 이 트렌드에서 단일 액티kenel.tistory.com위 게시글에서 이어진다. 본 게시글에선 Navigation을 사용하는 샘플 앱을 만들어본다. #2 Navigation 사용하기 - Destination 프래그먼트#2-1 Navigation graph에 Destination 프래그먼트 등록하기우리가 activity_main.xml을 다룰 때 Code 모드, Split 모드, Design 모드 중 하나를 선택해 편집하곤 했다. nav_graph.xml도 그렇다. na..