개발 이모저모 7

[안드로이드] 귀찮니즘이 만들어 준 contains() 함수 응용

이번 프로젝트에서 웹에서 내려주는 link, url, scheme, javainterface을 가지고 앱에서 동작을 분기하거나 특정 페이지를 보내야 하는 작업을 하였다. param, host, scheme 같은 경우에는 Uri.parse()를 통해서 getQueryParmeter, scheme, host를 사용하면 되지만 단순 문자열 포함 체크 시에는 contains()를 사용한다. 하지만 각 웹 팀마다 대문자, 소문자 규칙이 달라서 contains() 함수에서 분기 처리가 잘못되는 버그가 발생하였다. 따라서 각 팀끼리 합의하에 모두 대문자로 치환 후 포함 체크를 하자고 해서 uppercase()를 사용하였다. 대문자 치환을 위해서 반복되는 uppercase() 함수 사용은 귀차니즘을 발동시켰다. 귀차니..

개발 이모저모 2022.12.20

시작일부터 종료일 표현해보기

개발을 하면서 어떠한 정보의 시작일과 종료일 표시를 해야할 때가 있다. 대부분은 시작일 및 종료일을 각각 시간날짜 데이터를 받아 SimpleDateFormat을 사용해서 원하는 형태(yyyy-MM-dd, yyyy.MM.dd)로 표현한다. // 20221225 val format1 = SimpleDateFormat("yyyyMMdd") // 20221225 val format2 = SimpleDateFormat("yyyy.MM.dd") 만약 여기서 아래와 같은 조건이 추가된 유틸 함수를 한번 만들어 보았다. 시작일과 종료일의 년도가 같을 경우 종료일의 년도는 yyyy에서 앞에 두개 yy를 제거(2022 -> 22) 시작일과 종료일의 년도가 다를 경우 시작일, 종료일 모두 년도 표시 시작일과 종료일이 같으면..

개발 이모저모 2022.12.15

카카오 주소 및 키워드 api를 활용한 주소 검색 서비스 제작

위치 서비스를 제공하는 앱이면 주소 검색 및 위치 검색 기능이 있기 마련이다. 배달의 민족, 요기요, 여기어때 등이 대표적이다. 이번에 기획팀에서 내 위치 주변의 매장만 보여줬던 기능에서 업그레이드하여 유저가 검색한 위치의 매장도 보이도록 기능을 추가해달라고 하였다. 주소 검색 서비스에서 정부 api, 카카오 api, 네이버 api 등 많은 오픈소스가 존재하였지만 이번 위치 검색은 카카오 api 기반으로 개발해 보았다. API 선정 통합 검색 기능의 Firebase Event Log 바탕으로 유저들의 위치에 관한 검색 케이스를 분석한 결과 크게 건물명, 주소 크게 두 가지 케이스로 검색하였다. 건물명? 주소? 그게 뭐가 달라? 라고 할 수 있지만 아래와 같이 예를 들면 검색 결과는 같아도 검색어는 다르다..

개발 이모저모 2021.11.16

지도에 중복 위경도 마커를 찍어보자

기획자와 개발자의 어느 대화... 🙋‍♂️ 매장의 위경도가 같으면 지도에 찍는 마커 위에 위경도가 중복되는 매장의 개수를 표시해주세요. 다만, 중복 위경도가 아니면 일반적인 마커를 찍어주시면 됩니다. 🙎🏼‍♂️ 네...? 지금 그러면...서버에서 내려주는 데이터에서 위경도에서 중복인 것을 묶어야겠네요! 한번 만들어 보겠습니다.(험난한 여정이 되겠군...) 기존 지도 매장 정보 데이터 data class StoreItem( @SerializedName("id") val id: Long, @SerializedName("name") val name: String, @SerializedName("latitude") val latitude: Double, @SerializedName("longitude") val..

개발 이모저모 2021.11.16

SharedPreference를 이용한 최근 검색어 리스트 만들기

검색 기능을 만들 때 부과적인 기능으로 최근 검색한 키워드를 저장하는 최근 검색어 기능을 만들어 보았다. 최근에 검색한 단어를 저장하는 방법은 백엔드에 저장하는 방법, Room, SharedPreference, SQLite를 사용하여 로컬에 저장하는 방법이 있다. 이번 개발에는 SharedPreference를 사용해서 개발하였다. 설계 최근 검색어 리스트는 ArrayList형으로 만들어서 JsonString형으로 변환시켜 저장한다. 기능 검색어 저장 기능 이전에 검색했던 검색어일 경우 이전 데이터 삭제 후 저장 기능 키워드 전체 삭제 및 개별 삭제 기능 검색어 저장 시나리오 유저가 검색어를 입력한다. 입력한 검색어가 이전에 저장되어 있는지 확인한다. 이전에 저장되어 있는 경우 → 이전에 입력되어 있는 데..

개발 이모저모 2021.11.16

HTTP 통신 로그 이쁘장하게 찍어보기

Retrofit2를 개발할 때 OkHttp3을 이용하여 HTTP 통신에 타임아웃, 쿠키, 로그 등 옵션을 설정할 수 있다. 여기서 로그 옵션을 설정하게 되면 HTTP 통신 요청과 응답 값을 로그를 통해서 알 수 있다. 하지만 로그에서는 pretty하게 프린트되지 않아서 가독성이 떨어진다. 이러한 로그를 pretty하게 출력되도록 하는 방법이 있다. HTTP 통신 로그 pretty하게 찍는 방법 HTTP 통신 로그를 pretty하게 찍기 위해서는 HttpLoggingInterceptor에 인자로 커스텀 클래스(CustomHttpLogging)를 넘겨야 한다. val interceptor = HttpLoggingInterceptor(CustomHttpLogging()) class CustomHttpLoggi..

개발 이모저모 2021.11.16

흔들어봐! 새로운 화면이 열릴꺼야~

스타벅스 어플에는 Shake Pay라는 기능이 있다. Shake Pay는 계정에 스타벅스 카드를 등록한 경우 앱에서 디바이스를 흔들면 등록한 카드의 바코드가 생성되어 결제할 수 있는 기능이다. 단순히 신기함에서 넘어갈 수도 있지만 이를 응용하여 흔들면 결제 바코드 화면으로 전환되는 기능을 한번 만들어 보았다. 동작 원리 안드로이드에서는 많은 센서를 지원하는 데 그중 하나인 SensorEventListener 클래스가 있는데 이게 바로 Shake Pay의 핵심이다. Shake Pay를 실행하려는 Activity에 SensorEventListener 인터페이스를 상속하여 가속도 감지 및 외부의 충격량과 방향 감지를 해서 이벤트를 발생시킨다. - SensorEventListener란? SensorEventLi..

개발 이모저모 2021.11.16