목록Kotlin (20)
라떼는말이야
프로젝트의 로그인 부분을 DataBinding으로 변경하는 과정에서 예상치 못한 에러를 만났다. 구현 중이던 상황 구현하던 부분은 로그인 버튼을 누르면 뷰모델의 login() 함수를 호출하는 것이고, login() 함수는 로그인 화면의 아이디, 패스워드 EditText에서 텍스트를 가져와 파라미터로 넘겨주려고 한다. 에러를 만난 부분 하지만 아래와 같은 오류가 발생하면서 빌드에 실패한다. if getId is called on an expression, it should have an id: userId.text 분명 개발자 가이드에서도 .text로 접근하라고 되어있었다. 문제 해결 해결한 방법은 생각보다 간단했다. text를 getText()로 변경하면 빌드에 성공한다. 개발자 가이드에서 .text와 ..
코틀린에는 Scope 함수라고 하는 개념이 있다. run, let, apply, also, with 키워드가 있으며 각각 비슷한 역할을 하기 때문에 서로 혼용하여 사용할 수도 있지만 분명히 다른 동작을 수행한다. 처음엔 헷갈리더라도 정확한 사용법과 용도를 안다면 좀 더 적재적소에 활용할 함수를 선택할 수 있을 것이다. https://kotlinlang.org/docs/scope-functions.html Scope functions | Kotlin kotlinlang.org 나 역시 완벽하게 익히지 못했기 때문에 작성하는 내용이 틀릴 수도 있고, 적절하지 않은 예제일 수도 있다. 정확한 내용을 확인하기 위해서는 위의 공식 문서를 확인하길 바란다. 위 사진은 공식 문서에 첨부된 표이다. 각 스코프 함수에서..
프로젝트에서 회원가입 화면을 만들면서 아이디, 비밀번호 등의 입력을 제한해야 하는 작업이 필요했다. 대표적으로 비밀번호인데, 비밀번호 규칙은 회사마다 다르지만 각자의 기준을 가지고 있다. 네이버의 비밀번호 규칙 구글의 비밀번호 규칙 KISA(한국 인터넷 진흥원)의 비밀번호 권고 사항 사진에 링크 걸어놨으니 클릭하면 더 자세한 내용 확인할 수 있음 구상 우선 내가 적용할 비밀번호의 규칙을 정해야 한다. 나는 숫자, 영어 알파벳(대/소문자 상관없이), 특수문자 하나 이상씩을 포함하는 규칙을 세웠다. 특수문자는 ! @ # $ % ^ + - = 로 제한했다. 비밀번호 길이는 8자 이상, 24자 이하로 정했다. > UI 적으로는 사용자가 입력을 시작했을 때 입력할 수 없는 문자는 입력 창에 입력되지 않도록 하면서..
토스트는 사용자에게 간단한 알림을 줄 수 있는 기능이다. 하지만 토스트가 중복으로 만들어지는 경우 위 사진처럼 계속해서 토스트가 나와 사용자가 즉각적인 피드백을 받지 못하거나 사용성이 아주 나빠질 수 있다. 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를 선택하면 기본적으로 위와 같은 구성으로 프로젝트가 생성된다. 사실상 뷰는 로그인 ..
시작하기 전에... 로그를 남기는 방법이나 액티비티의 생명 주기에 관해서 아래의 링크에서 상세히 다뤘었다. 아직 액티비티의 생명 주기에 익숙하지 않다면 먼저 공부를 하고 오는 것을 추천한다. 프래그먼트의 생명 주기는 액티비티의 생명 주기와 비슷한 면이 많이 때문이다. 2021.12.09 - [Android] 실습으로 알아보는 액티비티 생명주기 : Android activity lifecycle [Android] 실습으로 알아보는 액티비티 생명주기 : Android activity lifecycle 시작하기 전에... 본 포스트에서 사용한 코드와 코드랩은 밑의 링크에서 다운 받아 사용할 수 있습니다. 단일 액티비티(MainActivity.kt)로 구성되어 있는 앱입니다. 직접 따라하며 익혀도 되고 빠르 l..
UI 디자인 XML에서 모르는 부분은 댓글로 물어봐주세요. 따로 설명하지는 않겠습니다. Android - CountDownTimer 안드로이드에서 카운트다운을 위한 메소드를 제공해준다. public abstract class CountDownTimer 사용법은 다음과 같다. object : CountDownTimer(30000, 1000) { override fun onTick(millisUntilFinished: Long) { mTextField.setText("seconds remaining: " + millisUntilFinished / 1000) } override fun onFinish() { mTextField.setText("done!") } }.start() CountDownTimer의 인..
안드로이드 개발을 위해 코틀린을 새로 공부하면서 매일 매일 코틀린과 다른 언어의 차이점을 알아가면서 재미를 느끼고 있다. 현재는 계산기를 만드는 중인데 생각보다 복잡하다... 계산기를 만드는 과정 중 계산식의 마지막에 입력된 버튼이 숫자인지 판별해야 했다. 이때 계산식은 String 형이기 때문에 단순히 is Int 로 판별하기 힘들며 소수점도 숫자로 판별하기 위해 "."도 숫자로 판단해야 한다. 다양한 방법이 있겠지만 나는 리스트를 사용하기로 했다. 만약 코딩테스트에서 이런 문제가 나왔다고 한다면 나는 주로 파이썬을 사용하기 때문에 파이썬으로는 다음과 같이 짰을 것이다. # 파이썬 코드 digits = [str(i) for i in range(10)].append(".") 파이썬은 강력한 리스트 컴프리..