1. Google Service 추가프로젝트의 build.gradle 파일에 Google 서비스 플러그인과 Google 로그인 라이브러리를 추가해야합니다.// Project-level build.gradleplugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("com.google.gms.google-services")}dependencies { //firebase implementation(platform("com.google.firebase:firebase-bom:32.7.0")) implementation("com.google.firebase:firebase-analytics")..

해당 기능이 필요하게 된 이유현재 개발중인 앱에서 회원가입 버튼을 연속으로 누르는 경우, 요청을 두번하게 된다. 이 문제를 해결하기 위해서는 이벤트 처리 시점에 추가적인 상태 관리 또는 조건 검사를 통해 중복된 이벤트의 실행을 방지하는 방법이 필요합니다.하지만 무조건 연속된 클릭을 막아야할까요? 제가 생각한 클릭의 종류는 3가지였습니다. 연속된 클릭을 허용하면 안되는 버튼, 연속된 클릭을 해도 상관없는 버튼, 연속된 클릭이 필요한 버튼입니다.이 부분 중 연속된 클릭을 허용하면 안되는 버튼의 예시로는 회원가입 버튼 등이 있습니다.생각한 버튼 연타 방지 기법Debounce 기법 사용:사용자의 입력에 대해 일정 시간 동안의 입력을 무시하고, 마지막 입력만 처리하는 방법입니다. 이를 통해 사용자..

API 테스트 코드를 작성하게 된 주요 이유 개발 도중 기획 변경으로 인해 API가 자주 수정되고 있습니다. API의 변경에 따라 안드로이드 코드도 연쇄적으로 수정해야 합니다. 서버의 소소한 변경사항에 대한 정보가 누락될 때가 있습니다. 서버가 재배포될 때마다 API 변경으로 인해 발생할 수 있는 오류를 확인하고자 합니다. 주요 JUnit 어노테이션 @Test: 이 어노테이션이 붙은 메소드는 JUnit에 의해 테스트로 인식되고 실행됩니다. @Before: 각 테스트 메소드가 실행되기 전에 실행되어야 할 코드를 포함하는 메소드에 이 어노테이션을 사용합니다. 예를 들어, 테스트에 필요한 객체를 초기화하거나 테스트 환경을 설정하는 데 사용됩니다. @After: 각 테스트 메소드의 실행이 끝난 후에 실행되어야 ..
평소 프로젝트를 하며 다음과 같은 형식의 코드를 자주 사용했습니다. private var _username: String? = null var username: String? get() = _username set(value) { _username = value } private var _password: String? = null var password: String? get() = _password set(value) { _password = value } _username와 username를 나누어 사용하는 이유는 코틀린에서 일반적으로 사용되는 "백킹 프로퍼티(backing property)" 패턴 때문입니다. 캡슐화 강화: 내부적으로 사용되는 _username 필드는 비공개(private)로 설정..
Retrofit 요청 및 응답 타입 구미 인사이더를 개발할 때, 작성한 게시판 조회 코드 요청 및 응답 타입을 Custom해서 사용한 경우 fun getBoardDetail(boardNo: String) { showProgress() viewModelScope.launch { val response = repository.getBoardDetail(boardNo) val type = "게시판 상세조회에" when (response) { is NetworkResponse.Success -> { _boardDetail.postValue(response.body) _commentCount.postValue(response.body.comments) } is NetworkResponse.ApiError -> {..

원래는 안드로이드 스튜디오의 세팅에서 Actions on Save에 있는 자동 import와 format 기능을 사용하고 있었는데 자동 정렬 때문에 느려지는 느낌을 받았고, format의 경우 프로젝트 단위가 아니라 파일 단위로 되었기 때문에 klint를 사용해보려고합니다. https://github.com/JLLeitschuh/ktlint-gradle GitHub - JLLeitschuh/ktlint-gradle: A ktlint gradle plugin A ktlint gradle plugin. Contribute to JLLeitschuh/ktlint-gradle development by creating an account on GitHub. github.com Ktlint의 장점 코드 일관성: ..
안녕하세요. 오늘은 제가 사용하고 있는 LogUtils에 대해 이야기하고자 합니다. 이 object는 로그를 더 효율적으로 관리하고 디버깅을 용이하게 만들기 위해 정리했습니다. object LogUtils { private const val TAG = "five-two-weeks" private val isDebug = BuildConfig.DEBUG_MODE fun d(message: String, name : String = TAG) { if (isDebug) Log.d(name, createLogMessage(message)) } fun e(message: String, name : String = TAG) { if (isDebug) Log.e(name, createLogMessage(message..

프로젝트를 새로 시작하게 되었는데, 서로 코드 리뷰를 하던 도중 오랜만에 application/json를 Content-Type으로 붙인 것을 발견하여 정리하게 되었습니다. Content-Type HTTP Content Type, 또는 MIME 타입은 HTTP 헤더에서 사용되는 문자열로, 통신하는 상대방에게 데이터의 형식을 알려주는 역할을 합니다. 안드로이드 개발을 막 시작했던 초반에는 해당 content-type을 항상 header에 붙였습니다. @Header("Content-Type") contentTypeHeader: String = "application/json" Retrofit을 사용하고 있다면, header에 "application/json"은 붙이지 않아도 됩니다. Retrofit.Buil..
- Total
- Today
- Yesterday
- 알고리즘
- 데이터무결성체크
- 백준
- Kotlin
- release build
- api 경로
- newtoken
- 릴리즈 빌드
- SSAFY
- tomap
- hilt
- 안드로이드
- SWEA
- okhttp
- 블루투스개념정리
- retrofit
- 싸피
- 모바일트랙
- 상단알람
- java
- 빌드 타입
- 코틀린
- 디버그 빌드
- connecttimeout
- this
- build type
- missingbinding
- @provides
- compose
- Android
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |