목록코틀린 공부정리 (42)
개발여행일지~
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/r5uJw/btsx3GhF1PA/kxhRCeI9w1iuVNSZbQr0Y0/img.png)
파이어베이스(Firebase)란? 파이어베이스(Firebase)는 구글의 모바일 및 웹 애플리케이션 개발 플랫폼입니다. 파이어베이스를 활용해 앱을 개발하고 개선할 수 있습니다. 개요 파이어베이스는 “앱을 개발하고, 개선하고, 키워갈 수 있는” 도구 모음(toolset)이며, 이러한 도구가 없다면 개발자들은 일반적으로 서비스의 상당 부분을 직접 만들어내야만 합니다. 그런데 개발자들은 앱의 사용자 경험(UX)에 집중을 해야 하기 때문에, 그런 세세한 부분들까지 전부 만드는 걸 좋아하지 않습니다. 그런 부분들로는 분석, 인증, 데이터베이스, 구성 설정, 파일 저장, 푸시(push) 메시지 등, 열거하자면 끝이 없습니다. 파이어베이스로 만든 이러한 서비스들이 클라우드에 호스팅 되면, 개발자의 입장에서는 거의 아..
클래스에서는 기본적으로 선언하는 프로퍼티 자료형들은 null을 가질 수 없다. 하지만 객체의 정보가 나중에 나타나는 경우 나중에 초기화 할 수 있는 방법이 필요하다. 그런 경우에 lateinit 과 lazy 키워드를 사용하여 지연 초기화를 한다. Lazy val 에서만 사용이 가능하다. 값을 교체 불가능하다. 호출 시점에 by lazy { ... } 에 정의해둔 블록 부분의 초기화를 진행한다. 클래스 생성자에서 사용이 불가능하다. 원시 타입 (primitive type) 도 사용이 가능하다. 지역 변수에서도 사용이 가능하다. private val adapter: BookListAdapter by lazy { BookListAdapter() } 초기화를 지연시킬 때 사용합니다. 차이점은 선언과 동시에 초기..
Binding을 하면서 ActivityMainBinding은 적용이 되었는데 같은 프로젝트에 다른 Binding은 적용이 안되는 것이다. 예를들어 private lateinit var binding: DetailFragmentBinding 이렇게 binding을 하였는데 적용이 안되어서 찾아보았다. 처음에는 왜 안되지? 했는데 알고보니 xml의 이름이 "fragmentdetail" 이라면 바인딩을할때 FragmentDetailBinding 라고 적어야한다 하나 더 예를 들자면 xml의 이름이 activity_item이라면 ActivityItemBinding 이라고 적어줘야한다. 대문자는 꼭 구분해서 써줘야한다.
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dwWpAt/btssgpGkr1X/0KWZhrDfdlhOg0Kjv3SGyK/img.png)
RecyclerView는 무엇일까? RecyclerView는 한정적인 화면에 많은 데이터를 넣을 수 있는 View입니다. Recycle을 한국어로 하면 재활용하다라는 뜻입니다. 즉, View를 재활용해서 사용하겠다는 말입니다. ListView 와 RecyclerView 차이점! ListView 사용자가 스크롤 할 때마다 위에 있던 아이템은 삭제되고, 맨 아래의 아이템은 생성 되길 반복합니다 아이템이 100개면 100이 삭제 생성됩니다. 즉 계속 삭제와 생성을 반복하므로 성능에 좋지않습니다. RecyclerView 사용자가 스크롤 할 때, 위에 있던 아이템은 재활용 돼서 아래로 이동하여 재사용 합니다. 즉 아이템이 100개여도 10개정도의 View만 만들고 10개를 재활용해서 사용합니다. View를 계속 ..
뷰 바인딩을 왜 쓰는가? 뷰 바인딩 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있다. 대부분의 경우 뷰 바인딩이 findViewById를 대체한다. View 가 null 허용 여부를 알려주지 않는 경우가 있다. 서로 다른 xml에서 id를 동일하게 사용할 수 있기 때문에 코드가 헷갈릴 수 있다. findViewById와의 차이점! - NullSafe 뷰 바인딩은 뷰의 Direct References 즉 직접 참조를 생성하므로 유효하지 않은 뷰ID로 인해 null포인터 예외(NPE)가 발생 할 위험이 없다. 즉, 레이아웃에 아직 생성되지 않은 뷰의 참조를 얻어(null상태)해당 뷰의 속성을 사용하려 할 때 발생하는 NPE를 방지한다는 것이다. 레이아웃의 일부 구성에만 뷰가 있는 경우 결합 클..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/by4XPz/btsrteq2ba3/LB8mS0ZiVKx070HNCv5aG1/img.png)
회원가입을 하였을 때 각각에 EditText에 조건을 넣어보자! 이름은 4글자 이내, 아이디는 20자 이내, 비밀번호는 영문, 숫자, 특수문자 8~16자 이내로 작성했을 때 회원가입이 가능하게 조건을 넣어보았다. package com.example.sangbusanzo import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.EditText import android.widget.Toast import java.util.regex.Pattern class SignInPage : AppCom..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/4gXgE/btsqZCFSTP1/S16kzcQy5Y6E6WVICgMN70/img.png)
2주 동안 스파르타 코딩클럽에서 다음과 같은 조건의 과제를 내주었다. 1) 로그인페이지 만들기 2) 회원가입 페이지 만들기 3) 자기소개 페이지 만들기 먼저 로그인 페이지 만들기부터 구현을 하였다 먼저 구상한것은 로고 이미지를 넣기위해 ImageView를 사용하였고 아이디, 비밀번호에는 TextView와 EditText가 사용되었다. 비밀번호가 입력될때에는 입력내용이 가려지게 textPassword를 사용하여 가려주었다. 또한 아이디와 비밀번호중 틀리게 입력하거나 하나라도 입력하지않으면 "아이디/비밀번호를 확인해주세요"라는 토스트 메시지 출력도 넣었다. 로그인과 회원가입은 각각 버튼기능을 줘서 로그인은 LoginPage로 회원가입은 SignUppage로 이동하게 연결해주었다 타이틀 로고는 원하는 이미지로..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/br1PyJ/btsqJCm9e87/QjdQtkG5iCMFetTxbancI0/img.png)
1) onCreate() Activity가 생성되면 가장 먼저 호출된다 화면 Layout 정의, View 생성, Databinding 등은 이곳에 구현함 생명주기 통틀어서 단 한 번만 수행되는 메소드 따라서 Activity 최초 실행에 해야하는 작업을 수행하기에 적합함 2) onStart() Activity가 화면에 표시되기 직전에 호출됨 화면에 진입할 때마다 실행되어야 하는 작업을 이곳에 구현함 3) onResume() Activity가 화면에 보여지는 직후에 호출됨 현재 Activity가 사용자에게 포커스인 되어있는 상태 4) onPause() Activity가 화면에 보여지지 않은 직후에 호출됨 현재 Activity가 사용자에게 포커스아웃 되어있는 상태 다른 Activity가 호출되기 전에 실행되기..