Kotlin

    [Android] [Kotlin] 스코프 함수

    스코프 함수란? ✔ 코드를 축약해서 표현할 수 있도록 도와주는 키워드처럼 쓰이는 함수 run 호출 대상 this (생략 가능) 마지막 코드 반환 // Example 1 var list = mutableListOf("Scope", "Function") list.run { val listSize = size println("리스트의 길이 run = ${listSize}") } // Example 2 val lastItem = list.run { add("Run") get(size - 1) } println("반환값 run = ${lastItem}") // 리스트의 길이 run = 2 // 반환값 run = Run let 호출 대상 it (생략 불가능, 변환 가능) 마지막 코드 반환 // Example 1 v..

    [Android] [Kotlin] 지연 초기화

    lateinit ✔ 변수(프로퍼티)만 Nullable로 미리 선언하고 초기화(생성자 호출)를 나중에 해야 할 경우 Safe Call을 쓰지 않을 수 있기 때문에 코드에서 발생할 수 있는 수많은 ?를 제거할 수 있다. 💬 ◽ var로 선언된 클래스의 프로퍼티에만 사용 가능 ◽ null은 허용되지 않음 ◽ 기본 자료형 Int, Long, Double, Float 등은 사용 불가능 💬 ◽ lateinit은 변수를 미리 선언만 해 놓은 방식 ◽ 초기화 되지 않은 상태에서 메서드나 프로퍼티를 참조하면 null 예외로 앱이 죽음 ◽ ?를 쓰지 않기 위해서 초기화를 한다고 가정하고 사용하는 도구이므로 반드시 초기화가 필요 [ Nullable로 선언하는 일반적인 방법 ] class Person { var name: S..

    [Android] [Kotlin] Null Safety

    ? (Nullable) ✔ 기본 변수는 모두 null이 입력되지 않음 ✔ null 값을 입력하기 위해서는 변수를 선언할 때 뒤에 ?를 입력 [ 변수에 null 허용 설정하기 ] var nullable: String? nullable = null var notNullable: String notNullable = null // Error [ 함수 파라미터에 null 허용 설정하기 ] fun nullParameter(str: String?) { if (str != null) { var length2 = str.length } } ◽ 파라미터 str에 null이 허용되었기 때문에 함수 내부에서 null 체크를 하기 전에는 str를 사용할 수 없음 [ 함수의 리턴 타입에 null 허용 설정하기 ] fun nul..

    [Android] [Kotlin] 설계 도구

    추상화 ✔ 클래스와 클래스 안에 있음 직한 기능을 이름만 작성하여 설계 ✔ 독립적으로 인스턴스화 불가능 ✔ 상속받을 자식 클래스의 특징에 따라 코드가 결정된다. abstract class Animal() { fun walk() { Log.d("abstract", "걷습니다") } abstract fun move() } class Bird: Animal() { override fun move() { Log.d("abstract", "날아서 이동합니다.") } } 인터페이스 [ 추상화와 인터페이스 비교 ] ◾ 추상화 : 누군가 설계해 놓은 개념 클래스 중에 실행 코드가 한 줄이라도 있으면 ◾ 인터페이스 : 실행 코드 없이 메서드 이름만 가진(블록도 없이) 추상 클래스 ✔ 외부 모듈에서 내가 만든 모듈을 사용..

    [Android] [Kotlin] 클래스

    클래스 Primary Constructor class Person constructor(value: String) { } ◽ 헤더처럼 class 키워드와 같은 위치에 작성 ◽ 조건에 따라 constructor 생략 가능 class Person(value: String) { init { Log.d("class", "생성자로부터 전달받은 값은 ${value}입니다.") } } ◽ 클래스의 생성자가 호출되면 init 블록의 코드가 실행되고, init 블록에서는 생성자를 통해 넘어온 파라미터에 접근 class Person(val value: String) { fun process() { print(value) } } ◽ 파라미터 앞에 val을 붙여주면 클래스 스코프 전체에서 해당 파라미터를 사용할 수 있다. S..

    [Android] [Kotlin] 함수

    함수 ✔ 코틀린의 함수 파라미터들은 변하지 않는 이뮤터블이기 때문에 모두 val이 생략된 형태이다. [ 변환값과 입력값이 있는 함수 ] fun square(x: Int): Int { return x * x } [ 변환값이 없는 함수의 정의 ] fun printSum(x: Int, y: Int) { Log.d("fun", "x + y = ${x + y}") } [ 입력값 없이 반환값만 있는 함수의 정의 ] fun getPi(): Double { return 3.14 } [ 특정 파라미터를 생략 시 기본 값으로 입력되는 함수의 정의 ] fun getCubeVolume(x: Int, y: Int, z: Int = 1): Int { return x * y * z } getCubeVolume(1, 1, 3) //..

    [Android] [Kotlin] 반복문

    for 반복문 [ 일반적인 형태 ] for (index in 1..10) { Log.d("For", "현재 숫자는 ${index}") } [ until : 마지막 숫자 제외하기 ] var array = arrayOf("JAN", "FEB", "MAR", "APR", "MAY", "JUN") for (index in 0 until array.size) { Log.d("For", "현재 월은 ${array.get(index)}입니다.") } [ step : 건너뛰기 ] for (index in 0..100 step 3) { Log.d("For", "현재 숫자는 ${index}") } [ downTo : 감소시키기 ] for (index in 10 downTo 0) { Log.d("For", "현재 숫자는 $..

    [Android] [Kotlin] 배열과 컬렉션

    배열 [ 배열 타입 선언 및 초기화 ] var students = IntArray(10) var longArray = LongArray(10) var CharArray = CharArray(10) var FloatArray = FloatArray(10) var DoubleArray = DoubleArray(10) var intArray = inArrayOf(1, 2, 3, 4, 5) // 선언과 동시에 값 초기화 var stringArray = Array(10, {item->""}) // 문자열 타입 배열 선언 var dayArray = arrayOf("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN") // 선언과 동시에 초기화 컬렉션 List ✔ 저장되는 데이터에 인..

    [Android] [Kotlin] 조건문

    조건문 [ when ] ✔ 다른 언어 문법의 switch와 비슷 ✔ if의 조건이 3개 이상일 때 사용 권장 [ 일반적인 형태의 when 사용하기 ] var now = 10 when (now) { 8 -> { Log.d("when", "현재 시간은 8시 입니다.") } 9 -> { Log.d("when", "현재 시간은 8시 입니다.") } else -> { // 위의 모든 조건에 맞지 않으면 else 블럭 코드 실행 Log.d("when", "현재 시간은 9시가 아닙니다.") } } [ 콤마로 구분해서 사용하기 ] var now = 9 when (now) { 8, 9 -> { Log.d("when", "현재 시간은 8시 또는 9시 입니다.") } else -> { Log.d("when", "현재 시간은..

    [Android] [Kotlin] 변수

    var = variable ✔ 가변 변수 [ 변수 선언과 동시에 값 넣기 ] var myName = "이름" ◽ 입력되는 값으로 타입을 자동으로 추론한다. [ 값으로 초기화하지 않고 선언만 하고 사용하기 ] var myAge: Int myAge = 27 val = valuable = final (Java) ✔ 읽기 전용 변수 : 한 번 입력된 값은 변경될 수 없다. val roadName = "도로명" val address = roadName + "추가 주소" const ✔ 기본 타입에 대한 상수 값을 정의할 수 있다. const val HOW_ARE_YOU: String = "어떻게 지내?" ✔ const 대신 @JvmField를 사용할 경우, 기본 타입이 아닌 타입도 선언이 가능하다. @JvmFiel..