전체 글 52

[코틀린] 코틀린 - 타입 시스템

널 가능성 널이 될 수 있는지 여부를 타입 시스템에 추가함으로써 컴파일 시 미리 감지함. 타입 이름 뒤에 물음표를 명시해야 함.' 어떤 타입이든 타입 이름 뒤에 물음표를 부티면 그 타입의 변수나 프로퍼티에 Null 참조를 저장할 수 있음. // error fun strLenSafe(s: String?) = s.lenth() // ok fun strLenSafe(s: String?)Int = if (s != null) s.lenth else 0 안전한 호출 연산자 : ?. ?.은 null검사와 메소드 호출을 한 번의 연산으로 수행. 호출하려는 값이 null이 아니라면 ?.은 일반 메소드 호출처럼 작동하고 null이면 이 호출은 무시되고 null이 결과 값이 된다. s?.toUpperCase() 와 if(s..

안드로이드 2022.09.28

[코틀린] 코틀린 - 코루틴, Scope function

코루틴 한 스레드에서 실행을 일시 중단하고 다른 스레드에서 재개 suspend function은 일반 함수처럼 코루틴 내부에서 사용될 수 있는 함수 fun main() { runBlocking { launch { doWorld() } println("Hello") } } private suspend fun doWorld() { delay(1000L) // suspend가 없다면 delay는 실행될 수 없다. println("World!") } Scope funcions 대상 객체에 대한 임시적인 스코프를 형성하여 해당 객체에 접근 가능. - let 객체 참조 : it ?.let 을 활용하여 해당 객체가 null이 아닐때만 코드 블럭 실행 fun main() { var nullableStr: String?..

안드로이드 2022.09.27

[코틀린] 코틀린 기초 - 3

고차 함수 다른 함수를 인자로 받거나 함수를 반환하는 함수 filter, map, with 등 // 함수도 타입이 존재한다. 타입을 명시하면 실제 람다식은 타입 추론이 가능하다. val sum: (Int, Int) -> Int = { x, y -> x + y } // nullable도 가능 val sumNullable: (Int, Int) -> Int? = { x, y -> x + y } val actions: () -> Unit = { println(123) } // 함수 전체에 대해서도 nullable을 정의할 수 있다. val actionsNullable: (() -> Unit)? = { println(123) } 인라인 함수 람다가 생성되는 시점마다 새로운 익명 클래스 객체 생성. -> 성능 저하..

안드로이드 2022.09.26

[코틀린] 코틀린 기초 - 2

최상위 함수 & 최상위 프로퍼티 최상위 프로퍼티에 val, var 모두 사용가능. 상수를 선언할 때에는 const val AGE = "24" 확장 함수 기존에 만들어져 있는 클래스의 함수를 외부에서 추가하여 확장시킴. fun String.lastChar(): Char = this[this.length - 1] 커스텀 접근자의 Backing field 프로퍼티는 값을 직접 저장하는 프로퍼티와 커스텀 접근자를 활용해 매번 새로운 값을 계산하는 프로퍼티가 존재 class User(val name: String) { var address: String = "unselected" set(value: String) { // backing field는 `field`로 접근가능 (get에서는 field를 참조할 수 있..

안드로이드 2022.09.25

[코틀린] 코틀린 기초

함수와 변수 코틀린은 대부분 식으로 구성된다. fun hello() = println("hello") // val은 재할당이 불가능, var는 재할당 가능 val apple: String = "apple" var banana: String = "banana" 커스텀 접근자 // 커스텀 접근자 class Person(val firstName: String, val familyName: String) { var age: Int? = null set(value) { if (value != null && value "RED" Color.ORANGE -> "ORANGE" Color.YELLOW -> "YELLOW" } fun getStringColor2(color: Color) = when (color) { Co..

안드로이드 2022.09.24

[안드로이드] Kotlin 고차함수& Lambda

💡람다식 문법 중괄호로 감싼다. 인자와 본문은 -> 로 구분. 인자는 ()로 감싸지 않는다. 인자는 타입을 생략 가능. 변수에 람다식을 넣는 경우 인자의 타입 생략 불가. 고차함수 : 람다를 인자로 받거나 반환하는 함수 (함수를 함수의 매개변수로 받을 수 있고, 함수를 반환할 수 있는 함수) fun main() { val res1 = sum(3,2) val res2 = mul(sum(2,2),3) } fun sum(a:Int,b :Int) = a+b fun mul(a:Int,b :Int) = a*b -> 좌측 : 함수의 파라미터를 괄호 안에 명시 -> 우측 : 함수의 반환 타입을 명시 () -> Unit : 매개변수도 없고, 반환값도 없음. A.(B) -> C : 함수타입은 추가적인 수신자 타이블 가질 ..

안드로이드 2022.03.28

[안드로이드] Kotlin 범위 지정 함수(let, with, run, apply, also)

코틀린 표준 라이브러리는 확장 함수들을 제공한다. 💡확장함수를 정의하는 방법은 일반 함수를 정의하는 방법에서 fun 키워드와 함수 이름사이에 확장할 클래스의 이름과 마침표를 붙여준다. fun String.lastChar(): Char = this[this.lenth - 1] #확장함수의 정의 inline fun with(receiver: T, block: T.() -> R): R { return receiver.block() } inline fun T.run(block: T.() -> R): R { return block() } inline fun T.let(block: (T) -> R): R { return block(this) } inline fun T.apply(block: T.() -> Unit)..

안드로이드 2022.03.27

[29th Sopt AppJam - Havit] 개인 회고록

Android 사용 기술 : MVVM, ACC( LiveData, DataBinding, VIewModel, Navigation...), Koin, Kakao API, BindingAdapter.. 이번 앱잼 때 개인적으로 Repository 패턴을 적용하여 사용하였다. 과거에는 ViewModel 에서 바로 서버 통신을 구현했던 반면 이번에는 동일 인터페이스로 데이터에 접속하는 형태로 코드를 구현하였다. 안드로이드 폴더링 구조를 (ui - domain - data) 레이어 순서대로 구성하였다. 과거 ViewBinding 을 사용했던 팀원들에게 DataBinding& LivaData 기술구현 방법을 설명해 주었다. 추가로 BaseBindingActivity 와 BaseBindingFragment 를 만들어..

동아리 2022.01.21

[알고리즘] Dynamic Programming

다이나믹 프로그래밍? 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법. 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장. 1. 탑 다운 하향식 2. 보텀 업 상향식 1. 최적 부분 구조 : 큰 문제를 작은 문제로 나눌 수 있음 2. 중복되는 부분 : 동일한 작은 문제를 반복적으로 해결. 피보나치 수열? 1, 1, 2, 3, 4, 8, ,13..... 점화식? 인접한 형들 사이의 관계식을 의미 배열 = 시퀀스 이러한 수열을 배열이나 리스트를 이용해 표현합니다. ➡️ 단순 재귀 소스코드 ‼️ 지수 시간 복잡도를 가지게 된다. 중복되는 부분 문제 def fibo(x): if x ==1 or x == 2: return 1 return fibo(x-1) + fibo(x-2) pr..

[Android] 코틀린의 enum class & Sealed class

enum class : 상수를 열거하기 위해서 쓰이며 상수를 집합으로 관리할 수 있어 코드의 가독성 높아짐. enum class State { IDLE, RUNNING, FINISHED } fun main() { val state = State.RUNNING val message =when (State) { State.IDLE -> " idle" State.RUNNING -> "running" State.FINISHED -> "finished" } println(message) } sealed class : super class를 상속받는 child클래스의 종류 제한하는 특성을 가지고 있는 클래스 - 다음과 같이 중첩 클래스로 정의할 수도 있음. 상위 클래스 아래에 하위 클래스들이 위치하도록 선언. - ..

안드로이드 2021.10.07