일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SharedPreference
- ToyProject
- ViewPager2
- Kotlin
- Coroutine
- repositories
- Backup Manager
- retrofit
- github
- sdk33
- 안드로이드
- ViewModel
- Android13
- constraintlayout
- compose
- statusbar
- Mocky
- 피그마
- mvvm
- CoroutineScope
- AndroidStudio
- systembar
- TabLayout
- Emulator fails to Launch
- MVI
- Android
- GPT
- php
- LinearLayout
- Swiftshader
- Today
- Total
목록Dev/Study (9)
Kwaang Tech

TatgetSdk = 34인 상태에서 갤러리에서 가져온 이미지를 사용 하려고 하니 권한이 거부 되는 현상이 발생했다. Target SDK를 33 이상으로 변경하게 된다면 기존 READ_EXTERNAL_STORAGE 권한에 대한 세분화가 진행 된다.기존에 READ_EXTERNAL_STORAGE 권한만 적용되어 있다면, TargetSDK 33부터는 필요에 따라READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO 에 대한 권한들을 Manifest에 선언해 주고 해당 이름의 권한으로 권한 요청을 진행해야 한다. AndroidManifest.xmlAndroid 13 이상 에서 사용할 READ_MEDIA_IMAGES 과 미만에서 사용할 READ_EXTERNAL_STO..

Mocky개발자들이 HTTP 응답을 커스텀할 수 있게 해주는 온라인 서비스입니다. API나 웹 서비스를 개발할 때, 실제 서버의 응답을 모방(mock)하여 테스트할 필요가 있을 때 유용하다.Mocky 바로가기1.내가 필요한 Json형식의 코드를 미리 작성한다.{ "music": [ { "track": "Oh My Gawd", "streamUrl": "https://ncsmusic.s3.eu-west-1.amazonaws.com/tracks/000/001/626/oh-my-gawd-1707181251-EF5wcXQo8R.mp3", "singer": "Crushed Candy", "coverUrl": "https://ncsmusic.s3.eu-west-1.amazo..

CoroutineScope와 launch 함수CoroutineScopeCoroutineScope는 코루틴이 실행될 범위를 정의한다. 이는 코루틴의 생명주기를 관리하고, 코루틴이 어느 부분에서 실행되어야 할지를 결정한다.예를 들어, Activity나 Fragment와 같은 UI 컴포넌트에서는, 해당 컴포넌트의 생명주기에 맞춰 코루틴이 시작되고 종료되어야 하므로, lifecycleScope나 viewModelScope와 같은 특정 스코프를 사용한다.launch 함수launch는 새로운 코루틴을 시작하는 함수이다. 이 함수는 CoroutineScope 안에서 호출되며, 이 스코프 내에서 코루틴이 실행된다.launch는 비동기 작업을 시작하고, 즉시 제어를 호출자에게 반환한다. 이로 인해 메인 스레드가 차단되지..

스레드(Thread)한 개의 프로그램(프로세스)에서는 많은 스레드를 동시에 처리 할 수 있다.그리고 프로세스의 메모리 또한 공유한다.프로세스로부터 각 메모리를 할당 받은 스레드는 독립적으로 실행 된다.안드로이드 역시 1개의 앱(프로그램)에서 여러개의 스레드를 사용할 수 있는데,예를 들어음악을 들을 때,다운로드를 받을 때,푸쉬 알림 등 이 모두 스레드를 이용한 기능이다.UI에 접근하기메인 스레드엑티비티를 포함해 모든 컴포넌트가 실행되는 오직 1개만 존재하는 스레드메인 스레드의 제약사항화면의 UI를 그리는 처리를 담당UI와 상호 작용하고, 이벤트 결과를 사용자에게 보여줌UI 이벤트 등 작업에 일정시간 동안 응압이 없으면 , ANR 팝업 표시 (ANR : 응용 프로그램이 응답하지 않는 것)즉 사용자가 불편함을..

1.분리된 관심사 (Separation of Concerns) 'ViewModel' 은 뷰의 로직과 데이터를 처리하는 역할을 한다. 이를 통해 뷰와 비즈니스 로직을 분리할 수 있어 코드의 가독성이 향상되고, 재사용성과 테스트 용이성이 높아진다. 2. 재사용성 'ViewModel' 은 뷰와 분리되어 있기 때문에 여러 뷰에서 동일한 ViewModel을 재사용할 수 있다. 뷰의 구체적인 구현에 의존하지 않기 때문에 여러 UI 컴포넌트에서 동일한 로직과 데이터를 쉽게 사용할 수 있다. 3. 테스트 용이성 'ViewModel' 이 뷰의 구체적인 구현에 의존하지 않기 때문에 단위 테스트를 수행하기가 훨씬 쉽다. 뷰와의 상호작용 없이 'ViewModel' 의 로직과 데이터 처리를 테스트할 수 있다. 4. 라이프 사이..

앱 아키텍쳐 패턴 안드로이드 앱을 개발할 때, 이용할 수 있는 여러 아키텍쳐 패턴들이 있다. MVC (Model View Controller) MVP (Model View Presenter) MVVM (Model View ViewModel) MVI (Model View Intent) 기타 이름들을 보면 M(Model)과 V(View)를 공통적으로 가지고 있다. Model - 데이터 or 데이터를 생성하거나 업데이트 View - UI or 화면을 표시 Logic들이 커지고 복잡해짐에 따라서 의존성이 더 강해지고, 결국 앱을 유지 보수하기가 점점 더 어려워 지게 된다. 이러한 문제들을 해결하기 위해 여러 패턴들이 나왔고, 결국 M-V 사이의 관계를 어떻게 처리하느냐에 따라 패턴들을 구분을 짓는다. MVC(M..

ViewPager2스와이프로 화면전환을 할 수 있는 기존 ViewPager의 개선버전 ViewPager2는 기존 ViewPager 대비 기능 개선 및 세로 방향으로도 페이징이 되는 등의 장점이 있다.ViewPager2를 사용해야 하는 이유는 구글에서 기존 ViewPager는 더 이상 개발 지원을 하지 않고, ViewPager2의 사용을 권고하고 있기 때문임.Gradle 설정ViewPager2를 사용하기 위해 Gradle에 아래와 같이 추가dependencies { ... implementation 'androidx.viewpager2:viewpager2:1.0.0'}각 뷰페이지에 등록할 Fragment 생성FirstFragment.ktclass FirstFragment : Fragment() ..

LinearLayout수평 또는 수직 방향으로 컴포넌트를 배열하는 레이아웃android:orientation 속성을 사용하여 수평(horizontal) 또는 수직(vertical)으로 설정할 수 있음컴포넌트는 순차적으로 배치android:layout_weight 속성을 사용하여 각 컴포넌트의 크기를 가중치를 통해 조절할 수 있음ConstraintLayout유연하고 복잡한 레이아웃 설계를 가능하게 해주는 최신 레이아웃컴포넌트 간의 제약 조건(Constraints)을 정의하여 위치와 크기를 결정함여러 레이아웃의 중첩을 줄이고 복잡한 디자인을 단순화하는 데 유용함Android Studio의 레이아웃 에디터에서는 드래그 앤 드롭 방식으로 컴포넌트의 제약 조건을 쉽게 설정할수도 있음두 레이아웃의 차이점복잡성: L..