~12/12) : Kotlin 변환 ◦ 2주차 ( ~12/19) : 라이브러리 적용 #1 : 일부에 시범적용 ◦ 3 ~ 5주차 ( ~1/9) : 라이브러리 적용 #2 : 전면 적용 ◦ 6주차 ( ~ 1/ 16) : 매뉴얼 테스트 • Jira로 작업 관리 ◦ 주 단위 작업을 Task로 만들고, 각 담당자 별 SubTask생성 #12
코드를 java -> kotlin 으로 변환 ◦ Android Studio 의 자동 변환 기능 적극 활용 • 긴가민가한 부분은 길게 고민하지 말고 //fixme 주석 달아놓기 • 4명이 각기 영역을 나눠 기계적으로 변환 ◦ Activity & Fragment ◦ 온갖 Manager / DB / PUSH ◦ API / Model ◦ 기타 : Application , Constant, Preferences, Utils → 12/13일 기준, 250개의 java 파일 ⇒ 231 개의 kt 파일 + 1개의 java 파일 (누구니, 하나 빼먹은 사람?) #14
? 와 !! 남발하자 • 동시에 모든 파일을 변환한게 아니니 java <-> kotlin 상호 존재하는 과도기 존재 : 일단은 @JvmStatic , @JvmOverloads 남발하자 • 도구가 너무 욕심을 부려 오히려 알아보기 힘든 코드 생성 : java 코드와 상호 대조하여 쉽게 풀어쓰자 → 기존 프로젝트를 한 벌 clone해 둔 다음, 원래 java 파일을 옆에 띄워두고 작업 #15
사용할 이유가 없음 • ButterKnife로 선언한 뷰 필드 제거 후, 뷰 필드를 직접 접근하도록 변경 • OnClick 등의 애노테이션은 그냥 한땀 한땀 변환 • kotlin extension 사용 시 주의! ◦ RecyclerView의 ViewHolder 등의 클래스에선 뷰 caching 안됨 ◦ Fragment 의 view destroy 이후 최초 필드 접근 시 NPE 발생 ▪ onDestroyView() 호출 시 flag 설정하여 fragment view 갱신 시 확인코드 추가 • 2ରী ਊ ৮ܐ #18
마다 꽤 많은 손이 가는, 가장 큰 작업 → 한명이 기본 구조를 만들어 전파, 4명 모두 영역을 나눠 변환 작업 수행 • JsonObject 기반의 모델을 Gson 으로 변경 • Kotlin data class로 모델 클래스 개편 ◦ Nullable / Non-null 여부를 서버쪽과 협의하여 API 재검수 • Retrofit으로 API 한땀 한땀 변경 • 응답을 Volley의 callback 객체에서 RxJava single 구조로 변경 • 2주차에 샘플 개발, 3,4주차에 전면적용 #20
기간, 인원 모두 처음보다 줄어들었음: 급한 일이... ◦ 전면 개편을 할 땐 아는 기술 위주로 후딱 후딱 작업하자 ◦ MVP 적용 등 구조까지 고쳤다면 훨씬 힘들었을 것 같음 • 1주 단위 관리도 좋았음 ◦ 작업 가시성 확보 ◦ 1주 이상 걸릴 작업도 별로 없었음 • 구조 개선이 없어도 Kotlin 전환은 의미 있는 작업 ◦ 줄어든 NPE, 간결화된 코드 ◦ 명확한 Nullability #26
많이 들었음 ◦ Model, Service, RxJava subscribe 구조 변환 ◦ 한명이 우선 샘플을 만든 후, 다 같이 나눠 작업해야 함 • Kotlin 변환은 쉽지만은 않음 ◦ companion object ◦ 난무하는 !! ◦ 쓸데 없이 최적화시킨 비교구문 → 무조건 단기간에 전체 변환을 목표로! : Java-Kotlin inter-operation 최소화 ▪ 팀 내 규칙을 정해 todo , fixme 주석을 적극 활용 #27