본문 바로가기

분류 전체보기

(94)
[Layout] CoordinatorLayout CoordinatorLayout 이란?위와 같이 Title과 같은 Toolbar를 상단에 크게 구성하며, 스크롤 시 Title만 남기고 나머지는 사라지는 효과를 주는 레이아웃이다. 반대로 스크롤하면 다시 나타난다. 구조 CoordinatorLayout의 구조는 위와 같다. 1. AppBarLayout: Toolbar를 포함한 상단을 다양한 방법으로 크게 구성하고 싶을 때 사용하는 레이아웃주로 이미지와 toobar를 조합하여 사용한다.  ex) 넷플릭스  app:fitsSystemWindows : 가능한 영역까지 확장해주는 기능    2. CollapsingToolbarLayout: 스크롤 시 접히는 부분으로 해당 레이아웃에서 고정 View를 제외한 나머지 View들은 스크롤 시 사라진다.AppBarLay..
[Kotlin] 정렬 1. sort() 와 sorted()sort() 는 Mutable 상태에 사용하는 메서드이다.sorted()는 Immutable 상태에 사용한다.List는 Immutable 상태이므로 List에 sort()를 사용하면 오류가 발생한다.반대로 Mutable한 Array에 sorted를 사용하면 문제 없이 정렬이 수행된다. 다만, sort()는 기존에 있던 배열 또는 ArrayList에 정렬을 수행시켜주지만sorted()는 정렬된 배열 또는 리스트를 반환한다.val array = arrayOf(4, 3, 2, 1)array.sort()// array : [1, 2, 3, 4]val array2 = arrayOf(4, 3, 2, 1)val newArray2 = array2.sorted()// array2 : ..
추상 클래스 우리가 기존에 사용하던 클래스의 구조는 다음과 같다. class A { private val a = 0 public fun method(){...} } 당연히 A 클래스에 대한 객체를 생성할 수 있고, 객체에 대한 메서드 또한 문제 없이 사용할 수 있다. 추상 클래스는? 반면 추상 클래스의 구조는 다음과 같다. 필드 일반 메서드 추상 메서드 abstract class A { // 필드 lateinit var name: String val age = 20 fun normalMethod(){...} // 일반 메서드 abstract fun method() // 추상 메서드 abstract fun method2(){...} // 오류 발생 } A를 추상 클래스, method 함수를 추상 메서드라고 한다. 추상..
[안드로이드] 안드로이드 버전과 SDK 안드로이드 버전 Windows 버전과 마찬가지로 안드로이드 또한 OS 버전이 존재한다. 안드로이드 버전에 맞춰 SDK(API Level) 또한 업데이트 되며, 버전마다 사용할 수 있는 기능들이 달라지게 된다. 때문에 이전 버전에서 잘 되던 기능이 다음 버전에서 안되는 경우 또한 발생하기도 한다. 안드로이드 버전은 핸드폰 설정 > 휴대전화 정보 > 소프트웨어 정보에서 확인할 수 있으며, S24 기준 안드로이드 14 버전이 설치되어 있다. S23의 경우 출시 당시 13에서 현재는 14로 업데이트 되었다. SDK SDK란 Software Development Kit의 약자로 소프트웨어 개발 도구로 사용되고 있다. SDK에는 개발을 하는데 필요한 각종 코드와 문서들이 포함되어 있다. 안드로이드 프로젝트에 bui..
[안드로이드] Hilt Hilt는 DI 라이브러리 중 하나로 기존에 존재하던 의존성 주입 라이브러리인 Dagger를 보다 쉽게 사용할 수 있도록 만든 도구입니다. Hilt의 목표 Android App을 위한 Dagger 관련 인프라 간소화 표준화 된 컴포넌트 세트와 스코프로 앱 간의 설정, 가독성 및 이해도, 코드 공유를 쉽게 만들기 앱 간의 설정, 가독성 및 코드 공유를 용이하게 하기 위한 표준 컴포넌트 및 스코프 생성 쉬운 방법으로 다양한 빌드 타입에 대해 다른 바인딩 제공 특징 Dagger2 기반 라이브러리 표준화된 Dagger2 사용법 제시 보일러플레이트 코드 감소 프로젝트 설정 간소화 쉬운 모듈 탐색과 통합 개선된 테스트 환경 Android Studio의 지원 AndroidX 라이브러리의 호환 종속 항목 추가 buil..
[안드로이드] Dependency Injection (DI) DI는 Dependency Injection의 약자로 의존성 주입이라고 한다. 의존성이란? 의존성은 하나의 클래스에서 다른 객체를 참조하는 것을 말한다. 다음 예시를 보면 class A { val B_Class = B() } class B { ... } 클래스 A가 B를 참조하고 있다. 이때 우리는 클래스 A가 B를 의존하고 있다고 한다. DI (의존성 주입) 의존성이 높으면 유지보수 및 테스트가 어려워진다. 따라서 클래스 내부에서 객체를 참조하는 것이 아닌 외부에서 참조시켜주는 것을 의존성 주입, DI라고 한다. 방법은 다음과 같다. A, B 클래스 외의 새로운 매개체를 하나 생성한 뒤, 그 매개체를 통해서 의존성을 관리해주는 것이다. 이 매개체를 Inversion Of Control ( IOC ) 이..
[안드로이드] Coroutine Flow https://developer.android.com/kotlin/flow?hl=ko Android에서의 Kotlin 흐름 | Android Developers 이 페이지는 Cloud Translation API를 통해 번역되었습니다. Android에서의 Kotlin 흐름 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 코루틴에서 흐름은 단일 값만 developer.android.com Flow는 여러 값을 순차적으로 내보낼 수 있는 기능이다. Flow은 코루틴 기반으로 빌드되며, 비동기식으로 계산할 수 있는 데이터 스트림의 개념이다. 데이터 스트림에는 3가지 항목이 있다. 생산자 : 스트림에 추가되는 데이터를 생산 중개자 : 데이터 수정 ( 선택사항 ) 소비자 : 데이터 ..
[안드로이드] 코루틴 코루틴(Coroutine)코루틴은 Kotlin에서 지원하는 비동기 처리 기술이다. 코루틴은 멀티 스레딩 문제를 간소화 된 비동기 작업 방식으로 처리하기 위해 개발되었으며,스레드 내 Context switching 없이 여러 코루틴을 실행, 중단, 재개하는 상호작용을 통해 병행성(동시성)을 갖기에 스레드와 메모리 사용이 줄어들고 개발자가 직접 작업을 스케줄링 할 수 있도록 한다.즉, 코루틴은 스레드가 아닌 스레드 내에서 동작하는 작업 방식이다. 장점경량( Lightweight ):  코루틴은 실행 중인 스레드를 차단하지 않는 정지(suspend)를 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있고, 동시 작업을 진행하면서 차단보다 메모리를 절약할 수 있다.suspend fun func() 메모리 누..
[안드로이드] 동기와 비동기 동기와 비동기 동기(Synchronous): 동기란 어떠한 순차적인 작업 A, B, C가 있을 때, A작업이 끝날 때까지 B와 C작업이 대기 즉, 한 번에 하나씩 작업을 처리하는 방식이다. 비동기(Asynchronous): 비동기란 A가 작업 중이여도 B와 C를 작업할 수 있는 상태, 즉, 자원을 효율적으로 사용하여 여러가지 작업을 진행할 수 있는 방식이다. 비동기 방식을 사용해야 하는 이유 사실 간단한 소규모 프로젝트에서는 비동기 방식을 사용하지 않아도 어떠한 문제가 없었을 것이다. 그러나 대규모, 플랫폼 단위로 넘어가면 다양한 작업들이 많아질 것이다. 예를 들어, 어떠한 네트워크 작업이 이루어지는데 이 작업이 생각보다 오래걸린다면 사용자는 이 네트워크 작업이 다 이루어질 때까지 해당 어플을 사용하지 ..
[프로젝트] 정각에 해야지 - 알림 오류 프로젝트 명 : 정각에 해야지 목표 : 스케쥴과 하루 루틴을 입력하고, 루틴에 대해서는 해당 시간에 알림을 보내 규칙적인 생활을 하기 위함 첫번째 문제 테스트용으로 루틴을 1~2분 뒤로 맞춰놓고 테스트하면 정상적으로 실행 그러나 다음날이 되면 알림이 밀려 앱을 실행하면 울리거나 울리지 않는 오류 발생 찾아보니 debug모드가 아닌 release모드로 컴파일하는 것을 추천하여 keystore를 생성하여 release모드로 컴파일 하였다. 테스트 결과 1~2분, 30분까지도 정상적으로 작동하였고, 다음날 9시에 루틴을 설정해놓고 기다렸다. 9시 5분.. 기다려도 알림이 오지 않아 앱을 실행했더니 알림 발생 똑같은 시간 밀림 현상이 발생했다. 안드로이드 공식문서에 따르면 (3번째 문단) https://deve..