여러 Fragment와 Activity를 연결하며 내가 만든 custom class 타입 객체를 통째로 넘길 일이 생겼다! 똑같이 Intent에 담아 넘기려고 했지만 빨간줄이 생겼고, 몇가지 추가 작업이 필요한 것을 알게 되었다🤔 Serializable (vs Parcelable) Serializable은 객체 직렬화를 위한 표준 Java의 인터페이스이다 인터페이스임에도 불구하고 구현해줘야할 메소드가 없기 때문에 아주아주 간단하게 사용이 가능하다 하지만 처리과정에서 다수의 추가 객체를 생성하므로 생성 저하를 발생시킬 수 있다고 한다 Parcelable은 직렬화를 위한 Android SDK인데, 필수적으로 구현해줘야 하는 메소드가 있으므로 보일러 플레이트가 발생하게 된다 성능은 Parcelable가 더 좋..
프로세스와 스레드 어플리케이션 구성 요소가 시작되면 안드로이드 시스템은 하나의 실행 스레드로 어플리케이션 서비스를 시작한다 기본적으로 같은 어플리케이션의 모든 구성 요소는 하나의 프로세스와 스레드에서 실행된다 (메인 스레드) 구성 요소가 시작되었는데 이미 해당 어플리케이션의 프로세스가 존재할 경우 해당 프로세스 안에서 같은 스레드를 사용한다 필요할 경우, 어플리케이션의 구성 요소가 다른 프로세스로 실행될 수 있고 프로세스에 스레드를 추가로 만들 수 있다 ✔️ 프로세스 운영체제에 의해 메모리에 적재되어 실행중인 프로그램 ✔️ 스레드 프로세스 내에서 실제로 작업을 수행하는 독립적인 주체 ✔️ 멀티 스레드 하나의 프로세스 내에서 두 개의 스레드가 동작하는 것 메인스레드 (UI 스레드) 어플리케이션 실행 시 시..
Activity의 LifeCycle 안드로이드 앱은 여러개의 액티비티가 연결되어있는 구조라고 볼 수 있고, 각 액티비티는 생명주기에 따라 관리된다 액티비티의 클래스는 다음과 같이 6개의 콜백 함수를 제공한다 ✔️ onCreate() 어플리케이션 최초 실행 시 가장 처음으로 한 번 실행되는 함수 해당 Activity의 생명주기 중 딱 한번만 실행되며 viewModel연결과 인스턴스 생성 등 초기화 작업을 이 안에서 실행하면 된다 onCreate() 메소드를 실행 완료하면 Activity는 시작됨 상태에 진입한다 onCreate 함수에 항상 매개변수로 있는 savedInstanceState는 이전 Activity의 상태를 가지고 있는 Bundle객체이다 ex) 세로에서 가로로 화면회전시, onDestroy(..
안드로이드 4대 컴포넌트 안드로이드 앱은 독립된 형태로 존재하며, 고유의 기능을 수행하는 Component(컴포넌트)로 구성되어있다 Activity, Service, Broadcast Receiver, Content Provider 4가지 유형으로 존재한다 각 컴포넌트는 Intent를 통해 서로 상호작용한다 ✔️ Activity (액티비티) UI를 담당하는 컴포넌트이며 사용자와의 상호작용을 담당한다 모든 안드로이드 어플리케이션은 반드시 하나 이상의 Activity를 가진다 LifeCycle 메소드를 재정의하여 원하는 기능을 정의할 수 있다 각 Acitivity는 Manifest에 등록되어 있어야 한다 하나 이상의 view 또는 ViewGroup을 가질 수 있다 두 개의 Activity를 동시에 화면에 보..
Room Room은 구글에서 제공하는 공식 ORM(Object-realational mapping)이다 Room 라이브러리를 사용하면 실행 기기에 앱 데이터 캐시를 만들고 네트워크 연결 여부와 관계없이 보여지게 할 수 있다! Room은 그림과 같은 3가지 요소들로 구성된다 DataBase : 데이터베이스 접근 지점을 제공하며 DAO를 관리한다 Dao : 데이터베이스에 접근할 수 있는 함수들이 정의되어 있으며 이 함수들은 쿼리문을 이용해 구현해줘야 한다 Entity : 데이터베이스 내의 DB 테이블을 나타낸다 Room 적용하기 ✔️build.gradle(app) dependencies { def room_version = "2.2.5" implementation "androidx.room:room-runt..
의존성 주입 (Dependency Injection) 이란❓ 구성 요소간의 코드 내부가 아닌 외부에서 의존 객체를 생성하여 넘겨주는 디자인 패턴중 하나이다 // 내부에서 멤버로 생성 class Person{ private val dog = Dog() fun walk(){ dog.walk() } } fun main(args: Array) { val person = Person() person.walk() } 먼저 위의 경우 Dog 클래스의 인스턴스를 Person 클래스 내부에서 생성해서 사용하게 된다 이 때, Person 클래스는 Dog 클래스에 의존성을 가지고 있다고 할 수 있는데 Dog 클래스에 변화가 생기면 Dog클래스를 참조하는 모든 클래스를 수정해줘야 한다 // 외부에서 생성자로 주입 class ..
AAC (Android Architectire Components) 안드로이드 아키텍처 구성요소는 테스트와 유지관리가 쉬운 앱을 디자인하도록 돕는 라이브러리의 모음이다 앱의 수명 주기를 관리하여 구성 변경을 유지하고 메모리 누수를 방지하며 UI에 쉽게 데이터를 로드할 수 있게 해준다 현재 AAC는 아래 5개 라이브러리를 제공한다 LifeCycle LiveData ViewModel Room Paging 아래의 그림은 아키텍처 컴포넌트들이 상호작용하는 순서를 나타낸 그림이다 ViewModel MVVM 패턴에서 ViewModel은 Repository와 View를 연결해주는 다리 역할을 한다 ViewModel에서는 UI를 위한 데이터를 가지고 있으며, 화면 회전과 같이 구성을 변경할 때도 데이터를 유지할 수 있..
BaseActivity 개발을 하다보면 모든 Activity에서 공통적으로 만들어줘야하는 변수들이 있다 이 변수들을 파일마다 만들어주는 번거로운 과정을 생략하기 위해서 Base 패키지에 필수적인 내용이 들어있는 파일을 만들어놓고, Activity 등에서 해당 파일을 상속하여 사용한다 BaseActivity.kt 추상클래스로 정의되어있다 abstract로 정의된 변수인 layoutResID와 viewModel은 상속받은 activity에서 반드시 재정의 해줘야한다 layoutResID는 setContentView로 호출할 Layout 파일을 말한다 viewModel은 Activity에서 viewModel로 쓸 변수이다 abstract class BaseActivity : AppCompatActivity()..