반응형

안드로이드/이론관련 15

스레드(Thread)와 코루틴(Coroutine)의 차이

이 글에서는 스레드와 코루틴의 차이점 대해 간단하게 알아보도록 하자. 먼저, 둘의 차이점을 말하기 전에 둘의 공통점은 프로그램을 만드는 과정에서 '비동기' 작업을 하기 위해서 사용한다는 점이다. 비동기 작업은 어떤 작업을 수행할 때, 이가 끝나는 것을 기다리지 않고 다른 작업을 수행하는 것이고 반대로 동기 작업은 해당 작업이 끝날 때까지 기다린 뒤 다음 작업을 수행하는 것이다. 그런데, 스레드와 코루틴은 근본적으로 큰 차이가 있다. 스레드의 경우 여러 개의 스레드를 사용해서 여러 개의 작업을 '병렬'로 수행하여 비동기적으로 작동한다. 하지만 코루틴의 경우 비동기 작업에 사용되긴 하지만 실제로는 병렬적으로 수행되는 것이 아니고 여러 개의 작업을 잘게 쪼개서 나눠서 작업을 수행하는 방식이다. 그림으로 표현하..

액티비티(Activity)와 프래그먼트(Fragment)

이번 글에서는 Activity와 Fragment에 대해서 알아보자. Activity Activity는 Android의 4대 Component중 하나로 사용자에게 실제로 보이며, 사용자와 상호작용하는 화면을 말한다. Activity는 하나 이상의 View또는 ViewGroup을 반드시 가지고 있어야 하며, 한 번에 하나의 Activity만 Disaplay할 수 있다. 비유를 해보자면, 종이를 끼우는 파일철을 생각해보도록 하자. 파일철에는 여러 장의 종이를 끼워서 보관할 수 있는데, 우리는 한 번에 한 종이의 한 면만 확인할 수 있다. 여기서 이 한 면이 Activity가 되는것이고, 한 면 위에 쓰인 내용들을 View또는 ViewGroup이라고 할 수 있다. Fragment 자 그럼 Fragment는 무엇..

안드로이드 4대 컴포넌트(구성요소)

이 글에선 안드로이드의 4대 컴포넌트에 대해서 알아보도록 하자. 안드로이드는 4개의 컴포넌트(구성요소)로 이루어져 있다. 1. Activity(액티비티) 2. Service(서비스) 3. BroadcastReceiver(방송 수신자) 4. ContentProvider(콘텐츠 제공자) 이 네 가지 컴포넌트들은 각각 독립적인 형태로 존재하며, 고유의 기능을 수행한다. 또한 넷은 Intent를 통해서 서로 상호작용을 하는데, 그림으로 표현하면 아래와 같이 된다. 그렇다면 네 가지 놈들의 특징에 대해 알아보기 전에 Intent라는 놈은 뭔데 넷의 사이에서 존재할까? Intent의 가장 간단한 사용 예는 화면(Activity)전환에서 볼 수 있다. 먼저, 우리가 Activity이동을 할 때에는 먼저 Intent객..

액티비티 생명 주기(Activity Lifecycle)

이번 글에서는 Activity Lifecycle에 대해서 알아보자. 이전에 안드로이드 4대 컴포넌트에 대해서 글을 썻는데, Activity는 이 중 하나이며 사용자에게 실제로 보여지는 화면이기 때문에 안드로이드에서 가장 기본이 되는 구성요소라고 할 수 있다. 이 Activity는 생명주기를 갖는데, Activity가 만들어지고 사용자에게 보여지고, 없어지는 과정에서 변화하는 상태에 따라 실행되는 콜백 메소드들을 이야기한다. 또한 Activity는 총 세 가지 상태를 가지는데, 이는 아래와 같은 것들이 있다. 1. RESUMED : Activity가 Focus를 가지고(화면 최상단)화면에 보이는 생태이다. 2. PAUSED : Activity가 화면에 보이지만 Focus를 가지지 못한 상태이다. 3. ST..

레이아웃의 종류

서론 안드로이드에서 Activity를 구성하는것은 버튼, 텍스트뷰와 같은 View들이다. 그런데 이러한 View들은 혼자서는 화면에 배치할 수 없고, ViewGroup에 포함된 상태로 위치가 결정되어야 화면에 배치할 수 있다. 또한 여기서 ViewGroup도 View에 포함되기 때문에 ViewGroup안에 ViewGroup이 포함될 수 있다. View와 VIewGroup에 대해서는 아래의 글에서 설명해 놓았으니 참고하시길 바란다. https://angangmoddi.tistory.com/256 View와 ViewGroup 안드로이드에서 사용자에게 실제로 보여지는 UI요소는 크게 View와 ViewGroup으로 이루어져있다. View View는 안드로이드 화면에 보이는 모든 객체들을 말한다. 예를 들면 B..

리스트뷰(List View) vs 리사이클러뷰(Recycler View)

안드로이드에서 목록을 표시하는 View로는 리스트뷰와 리사이클러뷰 두 가지가 있다. 이 글에선 두 View가 어떻게 다른지에 대해서 알아보도록 하자. 리스트뷰와 리사이클러뷰의 차이점 1. ViewHolder 가장 먼저, 리사이클러뷰는 ViewHolder패턴을 사용하는데 반해, 리스트뷰는 이를 사용하지 않는다는 점이 있다. 리스트뷰의 경우 목록에 있는 각 Item마다 이를 구성하는 View들을 findViewById을 통해 연결해주어야 하는데, 이는 상당히 무거운 작업이기 때문에 Item을 생성할 때마다 이런 작업을 하게 되면, 성능 저하가 일어나게 된다. 반면, 리사이클러뷰에선 ViewHolder패턴을 강제로 구현하여 위와 같은 문제점을 해결한다. ViewHolder패턴이란? 각 View를 보관하는 객체..

JAR, DEX, APK, AAR파일

JAR(Java Acrchive) JAR은 해당 플랫폼에서 JAVA 응용 프로그램을 배포하기 위해 고안된 패키지 파일 형식이다. 여기엔 컴파일된 Java클래스 파일과 MANIFEST와 같은 파일이 포함되어 있다. 기본적으로 일부 제한이 있는 ZIP 아카이브 형태이다. DEX(Dalvik Excutable) DEX는 바이너리 파일 형식으로 컴파일된다. .dex파일은 DVM(Dalvik Virtual Machine)용이며, JVM용 .class파일과 유사하다. DEX파일 형식은 실제로 Android SDK의 Dex 컴파일러에 의해 Java CLASS파일에서 생성된다. 이 컴파일러는 JVM바이트코드를 DVM바이트코드로 변환하고, 모든 클래스 파일을 하나의 Dex파일에 저장한다. APK(Android Appli..

View와 ViewGroup

안드로이드에서 사용자에게 실제로 보여지는 UI요소는 크게 View와 ViewGroup으로 이루어져있다. View View는 안드로이드 화면에 보이는 모든 객체들을 말한다. 예를 들면 Button, TextView, EditText, ImageView등등.. 사용자에게 보이는 모든 것들을 View라고 하며, 이들은 View클래스를 상속받고있다. 또한 각각의 View들은 자신이 어디에 배치되어야 하는지에 대한 정보를 갖고있지않다. 때문에 View만으로는 화면에 나타날 수 없으며, View를 화면에 배치하기 위해선 반드시 ViewGroup이 필요하다. ViewGroup ViewGroup은 Group이라는 단어에서 알 수 있듯이 여러개의 View들을 모아놓은 것이라고 할 수 있으며, n개의 View를 담을 수 ..

ANR(Application Not Responding)

ANR? ANR은 안드로이드에서 발생하는 오류 중 하나로 Application Not Responding의 약자이다. 이 오류는 Android 앱의 메인 스레드(UI 스레드)가 너무 오랫동안 차단되면 발생한다. 주로 오랜 시간을 요구하는 작업의 결과를 UI에 반영하려고 할 때 발생하는데, 네트워크 통신을 수행할 때 시간이 오래 걸리면 ANR오류가 발생할 수 있다. ANR이 발생하는 조건은 다음과 같다. 1. App이 사용자의 Input에 5초 이상 반응하지 않을 때 2. BroadcastReceiver가 10초 이내에 작업을 끝내지 못했을 때 위 조건만 봣을 때 단순히 시간이 오래 걸리면 ANR이 발생한다고 생각할 수도 있지만, 이보다는 메인 스레드가 일정 시간 동안 어떤 Task에 잡혀 있으면 ANR이..

View.GONE과 View.INVISIBLE의 차이

안드로이드 프로그래밍을 할 때 개발자는 View의 Visibility를 설정할 수 있다. 이때 View를 보여주려면 View.VISIBLE, View를 숨기려면 View.GONE 또는 View.INVISIBLE을 쓸 수 있는데 여기서 GONE과 INVISIBLE는 둘 다 View를 숨기지만 차이점이 있다. 먼저, INVISIBLE의 경우는 View를 화면에 그리지만 사용자에게 보여주진 않는다. 즉, View가 실질적으로 그려져 있기 때문에 Layout에 공간을 차지하고 있다. 반면, GONE의 경우 화면에 View를 그리지 않고, 때문에 Layout에 공간을 차지하지도 않는다. 때문에 View들을 일렬로 늘어놓은 뒤, 가장 앞에 있는 View의 Visibility를 INVISIBLE로 설정해도 공간은 차..

반응형