목록전체 글 (119)
App노자
1. Closure란? 클로저란 람다식으로 표현된 내부 함수에서 외부 범위에 선언된 변수에 접근할 수 있는 개념을 말한다. 람다식 또는 익명 함수는 외부 범위에서 선언된 변수를 클로저에 액세스 할 수 있으며 람다식 안의 클로저에 포획(캡처)된 변수는 람다에서 수정할 수 있다. 기본적으로 함수 안에 정의된 변수는 지역 변수로 스택에 저장되어 있다가 함수가 끝나면 같이 사라지는데 클로저 개념에서는 포획한 변수는 참조가 유지되어 함수가 종료되어도 사라지지 않고 함수의 변수에 접근하거나 수정할 수 있게 해 준다. 아래는 클로저의 조건이다 - final변수를 포획한 경우 변수 값을 람다식과 함께 저장한다 - final이 아닌 변수를 포획한 경우 변수를 특정 래퍼로 감싸서 나중에 변경하거나 읽을 수 있게 한다 이때..
1. let() 함수 public inline fun T.let(block: (T) -> R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block(this) } let() 함수는 Nullable 객체의 안전한 호출 및 변환을 도와주는 유용한 함수이다 객체가 null이 아닌 경우에만 특정 동작을 수행하거나 변환을 수행한다는 특징을 갖고 있다 제네릭의 확장 함수 형태이므로 어디든 적용할 수 있으며 특히 Nullable 객체를 다룰 때 자주 사용된다 let() 함수는 함수를 호출하는 객체 T를 이어지는 block의 인자로 넘기고 block의 결괏값 R을 반환한다 매개변수로는 람다식 형태인 block가 있고 T를 매개변수..
1. by (Delegation)란? by키워드 코틀린에서 특정클래스를 확장하거나 이용할 수 있도록 위임을 할 때 사용한다 by를 사용하면 하나의 클래스가 다른 클래스에 위임하도록 선언하여 위임된 클래스가 가지는 멤버를 참조 없이 호출할 수 있다 프로퍼티 혹은 클래스 이름: 자료형 by 위임자 by키워드는 프로퍼티 위임에도 사용되는데 게터와 세터를 특정 객체에게 위임하고 그 객체가 값을 읽거나 쓸 때 수행하도록 만드는 것을 프로퍼티 위임이라고 한다 프로퍼티 위임을 위해서는 val, var와 같은 프로퍼티 선언을 위한 키워드, 프로퍼티의 이름, 자료형, by위임자가 필요하다 여기서 위임자란 프로퍼티나 클래스를 대신할 객체를 말한다 2. Class 위임 interface Car { fun go(): Stri..
1. 지연 초기화란? 코틀린은 변수 선언 시 초기화를 할 것을 권고하며 변수 선언 시 초기화를 하지 않거나 nullable 타입으로 만들어주지 않으면 컴파일 에러가 발생한다. 클래스에서도 기본적으로 선언하는 프로퍼티 자료형들은 null을 가질 수 없기 때문에 생성자에서 초기화하거나 매개변수로부터 값을 초기화하는 것이 규칙이다 하지만 객체의 정보가 나중에 나타나는 경우 객체 생성과 동시에 초기화하기 힘들어지는데 이때 사용하는 게 지연초기화이다 지연초기화는 lateinit과 lazy키워드를 통해 사용할 수 있다 2. lateinit class Person { lateinit var name: String fun test() { if(!::name.isInitialized) { // 프로퍼티의 초기화 여부 판..

1. 컬렉션이란? 컬렉션이란 자주 사용하는 기초적인 자료구조를 모아 놓은 일종의 프레임워크이다 코틀린의 컬렉션은 자바 컬렉션의 구조를 확장 구현한 것이다 컬렉션의 종류로는 List, Set, Map 등이 있으며 불변형과 가변형으로 나뉘며 가변형 컬렉션은 객체에 데이터를 추가하거나 변경할 수 있고 불변형 컬렉션은 데이터를 한번 할당하면 읽기 전용이 된다 2. 연산자(operators) 기능 메서드 fun main() { val list1: List = listOf("one", "two", "three") val list2: List = listOf(1, 3, 4) val map1 = mapOf("hi" to 1, "hello" to 2, "Goodbye" to 3) println(list1 + "four"..
1. sequence란? sequence는 순차적인 컬렉션으로 요소의 크기를 특정하지 않고 나중에 결정할 수 있는 컬렉션이다 특정 파일을 줄 단위로 읽어서 요소를 만들 때 해당 파일의 끝을 모르면 줄이 언제 끝날지 알 수 없는 경우에 사용할 수 있다 처리 중에는 계산하고 있지 않다가 toList()나 count() 같은 최종 연산에 의해 결정된다 https://kotlinlang.org/docs/sequences.html Sequences | Kotlin kotlinlang.org 2. sequence 생성 //sequenceOf() val numbersSequence = sequenceOf("four", "three", "two", "one") 요소를 인수로 나열하는 sequenceOf() 함수로 생성..
1. Set이란? Set은 정해진 순서가 없는 요소들의 집합을 나타내는 컬렉션이다 List와 달리 동일한 요소를 중복해서 가질 수 없고 모든 요소가 유일한 값이어야 한다 헬퍼 함수인 setOf()을 이용해 불변형 Set을 생성하고 mutuableSetOf()를 사용해 가변형 Set을 생성할 수 있다 https://kotlinlang.org/docs/kotlin-tour-collections.html#set Collections | Kotlin kotlinlang.org 2. 불변형 Set fun main() { val mixedTypesSet = setOf("Hello", 5, "world", 3.14, 'c') // 자료형 혼합 초기화 var intSet: Set = setOf(1, 5, 5) // 정..
1. android.os.Build란? android.os.Build는 안드로이드 운영체제에서 제공하는 클래스로, 기기와 관련된 정보를 제공하는 정적 필드 및 메서드를 포함한다 이 클래스를 통해 앱은 기기의 다양한 속성과 정보에 접근할 수 있으며 시스템 속성에서 추출한 현재 빌드 중인 단말에 대한 정보로 제조사나 API레벨 OS버전 등을 알고 싶을 때 활용한다 https://developer.android.com/reference/android/os/Build Build | Android Developers developer.android.com 2. 사용방법 import android.os.Build class DeviceInfo { val brand: String get() = Build.BRAND ..