본문 바로가기

내일배움캠프 안드로이드 3기

[TIL] 24.03.19 개인 과제

1. 앱개발 입문 주차 개인 과제

 Lv3 까지의 필수 구현 과제 및 선택 구현 사항을 모두 구현했다. 어제 작성한 것처럼, 기능 및 디자인 명세가 명확해서 예상한대로 금방 끝났다. 해당 주차의 강의에 포함된 내용들만으로 구성하려니, 조금 어색한 부분도 있었지만 큰 문제는 없었던 것 같다.

 

실행 이미지들

 

 ConstraintLayout을 이용해 기본적인 레이아웃을 구성하고, Intent 활용해 Activity 간 데이터 주고받기 등이 핵심이었다. 기본적인 validation 로직도 필요했다. 그 중에서 조금 신경쓴 것들은 다음의 것들이다.

 

 

 GuideLine 위젯을 이용해 기준점이 되는 constraint 지점으로 삼아, 디스플레이의 세로 비율이 조금 길어지거나 짧아지더라도 중앙을 중심으로 모여있도록 했다. 물론 모든 비율에 대응할 수 있도록 한 건 아니라서, 가로로 일정 비율 이상 길어지는 경우 이미지의 크기를 고정한 것 때문에 문제가 생긴다. 사실 이건 LandScape 상태의 레이아웃을 따로 만들어 줘야 하는 문제에 가깝지만..

 

    private lateinit var idEditTextView: EditText
    private lateinit var passwordEditTextView: EditText
    private val signUpActivityResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        val userInfo: List<String> = result?.data?.getStringArrayListExtra(USER_INFO) ?: emptyList()
        if(result.resultCode == RESULT_OK && userInfo.isNotEmpty()) {
            idEditTextView.setText(userInfo[0])
            passwordEditTextView.setText(userInfo[1])
        }
    }

 

 

 또 registerForActivityResult를 활용하기 위해 초기화 시점도 조금 고민했다. 해당 객체의 경우 onResume() 이전에 초기화가 이뤄져야하는데, Binding을 이용할 때와 달리 Activity 클래스의 프로퍼티로 빼 버리고, 생성 시점에 바로 초기화 하려면 난감한 문제가 발생했다. Binding을 이용하지 않는다면 생명주기 메소드들 바깥에서 뷰에 접근하기가 힘들기 때문이었다.

 

 그래서 onCreate() 메소드 내에서 초기화를 하려니, 초기화가 완료되는 시점보다 onResume()이 호출되는 것이 빠른 것인지 onResume() 이전에 생성해야 한다는 에러를 뱉었다. 그래서 binding 객체를 lateinit var로 선언해두고 사용하듯이, 로직에서 필요한 뷰 객체들도 lateinit var로 선언해두고 위 같은 방식으로 구현했는데 다행히 잘 동작했다.

 

 요구사항 외에도, validation 과정을 따로 분리하고 조금 더 고도화 시킬까 생각했지만 과제 범위를 벗어나는 것 같아서 굳이 그러지 않기로 했다. 해야하는 게 많기도 하고..

 

 

2. 챌린지반 OT

 수준별 보충 수업도 시작되어서, 오늘 챌린지반의 OT도 진행됐다. MVVM으로 시작해서 DI로 끝나는 커리큘럼인데, 큰 도움이 될 것 같다. 디자인 패턴이니 클린 아키텍처니 하는 것들은 일단 정답이 없고, 환경과 요구에 맞춰서 유연하게 다룰 수 있어야하는데 그 판단 기준을 배울 수 있지 않을까 하는 생각이다.

 기존에 혼자서 구현하던 것들은 어쩌면 조금은 뻔한 패턴의 MVVM 및 클린 아키텍처, 그리고 Hilt를 이용한 DI로만 구성했었다. 이번 기회에 잘 배운다면, 애매했던 부분들이나 얕게 알고 있던 부분들에 대해서도 확실하게 공부할 수 있을 것 같다.

 

 그런데 이쪽은 이쪽대로 매주 과제가 나온다고 해서, 시간을 어떻게 쓸 지도 조금 고민하게 됐다.

 

- 본 커리큘럼 수강 및 과제

- 챌린지반 수강 및 과제

- 알고리즘 문제 풀기

- CS 리마인드

- 사이드 프로젝트 진행

 

 생각보다 꾸준히 해야하는 것들이 많아져서, 시간이 점점 타이트해지고 있다. 어째 학교 다닐 때, 과제는 과제대로 하고 시험공부는 시험공부대로 하던 시험기간이 떠오르는 느낌이다😂