본문 바로가기

안드로이드47

신입 개발자가 처음으로 사고친 썰 그날은 왠지 코딩을 하고 싶은 날이었다. 누구나 그렇듯 매일 나도 컨디션이 오르락 내리락 하고 공부를 해야겠다는 자극 또한 매번 다르게 느낀다. 아마 그날은 그 주기가 적절히 겹쳤을 때 컨디션도 좋은데 공부에 대한 자극 또한 상한가를 쳤을 때였다. 회사에 가서 코딩 좀 해볼까? 처음에는 카페에 가서 코딩을 할까 생각했다. "어라? 근데 생각해 보니까 회사에 가면 에어컨도 빵빵하고 눈치 안 보고 오래 있을 수 있잖아?" (주말이었기 때문에 회사에는 사람이 없었다) 알고 있다. 주말에 자진해서 회사를 가는 바보가 어디 있을까? 하지만 말했듯이 내 컨디션과 공부자극이 최대치였기 때문에 가능했다. (이때 이 미친 짓을 멈췄어야 하는데... 🤦🏻‍♂️) 사람도 없겠다 노래를 빵빵하게 틀어놓고 신나게 코딩을 했다... 2023. 11. 11.
결제 구현 중 productDetailsList가 empty list를 받아오는 이유 1. 증상 2. 원인 및 해결 방법 2-1. 타이밍 이슈 2-2. 플레이 콘솔에 상품을 제대로 등록했는가? 2-3. 패키지명이 일치하는가? 1. 증상 요즘 구독 결제 기능을 개발하고 있는데 플레이 콘솔에 등록된 상품 정보를 불러오지 못하는 이슈가 있었다. 코드를 정확히 짚어서 말해보자면 private fun querySubscriptionProductDetails() { val params = QueryProductDetailsParams.newBuilder() val productList: MutableList = arrayListOf() for (product in LIST_OF_SUBSCRIPTION_PRODUCTS) { productList.add( QueryProductDetailsParams... 2023. 11. 2.
세상에... 소수점 대신 콤마를 쓰는 나라가 있다니! 지금 충전 기능이 안 된대요! 평화로운 어느 날, cs 채널에 외화 충전이 안된다는 문의가 들어왔다. 새로운 버전 앱을 배포한 지 얼마 안 되어서 설마 이번 버전에 문제가 있나 했지만 아무리 생각해 봐도 코드에는 문제가 없었다. 만약 문제가 있다면 다른 사용자들도 똑같은 증상이 있었을 텐데... 우리 팀은 사용자분께서 보내주신 화면 녹화 파일을 계속 돌려보았다. 한참을 보다가 사수 개발자분께서 한마디를 내뱉으셨다. 어? 여기가 왜 콤마로 되어있지? 사용자분의 앱 화면에는 예를 들어 1,400.23 이라고 적혀있어야 할 값이 1.400,23 이라고 적혀있었다. 소수점과 콤마 위치가 바뀌어있었던 것이다. 그래서 검증 로직을 통과하지 못했던 것 (녹화 화면을 보고 이를 알아챈 사수님도 눈썰미가 정말 대박이신 .. 2023. 10. 31.
뭐? 앱을 강제로 가로로 돌릴 수 있다고? 어라? 우리 앱은 가로모드를 지원하지 않는데... 어느 날 Firebase Crashlytics에 비정상 종료 이벤트가 올라왔다. 로그를 쭉 읽어보니 특정 페이지에서 앱을 가로방향으로 돌렸을 때 발생할 수 있는 Exception 이였다. 우리 회사 앱은 가로 방향을 지원하지 않기 때문에 고려하지 않았던 부분이었다. 정말 이해할 수 없었다. 왜냐하면 우리 앱은 세로방향으로만 사용할 수 있도록 되어있기 때문이다. 대체.. 이 사용자들은 우리 앱을 가로로 어떻게 돌린 거지????? 발생할 수 없는 상황이라 어떻게 문제를 해결해야 하나 고민하던 도중 단서를 하나 발견할 수 있었다. 바로 비정상 종료를 겪은 사용자들이 전부 갤럭시 폴드를 사용하고 있었던 것! 그래서 폴드라는 단서를 기준으로 원인을 찾기 시작했다... 2023. 10. 29.
[이펙티브 코틀린] 5장. 객체 생성 1. 생성자 대신 팩토리 함수를 사용하라 2. 기본 생성자에 이름 있는 옵션 아규먼트를 사용하라 3. DSL 1. 생성자 대신 팩토리 함수를 사용하라 (206p ~ ) 1-1. 팩토리 함수란? 객체를 만드는 방법에는 여러 가지가 있다. 다양한 생성 패턴이 있으므로 상황에 맞게 사용하면 된다. 그중 하나인 팩토리 함수에 대해 알아보자. interface HelloMessage { fun hello(name: String): String } class HelloMessageKor : HelloMessage { override fun hello(name: String): String { return "안녕하세요 $name 님" } } 환영 인사를 해주는 HelloMessage라는 interface가 있고 이를.. 2022. 12. 5.