목록안드로이드 (26)
라떼는말이야
https://mangbaam.github.io/kotlin/2022/07/06/coroutine-basic-dive-1.html CoroutineContext and CoroutineScope in Kotlin and Android ⭐ mangbaam.github.io 코루틴 컨텍스트와 코루틴 스코프에 대해 공부하고 기록해보았습니다^^ 많은 관심 부탁드려요
프로젝트의 로그인 부분을 DataBinding으로 변경하는 과정에서 예상치 못한 에러를 만났다. 구현 중이던 상황 구현하던 부분은 로그인 버튼을 누르면 뷰모델의 login() 함수를 호출하는 것이고, login() 함수는 로그인 화면의 아이디, 패스워드 EditText에서 텍스트를 가져와 파라미터로 넘겨주려고 한다. 에러를 만난 부분 하지만 아래와 같은 오류가 발생하면서 빌드에 실패한다. if getId is called on an expression, it should have an id: userId.text 분명 개발자 가이드에서도 .text로 접근하라고 되어있었다. 문제 해결 해결한 방법은 생각보다 간단했다. text를 getText()로 변경하면 빌드에 성공한다. 개발자 가이드에서 .text와 ..
앱 개발에서 가장 일반적인 패턴 중 하나는 LoginActivity에서 로그인 후 MainActivity로 전환되는 것이다. 사용자가 LoginActivity에서 올바른 자격 증명을 입력하면 앱은 LoginActivity를 종료하고 MainActivity를 시작한다. 일반적으로 사용자가 이후에 다시 앱을 실행시켰을 때 로그인을 다시 할 필요 없게 하는 것을 원할 것이다. 이를 실현하기 위해서 몇 가지 접근법이 있는데, 가장 쉬운 것은 사용자가 앱을 사용할 때마다 매번 로그인을 강제하는 것이다. 하지만 이 방법은 유저 경험(UX)에 아주 끔찍한 방법이다. 일반적으로 사용자가 로그인하면 몇 종류의 토큰을 반환하고, 그것을 앱의 생명주기 외부 어딘가에 저장하면 된다. 일단 토큰을 받았다면, 토큰의 기간이 만료..
안드로이드 앱에서 배경 색을 바꿀 수 있다는 것을 아시나요? 안드로이드 앱에서 기본 배경색을 지정할 수 있다. 만약 그 방법을 모르거나 바꿀 수 있는지 조차 몰랐다면 내가 만드는 앱의 메인 배경 색이 파란색일 때 모든 화면의 background 속성을 파란색으로 지정했을 것이다. 앱의 한 부분에 여러 번 색을 덧칠하면 필요 없는 작업을 하는 것이고, 앱의 성능이 안 좋아질 수 있다. 그래서 앱의 대부분 화면이 파란색이라면 아예 앱의 배경 색을 파란색으로 만들면 모든 화면마다 배경 색을 지정하지 않아도 돼서 편하고, 성능 상으로도 더 좋고... 내가 말이 긴 이유는 방법이 너무 간단해서 이다.. ㅋㅋ (바람잡이 중) 배경 색을 바꾸는 것은 그림을 그리는 도화지 색 자체를 바꾸는 것처럼 생각하면 좋다. 배경..
프로젝트에서 회원가입 화면을 만들면서 아이디, 비밀번호 등의 입력을 제한해야 하는 작업이 필요했다. 대표적으로 비밀번호인데, 비밀번호 규칙은 회사마다 다르지만 각자의 기준을 가지고 있다. 네이버의 비밀번호 규칙 구글의 비밀번호 규칙 KISA(한국 인터넷 진흥원)의 비밀번호 권고 사항 사진에 링크 걸어놨으니 클릭하면 더 자세한 내용 확인할 수 있음 구상 우선 내가 적용할 비밀번호의 규칙을 정해야 한다. 나는 숫자, 영어 알파벳(대/소문자 상관없이), 특수문자 하나 이상씩을 포함하는 규칙을 세웠다. 특수문자는 ! @ # $ % ^ + - = 로 제한했다. 비밀번호 길이는 8자 이상, 24자 이하로 정했다. > UI 적으로는 사용자가 입력을 시작했을 때 입력할 수 없는 문자는 입력 창에 입력되지 않도록 하면서..
문제 설명 위 코드는 아이디, 비밀번호 입력 창에 필터를 적용해 입력받고자 하는 문자만 받는 기능을 한다. 코드 상으로 보면 아이디와 패스워드가 완전히 동일한 로직을 가지고 있다. 그러나 실행 결과를 보면 아이디의 경우 허용되지 않은 문자 입력 시 전체가 지워져버리고, 패스워드의 경우 허용되지 않은 문자 입력 시 입력을 무시하는 동작을 한다. 같은 로직에 다른 현상이 나타나는 것. 원인 파악 로그를 찍어보면 아이디의 source에는 아이디 입력 창에 입력한 전체 문자가 들어있었고, 패스워드의 source에는 패스워드 입력 창에 마지막으로 입력된 문자가 들어있었다. 왜 그럴까? 아이디를 입력하는 과정에서는 키보드 위에 입력한 문자들이 보이는 것을 알 수 있고, 패스워드는 그렇지 않았다. xml에서 아이디의..
토스트는 사용자에게 간단한 알림을 줄 수 있는 기능이다. 하지만 토스트가 중복으로 만들어지는 경우 위 사진처럼 계속해서 토스트가 나와 사용자가 즉각적인 피드백을 받지 못하거나 사용성이 아주 나빠질 수 있다. Toast 만들기 Toast.makeText(context, "토스트 메시지", Toast.LENGTH_SHORT).show() 보통 위와 같이 토스트를 띄울 것이다. 토스트의 생성과 show를 한 번에 하는 코드이다. 하지만 Toast는 객체화할 수 있고, 객체화된 Toast를 취소할 수도 있다. Toast 취소하기 val toast = Toast.makeText(applicationContext, "토스트 메시지", Toast.LENGTH_SHORT) toast.show() // 토스트 표시 to..
목표 설정 프로젝트 생성 시 일반적으로 Empty Activity로 생성해 앱을 만들지만 그 외에도 다양한 템플릿들을 지원해준다. 템플릿들은 구글에서 작성했거나 구글에 통과된 검증된(?) 코트일 테니 템플릿으로 생성해보고 어떻게 구성해놨을지 확인해보는 것도 도움이 될 듯해서 기록에 남기고자 한다. 이번엔 Login Activity를 확인해보려고 한다. 물론 로그인에 필요한 사용자 인증 로직이나 서버와의 통신 로직은 없다. 뷰와 뷰모델, 그리고 UI Controller인 액티비티에서는 어떻게 상호 작용하고, 로그인 상태에 따른 처리를 하는지 확인하는 것이 목표이다. 프로젝트의 구성 프로젝트 생성 시 LoginActivity를 선택하면 기본적으로 위와 같은 구성으로 프로젝트가 생성된다. 사실상 뷰는 로그인 ..