분류 전체보기 (85) 썸네일형 리스트형 Chapter 3-3 (앱 개발 숙련) - 안드로이드 앱 개발 숙련 강의 수강 및 학습 (리사이클러뷰, 프래그먼트) - 앱 개발 숙련 과제 수행 (사과 마켓) [기초 프로젝트] 회고 - 프로젝트 시작부터 git 관리를 잘해서 PR시 충돌 이슈는 거의 없었다. 모르는 것이나 어려움이 있으면 먼저 물어보고 친절하게 알려주는 분위기를 형성하는 것은 언제나 중요하다. - 프로젝트의 방향성을 설정하는 것도 중요하다. 현업 개발자가 아닌 각 팀원들의 수준에서 어디까지 타협할 수 있느냐가 핵심이다. 각자 맡은 분야에 집중하다 보니 개인 소통에 비해서 팀 전체 회의를 많이 못했던 것 같다. 더 자주 이슈 공유를 했으면 좋았을 것이다. - 안드로이드 스튜디오에 유용한 기능들이 매우 많다. 개발 환경 자체에 더 숙달되어야 개발 속도와 협업 효율이 올라갈 수 있다. 코틀린 문법은 기본이라는 것을 잘 알고 있지만 더 열심히 학습할 필요가 있다. - 함수와 클래스 이전에 프로그래밍의 시작은 변수 선언이다... Chapter3-2 (앱 개발 기초 프로젝트) 1) 각 액티비티에 공통으로 적용되는 데이터를 관리하며 데이터를 주고 받는 로직이 매우 흥미로웠음. 2) 앱 개발의 핵심은 화면들 사이의 또는 앱과 서버와의 데이터 연동이라고 생각함. data class UserInfo( val id: String, // email 형식으로 입력받도록 regex로 사전에 확인 필요 val pw: String, // 비밀번호 val nickName: String, // 프로필 이미지 아래에 표시할 닉네임 val thumbnail: Uri?, // 프로필에 표시할 이미지, null일 경우 기본 썸네일 표시 val introduction: String, // 프로필에 표시할 소개 문구 ) obje.. ViewBinding 뷰 바인딩(View Binding)은 XML 레이아웃 파일에 정의된 뷰들을 지원하기 위한 기술이다. XML 레이아웃에 정의된 각 뷰 요소들을 직접 객체로 참조할 수 있다. findViewById() 메서드를 사용하여 뷰를 찾는 경우에는 뷰가 존재하지 않을 수 있어서 NullPointerException이 발생할 수 있다. 그러나 바인딩을 사용하면 @Nullable 어노테이션이 추가된 객체를 반환하므로 Null Safety가 보장된다. 또한 뷰 바인딩을 사용하면 XML 레이아웃에 정의된 각 뷰 요소들에 대한 객체가 자동으로 생성되므로 타입 안전성도 보장된다. 그리고 findViewById()는 레이아웃 내의 모든 뷰를 순회하면서 뷰를 찾아야 하므로 성능 저하를 일으킬 수 있다. 그러나 뷰 바인딩을 사용하면.. isEmpty(), isBlank() isEmpty()와 isBlank() 모두 문자열()이 비어 있는지 확인하는 메서드이다. 그러나 조금 차이가 있다. 문자열이 비어 있는지를 확인한다. 문자열의 길이가 0인지를 확인하고 공백 문자열인 경우에는 false를 반환한다. val str1 = "" // 빈 문자열 val str2 = " " // 공백 문자열 println(str1.isEmpty()) // true println(str2.isEmpty()) // false 문자열이 비어 있거나 모든 문자가 공백 또는 탭 문자열로 이루어진 경우를 확인한다. 문자열에 실제로 유효한 문자가 없는지를 확인한다. val str1 = "" // 빈 문자열 val str2 = " " // 공백 문자열 val s.. [과제] 피드백 (Android 입문) 1) isEmpty보다는 isBlank를 사용하기 (https://lionbae.tistory.com/entry/isEmpty-isBlank) 2) View 객체를 선언하는 부분 관련 코드를 뭉쳐놓기 (코드 이해도와 가독성 향상) // View 객체 초기화 val imageView: ImageView = findViewById(R.id.sparta) val textView: TextView = findViewById(R.id.Text1) val editText1: EditText = findViewById(R.id.editText1) val textView2: TextView = findViewById(R.id.Text2) val editText2: EditText = findViewById(R.id.e.. [과제] Activity 정리 Activity LifeCycle > 일반적으로 onCreate() -> onStart -> onResume() -> onPause() -> onStop() -> onDestroy()순으로 진행되지만, onStop() -> onRestart() -> onStart()로 가기도 한다. 1) Activity launchedActivity 실행의 시작이다. 이후 onCreate가 실행된다. 앱을 이용하려고 터치를 하는 순간이 이 부분이다. 2) onCreate()Activity를 생성하여 이후 onStart()가 실행된다. Activity가 최초로 실행되기 때문에 초기화 작업을 해주는 것이 좋다.3) onStart()Activity가 사용자에게 보여지기 직전에 호출된다.4) onResume()Activity가.. [과제] Fragment 정리 Fragment LifeCycle > 1) onAttach()프래그먼트가 액티비티에 붙을 때 호출된다. 프래그먼트가 완벽하게 생성된 상태는 아니며 인자로 context가 주어진다. 2) onCreate()프래그먼트를 생성하면서 넘겨준 값들이 있다면 여기서 변수에 넣어주면 되지만 UI는 초기화 할 수 없다. 본격적으로 프래그먼트가 액티비티에 호출을 받아 생성되는 시점이다. 액티비티의 onCreate()에선 View 관련 작업을 할 수 있으나, 프래그먼트의 onCreate()에서는 할 수 없다.3) onCreateView()레이아웃을 인플레이트(inflate)하고, 버튼이나 텍스트뷰 등을 초기화할 수 있다. 프래그먼트가 자신의 인터페이스를 처음 그리기 위해 호출한다. 프래그먼트에 관련된 UI 바인딩 작업을 .. [과제] UI xml 연습 후기 Figma 리소스를 이용하여 Constraint 레이아웃에서 뷰 배치, 모서리 둥글게 하기 등을 해보았다. 앱 개발의 절반은 UI 구성이라고 할 수 있을 만큼 안드로이드 스튜디오에서 UI와 관련되는 xml을 잘 작성하는 것이 중요하다. 주목할 만한 것은 둥근 모서리와 관련된 corner_round.xml을 따로 작성한 것이었다. 앱 개발 입문 과제에서 애니메이션 효과를 넣으면서 별도의 xml을 만들어 보았기 때문에 크게 어렵지 않았다. 그리고 Constraint 레이아웃 역시 앱 개발 입문 과제에서 했던 연습을 다시 해보면서 많이 익숙해졌다. 앞으로 Fragment, Recycler 뷰 등을 공부할 예정이라 더욱 흥미로워질 것 같다. 핸드폰 번호 가리기 전화번호가 문자열 phone_number로 주어졌을 때, 뒷 4자리를 제외한 나머지 숫자를 전부 *로 가린 문자열을 리턴하는 함수를 완성해주세요. class Solution { fun solution(phone_number: String): String { require(phone_number.length in 4..20) // 첫 자리부터 끝 4자리 전의 자리까지의 숫자들을 뽑아서 *로 바꾼 후에 문자열로 변환 val hiddenDigits = phone_number.substring(0, phone_number.length - 4).map { '*' }.joinToString("") // 가리지 않은 뒷 4자리를 lastDigits에 할당 val lastDi.. 이전 1 2 3 4 5 6 7 ··· 9 다음