본문 바로가기

전체 글111

Android Kotlin WebSocket 웹소켓 이해하기 1. WebSocket이란?먼저 HTTP 프로토콜 통신은 아래와 같이 단방향으로 통신이 이뤄진다.- 클라이언트가 서버에 요청- 서버가 응답하여 클라이언트에게 요청값을 토해냄 그러나 웹소켓은 서버와 클라이언트가 실시간으로 메세지를 주고받는다. 양방향 통신이 이뤄져서 빠르고 한번 연결을 맺으면 쭉 유지된다.2. WebSocket을 써야하는 이유채팅, 좋아요 등 실시간으로 이뤄지는 작업들은 웹소켓으로 하는것이 좋다. HTTP 통신은 GET, POST 등 단순하게 주고받는 경우 괜찮을 수있다. 그런데 Retrofit은 HTTP 통신을 기반으로 작동하므로, 실시간 채팅이나 즉각 카운팅이 필요한 경우에는 Android 에서도 웹소켓을 구현해야한다. Retrofit만으로는 네트워크 통신이 불안정 할 수있다. (실제 .. 2024. 6. 3.
Android Kotlin ProcessCameraProvider 커스텀 카메라를 만들기 전에 우선 Preview 화면을 비동기 방식으로 구현해보았다.  1. 초기 코드는 아주 기본적인 프리뷰를 구현하기 위해서 공식문서에서 알려준 방법을 기준으로 작성해보았다.  private fun startCamera() { val cameraProviderFuture = ProcessCameraProvider.getInstance(requireContext()) cameraProviderFuture.addListener({ val cameraProvider = cameraProviderFuture.get() val preview = Preview.Builder().build().also { .. 2024. 6. 2.
Android Kotlin redundant sam constructor observer push 하려던 중에 Lint를 확인하니 redundant sam constructor라는 경고 표시가 되어있어서 확인해보았다. redundant sam constructor: 옵저버에 나온 경고표시였다.  SAM :  인터페이스에 구현된 함수가 1개일 경우에는 생략가능하다! 알고보니까 Observer는 단일 함수를 구현하는 인터페이스였다. 회색으로 표시된 Observer를 제거했다./** * A simple callback that can receive from [LiveData]. * * @see LiveData LiveData - for a usage description.*/fun interface Observer { /** * Called when the data is changed.. 2024. 6. 1.
Android Kotlin Unit Test 작성하기 커스텀 카메라의 Permission 값을 LiveData로 그때마다 읽어서 해당 경우에 맞게 동작하게끔 구현했다.그러나 실제로 내가 ViewModel을 정확하게 쓰고있는지에 대해 의문이 생겼다.그걸 해소하기위해 JUnit을 이용하여 나의 viewmodel이 정확하게 동작하는지 확인해보려고한다. 1. dependencies 추가dependencies { val jUnit_version = "4.13.2" val androidXTest_version = "1.5.0" val mockitoCore_version = "5.12.0" val mockitoKotlin_version = "3.2.0" val mockito_version = "1.13.2" val arch_verison.. 2024. 5. 29.
Android Kotlin SurfaceView SurfaceView란?SurfaceView는 초당 프레임이 순식간에 바뀌는 카메라 미리보기나 게임, 영상 등 애니메이션이 들어간 경우에 사용하는 View이다.SurfaceView는 Surface라는 별도의 메모리 공간에 그림을 그린다. (UI 스레드가 아니다.) 별도의 스레드로 그림을 그리기때문에 UI 스레드에서 과부하가 걸리는걸 막아준다. SurfaceView의 장점 : 더블 랜더링안드로이드에서는 오직 UI스레드만이 View 그릴 수 있다.  View를 다 그릴때까지 UI스레드는 아무것도 할 수없다. 심지어 그림을 그리는 과정이 전부 노출되기때문에 이미지가 찢어진다던가 버벅거리는 현상이 유저에게 보여질 수 있다. UI스레드 혼자 작업하는 것을 싱글 버퍼링이라한다. 그런데 SurfaceView를 이용하.. 2024. 5. 19.
Dart의 Collection - List, Map 다트의 배열은 다른 언어들과 아주 비슷하다. List, Map역시 코틀린과 유사한 역할로써 기능을 다하고있다.컬렉션List순서가 있는 데이터 컬렉션. 인덱스라는 개념을 활용해서 데이터 요소에 접근 할 수 있음.Mapkey 와 value의 한 상으로 데이터를 저장하는 컬렉션. 각 키는 고유하며 키를 통해 검색 가능하다.List numbers = [];List numbers2 = [1, 2, 3, 5, 6];Map scoreMap = {}; //빈 맵 생성Map scoreMap2 = { '오렌지' : 100, '사과' : 30, '포도' : 30};voi.. 2024. 3. 13.