일일회고 ?? 벌써 11월이다 끝나는 날이 2주 밖에 남지 않았다.. 열심히 달려보자.. 오늘의 키워드 기술면접 문답 1. 비동기 프로그래밍이 무엇인지, 왜 사용해야하는지 설명해주세요 작업을 하나씩 순서대로 수행하는 행위인 동기적 프로그래밍의 반대 개념으로 여러 작업을 동시에 실행하는 것을 뜻한다. 이러한 작업은 일반적으로 시간이 많이 걸리는 작업(파일 읽기/쓰기, 네트워크 통신, 데이터베이스 쿼리 등)일 때 유용하다. 특히 안드로이드는 메인 쓰레드에서 앱의 사용성과 직결되는 UI를 조작하기 떄문에, 메인쓰레드에서 위와 같이 시간이 많이 걸리는 작업을 실행하면 앱은 ANR(Application Not Responding) 에러가 발생 할 것이다. (동기 처리 하는 중에는 화면에 아무 반응이 없음)이를 통..
일일 회고 힘들다 ㅎㅎ.. 오늘의 키워드 트러블 슈팅 트러블 슈팅 원인 스크롤 뷰에 kakaoMap을 두기 위해 FrameLayout를 두었는데 스크롤 뷰에 의해 kakao 의 포커스가 가지않아 맵 스크롤을 통해 맵을 제어 할 수 없는 현상을 발견함 → 스크롤 뷰 하위에 스크롤 가능한 객체가 또 있어 상위 스크롤 뷰에만 포커스가 가있어서 그랬다고 생각 해결 과정 티맵 뷰 위에서 스크롤 뷰 터치 시 스크롤을 막기 위해 FrameLayout을 커스텀하여 구현해서 FrameLayout에 TouchEvent시 FrameLayout위에서 터치 시에는 touchListener를 달아서 상위 스크롤 뷰의 스크롤을 반응을 막아서 해결함 package com.nbcamp.tripgo.util import android...
일일 회고 폭풍 피드백을 받았다... 이걸 토대로 프로젝트를 탄탄하게 해보고 최종 발표 떄 남김없이 발표해보자! 오늘의 키워드 firestore transaction firestore transaction 오늘은 파이어베이스 트랜잭션에 대해서 알아보자 먼저 파이어 스토어 트랜잭션이란 1개 이상의 문서에 대한 읽기 및 쓰기 작업의 집합이라고 파이어베이스 문서에 나타나있다. 파이어스토어에서 정의하는 트랜잭션의 정의 였고, 데이터베이스에서 다루는 트랜잭션의 개념을 함께 보면 이해가 더 쉬울 것이다. 트랜잭션 - 트랜잭션(Transaction)은 데이터베이스의 상태를 변환 시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 한꺼번에 모두 수행되어야..
오늘의 키워드 이전에 수행 했던 토글 그룹 트러블 슈팅 원인 Single Selection 속성이 되어있는 Toggle Button을 클릭 시, 클릭 이전의 상태가 같이 넘어오는 현상을 발견하였다. 버튼 클릭 상태가 바뀔 떄 이전 버튼이 꺼지는 상황과 클릭한 버튼이 켜지는 상황이 생겨 리스너가 2번 불리는 것 같았다. 해결 과정 addButtonClickListener 안에 isChecked라는 속성이 있다. reviewWritingGenderButtonGroup.addOnButtonCheckedListener { group, checkedId, isChecked -> } isChecked는 현재 버튼이 체크 되어있는 지 여부를 반환해준다. 그룹화된 토글 그룹을 작업 할때는 다음과 같이 수행 해주어야 한..
일일 회고 점점 더 못쓰고 있다.... 시간 짬내서 해보자... 오늘의 키워드 기술면접 자문자답 enum 은 무엇인가요? 열거형(enum)은 서로 관련 된 상수들의 집합을 정의하는 데이터 타입이다. 예를 들면, 요일, 색 등 고유 값을 나타낼 수 있는 것들에 적용해 볼 수 있다.여러 개의 상수를 선언하고 열거된 값을 조건에 따라 선택할 수 있는 특수한 클래스이고, 자료형이 동일한 상수를 나열할 수 있다 .enum class 이므로 각 열거형 상수에 값을 할당할 수 있고, 메소드를 정의할 수도 있다.이렇게 열거형(enum class)을 사용함으로써, 코드의 가독성과 유지보수성을 향상시킬 수 있다. enum class의 강점은 when을 사용 할 때 나오는데, 모든 형식을 처리할 수 있기 때문에 각 상수에 ..
일일 회고 오늘의 키워드 기술면접 자문자답 자문자답 1. Kotlin이 정적 타입 언어라고 하는데 이유가 무엇일까요? 정적 타입 언어라는 것을 알기 위해서는 정적 타입 언어에 대한 개변과 동적 타입 언어의 개념도 함께 알아야 한다. 정적 타입 언어란 컴파일 타임(빌드)에서 타입 검증하는 언어이다. 반면에 동적 타입 언어는 컴파일 타임에 타입 검증을 하지 않고 런타임, 즉 프로그램 실행 중에 타입 검증을 한다. var a = 1 // int 형 선언 a = "123" // String 값 대입 위는 간단한 예제인데, 코틀린에서 작성해보면 바로 에러 표시(Type Mismatch)가 뜰 것 이다. 이런 간단한 예제로 코틀린이 정적 타입 언어라는 것을 알 수 있다. 근데 한 가지 의문점이 있다. 따로 타입을 ..
일일 회고 차분히... 천천히...하자.. 오늘의 키워드 SingleLiveEvent 트러블 슈팅 SingleLiveEvent LiveData - View와 ViewModel사이 통신을 편리하게 하기 위해 사용하는 Observable한 객체 View는 ViewModel 의LiveData의 변화를 감지하고 이를 Observing하여 View의 상태를 업데이트 한다. 즉, 화면에 연속적으로 표시 되는 데이터에 적합하다. 여기서, 사용자의 이벤트 같은 것을 생각해보자 버튼 클릭, Snackbar, toast, dialog 등 이벤트에 의해서 발생하는 행위들을 봐보자 이들은 사용자의 행위에 의해 1번씩 클릭 되거나, 발생하는 컴포넌트들이다. 여기서 이것들을 LiveData를 사용하서 observing하면 연속적..
일일 회고 오늘의 키워드 리뷰 작성 flow 작성 flow 이미지를 가져오기 위해 갤러리 접근 권한을 얻는다. 이미지 및 리뷰 항목을 작성한다. 등록 버튼을 누른다. 이미지를 먼저 파이어 스토어에 저장한다. 저장을 성공하면 ReviewWritingModel의 imageUrl 값을 업데이트한다. (실제 접근할 imageUrl로 만듦) 업데이트 성공하면 firestore에 리뷰를 저장한다.(업데이트) 저장을 성공하면 CalendarUserModel의 isReviewed 값을 업데이트 한다 (리뷰가 작성된 상태로 만듦) 이미지를 가져오기 위해 갤러리 접근 권한을 얻는다.33 이상 버전은 READ_MEDIA_IMAGES, 이하 버전은 READ_EXTERNAL_STORAGE 권한을 통해 갤러리에 접근 할 수 있다..
일일 회고 오늘의 키워드 트러블 슈팅 원인 공공 데이터 api에서 가져온 image url의 로딩 속도가 너무 느림 실험 - LTE 기준 약 4분 +추가 - 다른 이미지도 로딩 속도가 낮에 비해 굉장히 느려졌음 (작성 시각 오전 12:30) 인터넷 문제였던 것으로 판단, 하지만 그래도 사용자 관점에서 보았을 떄,이미지가 로딩 되는 속도가 느렸음 해결 과정 캐싱이란? 캐싱은 파일 사본을 캐시 혹은 임시 저장소에 저장해서, 보다 빠르게 접근할 수 있도록 하는 하나의 프로세스 파일 또는 데이터 사본을 임시 저장하는 위치를 범용적으로 캐시라고 부름 디스크 캐시? 메모리 캐시? 디스크 캐시는 디스크(RAM)로부터 읽은 내용을 일부 보존해두는 메모리 영역을 말한다. 메모리 캐시는 보통 CPU 내부에 있는 작지만 빠..
일일 회고 바쁘다 바빠 오늘의 키워드 트러블 슈팅 원인 공공 데이터 api에서 가져온 image url의 로딩 속도가 너무 느림 실험 - LTE 기준 약 4분 +추가 - 다른 이미지도 로딩 속도가 낮에 비해 굉장히 느려졌음 (작성 시각 오전 12:30) 인터넷 문제였던 것으로 판단, 하지만 그래도 사용자 관점에서 보았을 떄,이미지가 로딩 되는 속도가 느렸음 해결 과정 캐싱이란? 캐싱은 파일 사본을 캐시 혹은 임시 저장소에 저장해서, 보다 빠르게 접근할 수 있도록 하는 하나의 프로세스 파일 또는 데이터 사본을 임시 저장하는 위치를 범용적으로 캐시라고 부름 사용하고 있는 이미지 라이브러리인 Coil의 Caching을 적용 class App : Application() { override fun onCreat..