일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- RecyclerView
- 안드로이드스튜디오
- Github
- Retrofit
- 코틀린
- dart
- 레트로핏
- flow
- 웹뷰
- MVVM
- build
- 코루틴
- studio
- 깃헙
- Kotlin
- 의존성주입
- 안드로이드
- 안스
- 유튜브
- ADB
- Gradle
- 안드로이드 스튜디오
- Android
- WebView
- coroutine
- 에러
- error
- image
- 스튜디오
- viewpager
- Today
- Total
목록전체 글 (164)
코딩하는 일용직 노동자
LiveData는 안드로이드에서 UI 스레드에서 데이터 변경 사항을 관찰하는 데 사용되는 유용한 클래스입니다. value와 postValue는 모두 LiveData의 값을 변경하는 데 사용되는 메서드이지만, 작동 방식과 스레드 처리 측면에서 중요한 차이점이 있습니다. 1. value 사용: 메인 스레드에서 직접 호출: value는 메인 스레드에서 직접 호출되어 LiveData 값을 변경합니다. 즉각적인 값 반영: value 변경은 즉시 UI 관찰자에게 전달됩니다. 스레드 안전성 문제: value는 메인 스레드에서만 호출해야 하며, 백그라운드 스레드에서 호출하면 예외가 발생할 수 있습니다. 코드 간결성: 간단한 값 변경 작업에는 value 사용이 더 간결하고 명확합니다. 2. postValue 사용: 백그..

잘 사용하던 GitKraken 에서 github repository pull/push 를 하려고 하니 난데없이 에러가 발생했다. 우선 GitHub 에서 Developer settings > Personal access tokens > Tokens(classic) 에서 토큰을 확인해보니 만료일이 없는 토큰이었다. 하아... 구글링을 해보니 Generate new token 으로 새로운 토큰을 만들어서 등록하라는 방법도 있긴 했지만.. 이미 기간한정이 없는 토큰이 있으니 이것을 확인해보았다. 대충 필요해보이는 권한을 체크를 한 후 Update token 을 눌렀다. GitKraken 에서 Preferences > Integrations > GitHub 를 선택한 후 Disconnect 를 누른 후 다시 Co..

1. 프로젝트의 보기방식을 모든 파일이 다 보이는 Project로 변경하면 .idea 폴더가 보입니다. 만약 보이지 않는다면 탐색기나 파인더를 이용해도 됩니다. 해당 폴더 아래에 libraries 폴더가 있고 그 안을 보면 dependency 관련 xml 파일이 잔뜩 있습니다. 해당 파일을 모조리 삭제해줍니다. 2. android studio 에서 메뉴 -> File -> Invalidate Cache / Restart.. 를 선택하고, android studio 를 다시 실행합니다. 3. android studio 가 다시 실행되면 메뉴 -> Build -> Rebuild project 를 눌러서 프로젝트를 다시 빌드합니다. 요렇게 실행하면 import 에 cannot resolve 오류가 발생하지 않..
안드로이드 코루틴에서 launchWhenStarted, launchWhenCreated, launchWhenResumed는 액티비티 또는 프래그먼트의 라이프 사이클에 따라 코루틴을 실행하는 함수입니다. 각 함수의 작동 방식: launchWhenStarted: 액티비티 또는 프래그먼트가 시작되면 코루틴을 실행합니다. 액티비티 또는 프래그먼트가 일시 중지되거나 중지된 후 다시 시작되면 코루틴은 다시 시작되지 않습니다. launchWhenCreated: 액티비티 또는 프래그먼트가 생성되면 코루틴을 실행합니다. 액티비티 또는 프래그먼트가 일시 중지되거나 중지된 후 다시 시작되면 코루틴은 다시 시작되지 않습니다. launchWhenResumed: 액티비티 또는 프래그먼트가 다시 시작될 때 코루틴을 실행합니다. 액..

StateFlow 와 SharedFlow 의 차이점에 대해 알아보겠습니다. StateFlow는 상태(State)를 표현하기 때문에 초기값이 필요하고 하나의 값만 업데이트할 수 있습니다. StateFlow는 .value에 상태값을 넣어서 업데이트를 합니다. SharedFlow는 초기값이 없습니다. SharedFlow는 emit() 으로 이벤트를 전달합니다. StateFlow 와 SharedFlow를 테스트해보기 위해 MainViewModel을 만들고 아래처럼 테스트코드를 구성했습니다. import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.delay import kotlinx.c..
callbackFlow는 콜백 함수를 사용하여 데이터 스트림을 생성하는 코루틴 플로우 함수입니다. 비동기 작업을 수행하고 데이터를 스트림 방식으로 제공하는 경우에 유용합니다. 작동 방식: callbackFlow 함수는 콜백 함수를 인수로 받습니다. 콜백 함수는 데이터가 사용 가능할 때마다 offer 함수를 호출하여 데이터를 제공합니다. callbackFlow 함수는 데이터 스트림을 생성하고 반환합니다. 구독자는 collect 함수를 사용하여 데이터 스트림을 수집합니다. 장점: 비동기 작업을 쉽게 코루틴 플로우와 함께 사용할 수 있습니다. 데이터 스트림을 백프레셔 방식으로 제공하여 메모리 누수를 방지할 수 있습니다. 콜백 함수를 통해 데이터 스트림을 유연하게 제어할 수 있습니다. 단점: callbackFl..
1. 데이터 스트림 방식: MutableStateFlow: 단일 구독자를 위한 유니캐스트 데이터 스트림입니다. 최신 값만 유지하며, 새 값이 방출되면 이전 값은 덮어쓰됩니다. MutableSharedFlow: 여러 구독자를 위한 멀티캐스트 데이터 스트림입니다. 모든 구독자는 최신 값을 받으며, 버퍼링을 통해 이전 값도 받을 수 있습니다. Channel: 여러 구독자를 위한 멀티캐스트 데이터 스트림입니다. 버퍼링을 통해 데이터를 저장하며, 여러 구독자가 동시에 데이터를 읽고 쓸 수 있습니다. 2. 구독 방식: MutableStateFlow: collect 함수를 사용하여 구독합니다. MutableSharedFlow: collect 또는 subscription 함수를 사용하여 구독합니다. Channel: r..
Coroutine Operator(코루틴 연산자)는 데이터 스트림을 처리하고 변환하는 데 사용되는 함수입니다. 크게 두 가지 종류로 나눌 수 있습니다. 1. 중간 연산자: 데이터 스트림을 변환하거나 필터링하는 데 사용됩니다. 여러 개의 연산자를 체인 방식으로 연결하여 사용할 수 있습니다. 대표적인 연산자로는 map, filter, take, zip 등이 있습니다. map: 각 데이터를 변환하여 새로운 데이터 스트림을 생성합니다. filter: 특정 조건에 맞는 데이터만 선택하여 새로운 데이터 스트림을 생성합니다. take: 지정된 개수의 데이터만 가져옵니다. zip: 두 개의 데이터 스트림을 결합하여 새로운 데이터 스트림을 생성합니다. buffer: 데이터 스트림을 버퍼링하여 처리 속도를 향상시킵니다. ..

액티비티나 프래그먼트 내에서 ViewModel을 사용하려면 ViewModelProvider를 이용해 ViewModel을 생성해 사용할 수 있습니다. ViewModel을 생성할때는 파라메터가 있을때와 없을때의 생성방법이 차이가 있습니다. 파라메터가 없는 ViewModel은 아래처럼 생성이 가능합니다. val viewModel: MainActivityViewModel by lazy { ViewModelProvider(this)[MainActivityViewModel::class.java] } 하지만 MainActivityViewModel의 생성자에 파라메터가 있다면 위 방법으로 객체생성이 안됩니다. 테스트를 위해 Int형의 파라메터를 받는 MainActivityViewModel 클래스를 만들어보겠습니다. i..

기본적인 Compose로 구현하는 화면은 상단에 statusBar가 있고 아래에 navigationBar가 있는 형태입니다. modifier에 statusBarsPadding() navigationBarsPadding()를 추가해서 상단과 하단의 영역을 제외한 나머지 영역을 사용하도록 합니다. 하지만 요즘은 이 영역을 모두 사용해서 더 이쁘게 앱을 만드는 추세입니다. Jetpack Compose에서 전체화면을 사용해 컨텐츠를 표시하는 방법을 알아보겠습니다. 코드를 통해 확인해봅시다. @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @Composable fun MyScreen() { Scaffold { Column( modifier = Modifier ..