Android/Concept

    [Android] [Kotlin] Object

    Object 객체 선언 (Object declaration) Singleton 패턴 ✔ 클래스에 대해서 앱 전체에서 한 개의 인스턴스만 갖도록 하고, 전역 범위에서 해당 인스턴스에 접근할 수 있도록 만든 디자인 패턴 ✔ 한 번의 객체 생성으로 모든 클래스가 공유할 수 있기 때문에 메모리 낭비를 줄일 수 있으며, 객체 로딩 시간이 줄어들어 성능이 향상된다. ✔ 자바의 싱글톤 패턴 구현 코드 public class SingleTon { private static SingleTon instance; private SingleTon() { } public static synchronized SingleTon getInstance() { if (instance == null) { instance = new Sin..

    [Android] [Kotlin] Context

    [Android] [Kotlin] Context

    Context란? ✔ 애플리케이션 환경에 대한 전체 정보를 받을 수 있는 추상 클래스 ✔ 애플리케이션과 관련된 정보에 접근하거나 애플리케이션과 연관된 시스템 레벨의 함수를 호출할 때 필요 ✔ 애플리케이션의 현재 상태 Context의 구조 ✔ Context는 추상 클래스이므로 이를 사용하기 위해서는 구현 클래스가 필요하다. ✔ 기본적인 구현 클래스는 ContextImpl이지만, 이는 사용자에게 노출하지 않고 ContextWrapper로 감싸져 있다. Context의 종류 Application Context ✔ 싱글톤 객체로 애플리케이션 전체의 생명 주기와 연결되어 있어 앱 시작부터 앱 종료까지 살아 있다. ✔ 현재 Context와 분리된 Context가 필요한 경우에 사용한다. applicationCont..

    [Android] [Kotlin] 파일 입출력

    [Android] [Kotlin] 파일 입출력

    저장소의 종류와 권한 ✔ 안드로이드는 리눅스 기반의 파일 시스템으로 구성되어 있으며, 설치된 앱 하나당 사용자 아이디와 디렉터리가 할당되며, 디렉터리는 해당 사용자만 접근할 수 있다. ◽ KaKao 앱은 루트 디렉터리 밑 /data/data/KaKao 디렉터리에 설치된다. ◽ 앱을 설치할 때 KaKao라는 사용자도 함께 생성되는데, KaKao 사용자는 시스템의 다른 앱이나 디렉터리에는 접근할 수 없고, 오직 /data/data/KaKao 디렉터리에만 읽고 쓰는 권한이 있다. 내부 저장소(앱별 저장 공간) ✔ 앱을 설치하면 /data/data/[패키지명] 디렉터리가 자동으로 생성되며, 해당 디렉터리에 한해서만 권한 없이 읽고 쓸 수 있다. ✔ 내부 저장소 파일들은 스튜디오 오른쪽 하단의 Device Fil..

    [Android] [Kotlin] Retrofit

    [Android] [Kotlin] Retrofit

    사전작업 레트로핏 공식 사이트 https://square.github.io/retrofit/ Retrofit A type-safe HTTP client for Android and Java square.github.io 레트로핏을 위한 준비사항 데이터를 가져올 곳(웹 사이트 또는 API 서버) 결정 ✔ 예제에서는 Github API 중에서 사용자 정보를 검색하고 사용자 정보의 저장소를 보여주는 API를 다룰 예정이다. https://docs.github.com/en/rest GitHub REST API - GitHub Docs docs.github.com 어떤(표준 프로토콜) 데이터를 사용할 것인지 데이터의 형식을 결정 ✔ HTML은 구조가 복잡해서 짧은 시간에 분석하고 처리하기에는 불가능한 수준의 프로..

    [Android] [Kotlin] 네트워크

    [Android] [Kotlin] 네트워크

    HTTP URL의 구조 HTTP의 구조 HTTP 요청 방식 HTTP 응답(상태) 코드 앱 만들기 build.gradle implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9' AndroidManifest.xml activity_main.xml 더보기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 cs MainActivity.kt class MainActivity : AppCompatActivity() { va..

    [Android] [Kotlin] 콘텐트 리졸버

    [Android] [Kotlin] 콘텐트 리졸버

    콘텐트 리졸버란? ✔ 콘텐트 리졸버는 다른 앱에서 콘텐트 프로바이더를 통해 제공하는 데이터를 사용하기 위한 도구이다. ✔ 안드로이드에 있는 연락처, 갤러리, 음악 파일과 같은 기본 데이터를 이용하는 용도로 미리 만들어져 있는 콘텐트 프로바이더로부터 데이터를 가져오는 도구가 콘텐트 리졸버이다. 콘텐트 리졸버 사용하기 ✔ 안드로이드는 미디어 정보를 저장하는 저장소 용도로 MediaStore를 사용한다. ✔ MediaStore 안에 각각의 미디어가 종류별로 DB의 테이블처럼 있고, 각 테이블당 주소가 하나씩 제공된다고 이해하면 된다. ✔ 미디어의 종류마다 1개의 주소를 가진 콘텐트 프로바이더가 구현되어 있다고 생각하면 된다. ✔ 콘텐트 리졸버로 미디어 정보를 읽어오는 과정은 아래와 같다. // 데이터 주소 지..

    [Android] [Kotlin] 서비스

    [Android] [Kotlin] 서비스

    서비스란? ✔ 메인 스레드를 사용하는 화면이 없는 액티비티 ✔ New - Service - Service로 새로운 서비스를 만들면 AndroidManifest.xml 파일에 가 등록된다. 서비스 시작 방식에 따른 분류 Started 서비스 ✔ startService() 메서드로 호출하며 액티비티와 상관없이 독립적으로 동작할 때 사용한다. ✔ Started 서비스가 이미 동작 중인 상태에서 Started 서비스의 재시작을 요청할 경우, 새로 만들지 않고 생성되어 있는 서비스의 메서드를 호출한다. MainActivity.kt class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.o..

    [Android] [Kotlin] 코루틴

    [Android] [Kotlin] 코루틴

    코루틴이란? ✔ 코루틴에서 스레드는 단지 코루틴이 실행되는 공간을 제공하는 역할을 한다. ✔ 실행 중인 스레드를 중단시키지 않기 때문에 하나의 스레드에 여러 개의 코루틴이 존재할 수 있다. ◽ 코루틴 1이 작업을 하는 도중에 코루틴 2로 코드를 넘겨도 코루틴 1만 잠시 멈출 뿐, 공간을 제공한 스레드는 계속 움직인다. ✔ 만약 이러한 구조를 스레드에서 처리한다면 다음과 같다. ◽ 1번에 해당하는 스레드가 잠시 멈추고 2번 스레드가 처리하도록 우선순위를 넘겨준다. 이러한 스레드 간 전환을 컨텍스트 스위칭이라고 하며, 스위칭이 자주 일어날 경우 성능 저하가 발생한다. 코루틴은 이런 컨텍스트 스위칭을 하나의 스레드에서 처리하므로 성능 저하가 적고, 동일한 구조에서는 스레드보다 훨씬 적은 자원을 소모한다. 코루..

    [Android] [Kotlin] 스레드와 루퍼

    [Android] [Kotlin] 스레드와 루퍼

    시작하기 전에 ✔ 프로세스 : 시스템상의 실행 중인 프로그램. 독립된 메모리 공간을 할당받는다. ✔ 스레드 : 하나의 프로세스 상의 독립적인 실행 흐름 ✔ 하나의 프로세스는 멀티 스레딩을 지원한다. 따라서, 다수의 스레드로 동시적 처리가 가능하다. ✔ 하나의 프로세스 안에서 동작하는 스레드들은 프로세스의 메모리 공간을 공유할 수 있다. 메인 스레드 (UI 스레드) ✔ 안드로이드 시스템은 새로운 앱을 실행하면 새로운 리눅스 프로세스를 시작한다. ✔ 메인 스레드는 화면의 UI를 그리는 처리를 담당한다. 백그라운드 스레드 ✔ 메모리 이외의 다른 곳에서 데이터를 가져오는 모든 작업을 백그라운드 스레드에서 처리하는 것을 권장 ✔ 백그라운드 스레드는 UI 구성 요소에 접근하면 안 된다. Thread 객체 overr..

    [Android] [Kotlin] Room 데이터베이스

    [Android] [Kotlin] Room 데이터베이스

    Room 데이터베이스란? ✔ 복잡한 쿼리를 잘 몰라도 SQLite를 코드 관점에서 접근할 수 있는 ORM 라이브러리 Room 추가하기 build.gradle Room 버전 https://developer.android.com/jetpack/androidx/releases/room Room | Android 개발자 | Android Developers Room Room 지속성 라이브러리는 SQLite에 추상화 레이어를 제공하여 SQLite를 완벽히 활용하면서 더 견고한 데이터베이스 액세스를 가능하게 합니다. 최근 업데이트 현재 안정화 버전 다음 버전 후보 developer.android.com RoomMemo 클래스 정의하기 RoomMemo.kt ✔ 데이터베이스의 테이블과 속성 값을 지정해주기 위한 클래스..