3. 제목: Android Kotlin을 통한 개발 전략
1. 기존 코드 어떻게 전환하고 확장할 것인가?
2. 넌 어느 별에서 왔니?(코틀린 주요기술의 근원)
- 람다와 함수형
- 프로퍼티와 함수
- 연산자 재정의
- Method Extension
- Pipe Filter Model
3. 자바에서 코틀린으로 변환과정
- 멤버 변수의 초기화
- @Nullable 처리
- 중첩 클래스 쪼개기
- Optional(?.) 최적화
4. 코드 효율화를 위한 툴킷 정의와 활용
- 전역변수와 프로퍼티
- 연산자 재정의
- 고차함수 활용
5. 거버넌스의 필요성
6. 맺음말 : 어떤 프로그램이 될 것인가?
4. 1. Kotlin 어떻게 전환할 것인가?(1/3)
기존 코드를 어떻게 전환할 것인가?
바뀌는 부분만이라도 변환해 가자?
새로 짜는 부분만?
BUT
헤어날 수 없는 자바
자바 스타일의 코틀린 코드
기존 자바 코드에서 호출이나 참조가 쉽지 많은 않다
언어는 습관이다.
컴퓨터 언어도 습관이다.
=> 잘 안 바뀐다
15. 3.1 멤버 변수의 초기화 방법(1)
init{}
초기값을 지정하지 않고, 이 함수에서 지정 가능
객체의 초기화 시에 값을 지정할 수 있음
lateinit
초기 값을 지정하지 않고 생략 후 나중에 대입
변수 접근시 초기화 여부를 확인하지 않음
by lazy (delegator)
사용 시점 초기화 됨
코드 블록으로 초기화 하므로 다른 처리 가능
Optional(?)
Null로 초기화 하고 나중에 값을 지정
23. 3.3 클래스의 중첩 최적화
Inner(nested) class 최소화
한 파일에 여래 개의 객체 선언 가능
중첩된 클래스는 복잡해 보임
객체 내에 또 객체를 선언하는 중첩을 사용할 이유가 없음
해당 파일에서만 사용하는 객체 앞에 private 으로 선언하여 사용 가능
24. 3.4 Optional(?.) 최적화
? 선언
꼭 필요한지 고려 해야 하라
init, late init, lazy 로 피할 수 있으면 피해라
!!는 확실히 검증된 경우만 사용하라
let, apply외 표준확장 함수
- 동일 변수에 2개 이상의 ?. 을 사용할 때
- 과용하면 오히려 코드 읽기가 어려워짐
Elvis(?:)
조건문 내에 쓰는 거? 좀 생각해 보자
26. 4.1 간결하게 하기 위한 요소들
패키지 레벨 전역 변수 함수
클래스와 관계 없이 변수나 상수를 정의할 수 있다.
서비스 코드 레벨에서 공유 되는 변수는 전역으로 사용해도 좋다
고차함수 정의(DSL스타일)
함수의 파라메터로 람다를 사용하는 고차함수 람다 식을 함수 호출 다음에 정의
함수의 조건 만족하면 코드블럭을 수행하는 방식
연산자
연산자를 통해 함수 호출 코드를 간결화 할 수 있다.
기존의 객체에 연산자를 추가 정의할 수 있다.
27. 4.2 패키지 Levels 선언 – Beyond Class Scope
Global Context
Application Context, Handler, ThreadPool, Resource etc
System Util Functions
Screen info, dp2px
isNetworkStatus, Package Info
Systems Managers
ConnectionManager, ActivityManager, WinowManager
WifiManager, etc
28. 4.2 패키지 Levels 선언 – 전역 변수(프로퍼티)
3가지 초기화(선언) 방식
- 단순변수
- 지연 초기화 된 변수
- Property
33. 4.4 Global 함수의 정의와 고차 함수
고차 함수(DSL 스타일)
- 함수의 람다 파라메터는 함수 다음에 코드 블록으로 정의할 수 있는 속성을
이용하게 특정한 조건을 만족하는 코드 블록을 정의할 수 있게 한다.
- DSL 함수와 동일한 이름의 프로퍼티나 함수 정의
Global 함수의 정의
- 안드로이드에서 제공하는 기능 중 반복적으로 사용되는 함수를 정의
- 서비스 코드 내에서 빈번하게 사용하는 코드의 정의
- 이 함수의 정의 목적은 짧은 코드임
37. 5. 팀 개발 공동 개발을 위한 거버넌스
필요성
- 너무 다양한 스타일이 존재한다.
- 개발자의 언어 이해 능력이 차이가 나므로 스타일을 어느 정도 정할 필요가 있다.
- “어떤 스타일은 사용하지 말라”의 가이드가 아니라 어떤 패턴의 코드에는 “어떤
스타일을 우선하여 사용하라”고 정의
- 시스템 클래스에 대한 함수확장이나 전역 변수의 대한 가이드 라인도 어느
정도는 필요