오늘의 키워드 이전에 수행 했던 토글 그룹 트러블 슈팅 원인 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..

일일회고 오늘의 키워드 구현 고민 트러블 슈팅 구현고민 행사의 참여자 수 자체를 제공하는 api는 없어, 어떻게 해야 인기 있는 행사를 가져 올 지에 대한 논리를 직접 생각 해봐야 했다. 처음 flow는 아래와 같이 생각하였다. SK API를 통해 데이터 제공 가능 여행지 목록을 가져옴 (123개의 여행지(시군구)) SK API를 통해 123개의 시군구 코드를 통해 월 별 추정 여행자 수를 가져옴 --> 매번 123개의 정보를 가져오는 것은 비효율적 -> 미리 저장 assets 상위 10개를 뽑아냄 상위 10개에서 도를 뽑아냄 행사 검색 api를 이번 달의 행사 정보를 가져온 후 상위 10개의 도 이름으로 필터링 한 후 앞의 10개를 가져옴 뿌려줌 그런데 sk 국내 여행자 수 api로 많이 월 별 추정 ..

일일 회고 기획 쭉 하고, UI 구현하고 있다. 쓸 시간이 정말 없다.... 오늘의 키워드 CI (Continuous Integration) 합쳐진 코드를 빌드하고, 코드가 컨벤션에 맞춰졌는지 일일이 확인하는 것은 굉장히 귀찮고 시간이 오래 걸리는 작업이다. 그래서 Pull Request를 할 시, 코드가 잘 빌드 되는지 코틀린 컨벤션은 맞춰졌는지를 테스트해보기 위해 간단한 CI를 구성하여 코드를 관리해보고자 하였다. CI란? CI(Continuous Integration) 지속적인 통합이라는 의미이다. 개발을 진행하면서도 품질을 관리할 수 있도록 하는 것으로 여러 명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리할 수 있음을 의미한다. CI가 없다면 한 사이클의 개발을 마치고 pul..
일일 회고 심화 프로젝트까지 마쳤다! 다음주부턴 최종 프로젝트이다. 5주짜리인만큼 확실히 해보자 오늘의 키워드 피드백 알고리즘 피드백 더보기 ViewPager2 사용 안하기.... 횡 스크롤 리사이클러뷰와 함께 사용하면 UX적으로 좋지않음 카테고리 비어있을 때, 디폴트 값을 주면 좋을 것 같음 or 선택 유도 UI 유튜브 댓글 정말 좋았음, 무한 스크롤 UI가 인상 깊었음 검색어 입력 시 키보드에 탭레이아웃이 따라오지 않도록 하면 좋을 것 같음 쇼츠 괜찮았음 시연이 길긴 했으나 내용이 많아서 좋았다. 알고리즘 [BOJ-17213][백준 17213] 과일 서리 [SILVER-2][Solved by Kotlin] 입력 및 출력 입력: 첫째 줄에 과일의 종류 수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄에..