전체 글

전체 글

    [ Project ] [ Android ] [ Kotlin ] 콜백 함수

    [ Project ] [ Android ] [ Kotlin ] 콜백 함수

    용어 정리 ✔ 콜백 (Callback) : 이벤트가 발생하면 특정 메소드를 호출해 알려준다. ✔ 리스너 (Listener) : 이벤트가 발생하면 연결된 리스너(핸들러)들에게 이벤트를 전달한다. 하지만 안드로이드에서는 리스너를 1개 밖에 등록하지 못한다는 점에서 콜백이랑 개념이 크게 다르지 않다. ✔ 옵저버 (Observer) : 데이터나 속성의 변경을 감지하여 구독자에게 변경사항을 전달한다. 원리 콜백 패턴이 구체적으로 어떻게 동작하는지 알아보자. ▫ 개발을 하다 보면 다른 클래스의 함수나 변수에 접근해야 할 일이 종종 생긴다. ▫ 위의 그림처럼 A 클래스에서는 동작할 수 없고, B 클래스에서만 동작 가능한 메서드 M을 A 클래스에서 사용하려면 어떻게 해야 할까? ▫ A 클래스에서 인터페이스를 선언하고 ..

    [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] 객체 인스턴스

    액티비티 클래스에서 일반 클래스를 참조 요약 ✔ 다른 클래스에 있는 멤버변수와 멤버함수에 접근하기 위해 인스턴스를 생성하는 방법 ✔ 다른 클래스 객체 인스턴스를 멤버 변수에 넣고 lazy init 했을 때, 같은 인스턴스가 참조되는지 확인 ✔ 런타임 시 한 번 생성되는 companion object에 있는 인스턴스 생성 함수를 각각 호출했을 때, 같은 인스턴스가 참조되는지 확인 코드 MainActivity.kt class MainActivity : AppCompatActivity() { private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) } private val mTest by lazy { test() } override f..

    [Project] [Android] [Kotlin] Log Window

    요약 ◽ 모든 클래스에서 로그 관련 기능을 참조하여 사용할 수 있도록 LogUtil 클래스 구현 ◽ 로그를 앱 내에서 볼 수 있는 로그 윈도우 기능 구현 ◽ 로그 윈도우 터치 드래그앤 드롭 뷰 이동 기능 구현 ◽ 로그 윈도우 첫 등장 위치를 설정하기 위한 뷰의 width, height 구하는 코드 구현 ◽ 로그 윈도우 확대/축소 애니메이션을 사용한 뷰 보이기/숨기기 기능 구현 ◽ 각 클래스마다 TAG 설정하는 방법 및 선언 위치 전체 코드 https://github.com/tmdfyd2020/Android-Sources/tree/main/LogWindow GitHub - tmdfyd2020/Android-Sources: Android Toy Project Codes Android Toy Project C..

    [ Android ] MVVM 패턴

    [ Android ] MVVM 패턴

    들어가기 전에 ✔ 안드로이드 개발을 처음 시작한다면 하나의 액티비티에 모든 코드를 넣어서 개발을 하곤 한다. 이렇게 되면 시간이 지날수록 액티비티가 무거워지며 유지보수가 힘들어진다. 이와 같은 비효율적인 코드를 스파게티 코드라고 한다. ✔ 하나의 액티비티가 무거워지는 것을 방지하며 유지보수가 용이하도록 만들기 위해서 Architecture 패턴이 등장했고, 안드로이드에서 최근에 유행하는 디자인 패턴은 MVVM 패턴이다. ✔ 보다 나은 이해를 위해 MVC 패턴과 MVVM 패턴을 서로 비교하면서 살펴보자. MVC ✔ Model - View - Controller 시나리오 ◽ Controller가 사용자 동작을 받아들인다. (텍스트 입력, 버튼 터치 등) ◽ Controller가 사용자의 동작에 따른 Mode..

    [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..