본문 바로가기

분류 전체보기

(129)
안드로이드 앱 개발의 특징 및 디렉터리 구조 안드로이드 앱 개발의 특징 안드로이드의 특징 iOS에 비해 많이 오픈되어 있다. 안드로이드는 공개 운영체제인 리눅스 기반이다. 안드로이드 앱 개발은 자바 및 코틀린을 이용해 개발한다. 운영체제의 핵심 코드, 라이브러리 코드, 스마트폰에 기본으로 탑재된 구글에서 만든 앱 코드 등 대부분 코드가 오픈되어 있다. 안드로이드 플랫폼 기반의 스마트폰을 여러 제조업체에서 만들 수 있다. 개발자가 만든 앱은 구글 Play 스토어 뿐만 아니라 다양한 방법으로 사용자에게 배포할 수 있다 안드로이드 기반의 모든 애플리케이션은 평등하다는 사상으로 스마트폰에 기본 탑재된 앱과 개발자들이 만드는 앱이 같은 환경에서 같은 API를 사용한다. 기기의 파편화해상도가 다양함 스마트폰 제조업체에서 안드로이드 플랫폼을 이런 저런 이유로 ..
Coroutine을 사용한 동시성 프로그래밍과 async, await 코틀린 코루틴을 사용해 동시성을 구현하는 방법에 대해서 다루겠습니다. 핵심은 async builder를 사용해 작업을 실행하고, await를 사용해서 async에서 작업이 끝날 때까지 기다리고 결과물을 가져오는 것입니다. 예를 들어 동시성이 아닌 순차적으로 프로그래밍이 진행된다고 생각해보자 A 작업이 완료되는 시간 ⇒ 10초 B 작업이 완료되는 시간 ⇒ 8초 A, B 순차적으로 실행하면 총 18초가 걸립니다. 하지만 A, B 작업을 평행하게 작업하면 10초가 걸립니다. A, B 각각 평행하게 작업하고 그 결과 값들을 결합하는 작업을 할 것입니다. 작업은 다음과 같이 2가지가 있습니다. 하나는 10초, 다른 하나는 8초가 걸립니다. 먼저 두 작업을 순차적으로 진행하고, 동시적으로 작업하도록 해보겠습니다. ..
Kotlin Coroutine Thread 변경하기, Coroutine Suspending Functions (중단 함수) 먼저 Coroutine이 작동하는 Thread를 변경하는 것에 대해서 다루겠습니다. 문제 상황 이전 Hello Couroutine! 에서는 코루틴을 사용해 백그라운드 스레드에서 로그를 남기도록 했습니다. 하지만 UI를 수정하는 작업을 백그라운드 스레드에서는 할 수 없어 UI 관련 작업은 할 수 없었습니다. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) btnDownloadUserData.setOnClickListener { // 버튼 클릭시 백그라운드..
Kotlin Coroutine Scope, Context, Dispacher에 대해서 한 스레드, 프로세스에서 동시에 수백 개의 코루틴을 실행할 수 있습니다. 하지만 기본적으로 코루틴들의 작업이 끝났는지 추적하지 않아 메모리 누수가 발생할 수 있습니다. 코틀린은 이 문제를 코루틴을 Scope안에서 실행하는 것으로 해결할 수 있습니다. 다음과 같은 코루틴 실행 예시를 통해서 Coroutine Scope, Context, Dispacher를 알아보겠습니다. CoroutineScope(Dispatchers.IO).launch { // 코루틴이 실행할 작업 } Coroutine Scope 코루틴의 scope를 정의하는 인터페이스입니다. 또 다른 인터페이스는 GlobalScope가 있습니다. GlobalScope은 top-level 코루틴을(앱이 전체에서 작동한다.) 실행하기 위해서 사용됩니다. ..
Kotlin Coroutine 소개 및 Hello Coroutine! 코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다. 코루틴은 Kotlin 버전 1.3에 추가되었으며 다른 언어에서 확립된 개념을 기반으로 합니다. Android에서 코루틴은 기본 스레드를 차단하여 앱이 응답하지 않게 만들 수도 있는 장기 실행 작업을 관리하는 데 도움이 됩니다. 기능 코루틴은 Android의 비동기 프로그래밍에 권장되는 솔루션입니다. 주목할 만한 기능은 다음과 같습니다. 경량(LightWeight): 코루틴을 실행 중인 스레드를 차단하지(block) 않는 정지(suspension)를 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있습니다. 정지(suspension)는 많은 동시 작업(concurrunt operation..
[Kotlin] Recyclerview click Event (람다 함수 사용) 이번에는 코틀린의 고차 함수와 람다 표현식을 사용해 RecyclerView에 Click Event를 추가해보겠습니다. 결과 과일 이름 리스트를 보여주고, 텍스트 뷰 하나만 있는 매우 심플한 Recyclerview입니다. 클릭했을 경우 클릭된 과일의 이름을 토스트 메시지로 출력하도록 해보겠습니다. 클릭 시 호출될 함수 생성 Activity 파일에 Adpater에서 호출할 함수를 생성합니다. private fun listItemClicked(fruit: Fruit){ Toast.makeText(this@MainActivity, "fruit name is ${fruit.name}",Toast.LENGTH_LONG).show() } Adpater 생성자에 클릭 리스너 람다 함수를 매개 변수로 설정하기 Adpat..
[Android] AAC Navigation 사용하기 (이동, 데이터 전송, 애니메이션) 이전에 Navigation의 구성요소, 원칙 등을 살펴봤습니다. 이번에는 Navigation을 사용해 Fragment 간에 이동, 데이터 전송, 애니메이션 등을 구현할 것입니다. 결과 총 5개의 Fragment를 이동할 것이며 이름, 이메일 문자열을 데이터로 전송할 것입니다. 의존성 선언 build.gradle (app or module) dependencies { def nav_version = "2.3.3" // Kotlin Navigation implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" } S..
[Android] AAC Navigation 살펴보기 Navigation은 무엇일까? Navigation Architecture Component(이하 Navigation)는 18년도에 처음 소개된 Android Jetpack Library입니다. Fragments, Activities와 같은 components 간 탐색을 돕기 위한 라이브러리입니다. Android Jetpack의 Navigation 구성 요소는 간단한 버튼 클릭부터 앱 바 및 탐색 창과 같은 더 복잡한 패턴까지 탐색을 구현하는 데 도움이 됩니다. single activity, multiple fragment 구조를 구현하기 쉽게 해 줍니다. Navigation 사용하여 할 수 있는 것들 Fragment 트랜잭션을 관리할 수 있다. Up, Back 버튼의 작업 등(백 스택 관리)을 간단하게..