전체 글

전체 글

    [Android] View와 ViewGroup의 관계

    (1) View 안드로이드에서 사용자가 눈으로 보는 모든 것은 View이다. 화면의 기본적인 컴포넌트라고 얘기 할 수 있다. TextView, ImageView, EditText, ... 등 자주 쓰는 모든 UI 관련된 컴포넌트는 View라는 클래스를 상속 받는다. public class Button extends TextView { .... } public class TextView extends View implements OnPreDrawListener { .... } 그림과 코드에서 보이는 것과 같이, 최상단에 View가 있으며, 모든 UI 관련 컴포넌트는 결국 View를 상속받아 구현된다. View 안에 View를 포함할 수 있으며, 중첩하여 사용 할 수 있다. (2) ViewGroup View..

    [Android, Kotlin] Broadcast Receiver에서의 비동기 백그라운드 작업

    Broadcast Receiver의 경우, onReceive() 함수가 실행 중일 때 시스템에서는 해당 프로세스를 포그라운드 프로세스로 간주하여 심각한 메모리 부족이 아닌 이상 프로세스를 종료시키지 않고 수행한다. onReceive() 함수의 코드가 모두 실행된 뒤 반환을 마치고 나면 비활성 상태로 간주되어 프로세스의 우선순위가 낮아지게 된다. 이는 리소스가 부족할 경우 해당 Broadcast Receiver 프로세스가 onReceive 함수가 완료되기 전에 강제 종료 될 수 있음을 의미한다. 간단한 ACTION_POWER_CONNECTED와 같은 Action 경우에는 짧은 시간 내에 onReceive 함수의 수행을 완료하므로 영향이 없으나, onReceive 함수가 오랜 시간에 걸친 백그라운드 작업을 ..

    [Android, Kotlin] 새로운 Activity를 시작 했을 때의 Lifecycle? Android Activity Lifecycle에 대한 이해

    안드로이드 앱에서 화면 UI를 구성하는 고정된 화면이자 사용자의 진입점이 되어주는 Activity에는 생성과 소멸에 관한 Lifecycle이 존재한다. Activity의 Lifecycle에 대한 이해는 사용자가 앱에서 어떤 행동을 취할 지 모르는 상황에서의 대비를 명확하게 하는 데에 큰 도움을 준다. 예를 들어, 사용자가 앱을 사용 중 전화를 받는다거나 다른 앱으로의 전환 등의 동작을 할 때 우리가 만든 소중한 앱은 어떤 상태로 바뀌는지 알아야 할 것이고, 앱이 백그라운드 상태에 있을 때 어떤 행동을 취해야 하는지를 정의하는 데에 있어 Lifecycle에 대한 이해는 필수적이다. Activity와 Fragment는 비슷하지만 조금 다른 Lifecycle을 가지고 있다. 이번 글에서는 Activity의 L..

    [Android, Kotlin] Gradle / build.gradle(project)와 build.gradle(module) 차이

    안드로이드 앱 개발을 위해 안드로이드 스튜디오에서 프로젝트를 생성하면 함께 따라오는 녀석이 있다. 너무나 당연하게 있어서 익숙한 이것이다. *.gradle 파일들은 대체 무엇일까? Gradle은 작성한 소스 코드와 의존성 라이브러리들을 묶어서 APK 등 배포할 수 있는 형태로 패키징 해주는 빌드 배포 도구 (Build ToolKit) 이다. Android 공식 문서를 참고해보자. 공식 문서에서 알 수 있듯이, Gradle은 안드로이드 스튜디오와는 독립적으로 실행된다. 안드로이드 스튜디오에는 별도의 빌드 툴킷이 존재하지 않으므로, 안드로이드 스튜디오는 빌드 툴킷으로 Gradle을 채택하여 사용하는 것이다. 안드로이드 스튜디오는 IDE(Integrated Development Environment, 통합 개..

    [Kotlin] Class, Interface 새로 배운 학습 정리

    (1) 기본/보조 생성자 (constructor) - 기본적인 접근 제어자는 public이다. public으로 사용 할 땐 constructor 키워드 생략 가능하다. - 멤버 변수로 사용하고자 할 때에는 기본 생성자에서 val 또는 var 키워드를 붙인다. class MyClass(name: String) // name은 기본적으로 public 형태를 가진다. class YourClass(val name: String) // name은 YourClass의 멤버 변수 - 보조 생성자를 통해 다양한 형태의 생성자를 만들 수 있다. - 보조 생성자를 통해 멤버 변수에 값을 할당하기 위해서는 위 기본 생성자와 같이 val, var를 붙일 수 없다. - 보조 생성자의 매개변수를 직접 클래스의 멤버 변수에 할당해..

    [Kotlin] Type, String, Array 새로 배운 학습 정리

    (1) Type - 원시 타입(Primitive Type) : 변수에 할당 될 때 메모리 상에서 고정된 크기로 할당되며, 원시 데이터의 값을 보관. 값이 저장된 메모리 영역에 직접적으로 접근. [Access By Value] - 참조 타입(Reference Type) : 크기가 정해져 있지 않고 값이 직접 변수에 할당되지 않고 값이 저장되어 있는 Heap Memory의 주소값을 가짐. [Access By Reference] - Stack (정적 메모리 영역) : 변수의 실제 값을 저장하는 영역. 객체 내 메소드 작업 종료 시 메모리 공간은 비워진다. - Heap (동적 메모리 영역) : 런타임 시 메모리에 동적으로 할당되는 영역. 참조 변수가 없으면 가비지 컬렉터에 의해 메모리가 정리될 수 있다. 가비지..

    [Android, Kotlin] apply, also, let, with, run의 사용 - 범위 지정 함수

    Kotlin을 사용 할 때, 범위 지정 함수인 apply, also, let, with, run은 간결한 코드와 가독성을 위해 자주 사용하게 된다. 그러나 이 5가지 범위 지정 함수를 사용 할 때 어떤 차이점이 존재하는지 뚜렷하게 알지 못한 채 사용하게 되는 일이 많다. 알지 못하고 쓰면 모두 비슷한 기능을 하는 것 같은 5가지 범위 지정 함수의 차이와 사용 규칙을 확실히 이해하고 올바르게 사용하고자 한다. 각 함수들을 비교하기 전에, 5가지 차이점을 단박에 이해할 수 있는 좋은 표 하나를 보도록 하자. [호출 시 수신 객체 입력] * 명시적 전달 with가 수신 객체의 명시적 전달에 해당된다. with의 Definitions를 보면, 매개변수를 통해 receiver: T를 명시적으로 전달함을 알 수 있..

    [Android, Kotlin] Recycler View 안에 Recycler View 넣기, 중첩 RecyclerView

    토이프로젝트로 영화 박스오피스 앱을 만들면서 꽤나 시간이 걸렸던 부분에 대해 기록한다. 본 영상처럼 Vertical Grid RecyclerView 안에 Horizon Linear RecyclerView를 넣도록 구현하고자 했다. class HomeAdapter : RecyclerView.Adapter() { private var data: List = emptyList() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return when (viewType) { TYPE_HEADER -> HeaderViewHolder(ItemHeaderBinding.inflate (LayoutInfl..

    [Android, Kotlin] 앱 내에서 위치 권한 받기 (Location Permission)

    //Manifest 각각 GPS, Network를 통해 위치를 받아올 수 있게 하는 Permission이다. manifest 최상단에 추가하여 권한에 접근 할 수 있도록 한다. private lateinit var locationManager: LocationManager private lateinit var locationListener: LocationListener private val locationPermissionLauncher = registerForActivityResult (ActivityResultContracts.RequestMultiplePermissions()) { permissions -> val responsePermissions = permissions.entries.filt..

    [Android, Kotlin] Back Stack을 활용한 Fragment 뒤로가기 버튼 동작, Fragment 전환 애니메이션

    간단한 기분 테스트 앱을 만들며 Fragment를 다룰 일이 많았다. MainActivity 하나만을 두고 Fragment를 통한 화면 구성을 하는 Single Activity 형식으로 구현하면서 더더욱 Fragment를 많이 건드리게 되었다. ​ Fragment를 다루며 막혔던 부분에 대한 포스팅을 남긴다. ​ 1. Fragment 전환 시 (show 또는 replace) 뒤로가기 버튼을 누르면 이전 Fragment가 아닌 앱이 꺼져버린다. 2. Fragment 전환 시 애니메이션을 넣고싶다. 1. Solution Back Stack 활용 Fragment는 기본적으로 하나의 Activity에 종속되어 재사용되는 화면의 조각(Fragment)으로, Fragment를 stack 형식으로 쌓고 back bu..