안드로이드 앱 프로그래밍 with 코틀린 - 5. 코틀린의 유용한 기법
5. 코틀린의 유용한 기법 5.1 람다 함수와 고차 함수 람다 함수 익명 함수 정의 기법 필요시 참고하는 것이 나음, 내용이 너무 자잘하다 고차 함수 함수를 매개 변수나 반환값으로 사용 5.2 널 안정성 엘비스 연산자 ?: 변수가 null 일 때 대입해야 하는 값이나 실행해야 하는 구문 예외 발생 !! 필요에 따라 null인 경우 exception을 발생해야 할 때
5. 코틀린의 유용한 기법 5.1 람다 함수와 고차 함수 람다 함수 익명 함수 정의 기법 필요시 참고하는 것이 나음, 내용이 너무 자잘하다 고차 함수 함수를 매개 변수나 반환값으로 사용 5.2 널 안정성 엘비스 연산자 ?: 변수가 null 일 때 대입해야 하는 값이나 실행해야 하는 구문 예외 발생 !! 필요에 따라 null인 경우 exception을 발생해야 할 때
4. 코틀린 객체지향 프로그래밍 4.1 클래스와 생성자 클래스 선언만 하는 것도 가능 1 class User 클래스 생성에 new 키워드 사용하지 않음 주 생성자 클래스 선언부에 선언 constructor 생략 가능 init 키워드를 통해 로직 수행 가능 유일하게 매개변수에 val, var 키워드를 사용할 수 있음 ~= 그러면 자동적으로 멤버변수가됨 객체 생성의 메인 로직을 담당하는 편 보조 생성자 본문에 constructor로 선언 주 생성자가 있다면 무조건 호출해 주어야 함 1 2 3 4 class User(name: String) { constructor(name: String, count: Int): this(name) { } } 4.2 클래스를 재사용하는 상속 상속과 생성자 상위 클래스의 생성자를 어떻게든 호출해야한다. 1 2 3 4 5 open class Super(name: String) { } class Sub(name: String): Super(name) { } 오버라이딩 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 open class Super { open var someData = 10 open fun someFun() { println("I am super class function: $someData") } } class Sub: Super() { override var someData = 20 override fun someFun() { println("I am sub class function: $someData") } } fun main() { var obj = Sub() obj.someFun() // 출력 // I am sub class function: 20 } 접급 제한자 ...
3. 코틀린 시작하기 3.1 코틀린 언어 소개 표현력과 간결함 안전한 코드 nullable, not null 타입뒤에 ?로 표시 자바와의 상호운용성 구조화된 동시성 coroutine 코틀린 파일 구성 package: 컴파일시 만들어지는 클래스 파일의 경로 같은 package를 사용하면 import 없이 사용가능 자바와 달리 파일명도 클래스명과 일치할 필요 없음 3.2 변수와 함수 var말고 val 이라는 키워드도 존재함. 값 할당 후 수정 불가 타입지정 가능 최상위에 선언한 변수나 클래스의 멤버 변수는 선언과 동시에 초기화 해야함 초기화 지연 가능 lateinit: var 변수에만 가능. 숫자+Boolean 타입에는 불가 lazy 1 2 3 4 val data4: Int by lazy { println("in lazy...") 10 } 코틀린의 모든 변수는 객체 삼중 따옴표에는 trimIndent()가 자동으로 적용됨 Unit 타입: 반환문이 없는 함수에 사용 Nothing: null이나 예외를 반환하는 함수 함수 선언하기 함수의 매개변수는 val 키워드가 자동 적용 명명된 매개변수 지원 컬렉션 타입 기초 타입 Array도 별도로 존재 3.3 조건문과 반복문 if-else를 표현식(결과값을 반환하는 계산식)으로도 사용 가능 when 이라는 조건문도 존재. 마찬가지로 표현식으로 사용 가능 for, while이 있고, for 문에서 보통 범위 연산자 in 사용
2. 안드로이드 앱이 기본 구조 2.1 안드로이드 소개 안드로이드 런타임(Dalvik – (안드로이드 버전 5.0) –> ART(Android RunTime)) dex파일(앱파일) 해석하여 실행 2.2 안드로이드 앱 개발의 특징 생명주기를 안드로이드에서 관리하면 컴포넌트, 개발자가 관리하면 일반 클래스임 안드로이드 컴포넌트는 4종류 액티비티: 화면구성(화면 1개 담당) 서비스: 백그라운드 콘텐츠 프로바이더: 앱간 데이터 공유 브로드캐스트 리시버: 시스템 이벤트 수신 애플리케이션 라이브러리를 사용할 수 있음 리소스 xml 파일로 등록하여 사용 2.3 앱 구성 파일 분석 하나의 모듈 ~= 하나의 앱 build.gradle.kts (빌드 설정 파일) gradle: 안드로이드 빌드 도구 AndroidManifest.xml (메인 환경 파일) 속성값이 @로 시작하면 리소스 시스템은 매니페스트에 있는 대로 앱을 실행 ~= 컴포넌트를 매니페스트에 등록해야 한다. (Activity, Service, Receiver, Provider, name 속성은 필수) 태그는 액션별 실행 정의 res 폴더 (리소스) drawable: 이미지 layout: UI 구성에 필요한 xml mipmap: 앱 아이콘 values: 값 리소스 R.java 파일에 상수 변수로 자동등록 지정된 방식으로만 사용됨 activity_main.xml (기본 레이아웃 파일) MainActivity.kt (메인 액티비티) MainActivity 클래스가 실행되면 onCreate() 호출됨