전체 글 103

[Kotlin] Collection 함수 - (1) 원소 변환 및 필터, 특정원소 검색

컬렉션의 원소 타입을 변환하거나 필터링 하는 과정은 코딩테스트에서 빈번하게 사용되더라구요 꼭 익혀두도록 해야겠어요 :) Collection에 확장함수는 정말 너무나도 많아요.. 공식문서에 스크롤이 이를 증명합니다.. 어떻게 나눠야 하나 많이 고민했는데 우선 1️⃣ 원소 변환 및 필터, 특정원소 검색 2️⃣ 수학적 개념 3️⃣ index 관련 4️⃣ 형식변환5️⃣ 값 반환 및 정렬 순으로 정리해볼까 해요 :) 이유는 제맘입니다..🫢 바뀔수도 있어요 ,, 원소 변환 Map Collection 타입을 Collection 타입으로 변환 공식문서엔 아래와 같이 설명되어있어요 Returns a list containing the results of applying the given transform function..

💡 Kotlin 2023.01.12

[Kotlin] mutable Collection

2023.01.03 - [💡 Kotlin] - [Kotlin] Collection (List, Set, Map) [Kotlin] Collection (List, Set, Map) 많이 접한만큼 익숙한 자료구조이지만, 한번 더 살펴보겠습니다 Collection 자료구조 중 하나로, 크게 3가지 컬렉션이 있습니다 (List, Set, Map) List와 Set은 Collection을 상속받고, Map은 독자적입니다 간 kong-droid.com 이전 포스팅에서 Collection에 대해 알아봤는데, Collection 인터페이스에서 원소를 수정하려면 Mutable Collection을 사용해야해요 오늘은 Mutable Collection에 대해 알아보겠습니다 ✏️ MutableCollection interf..

💡 Kotlin 2023.01.08

[Android] Clean Architecture

이전 포스팅에도 작성한 적이 있는데, 새로이 공부하면서 다시 정리해보도록 하겠습니다 ✏️ 왜냐하면 까먹었기 때문이죠 아마 내용이 비슷할거에요.. 그래도 한번 더 써보는걸로도 공부가 되니깐,,. 2022.05.29 - [📱 Android] - [Android] Clean Architecture in Android [Android] Clean Architecture in Android Clean Architecture 본격적인 디자인 패턴 공부에 앞서, clean Architecture에 대해 알아보겠습니다 Clean Architecture에 가장 중요한 부분은 UI와 Data를 분리함에 있습니다 관심사를 계층별로 분리 관심사란 단 kong-droid.com Clean Architecture ⭐️ 관심사 분..

📱 Android 2023.01.08

[Android] SOLID 원칙

설계원칙으로 유명한 SOLID 원칙에 대해 하나씩 알아보겠습니다 단일 책임 원칙 (Single Responsibility Principle) • 어떤 클래스나 모듈 , 메서드가 하나의 기능을 가져야 한다는 의미 • 모든 클래스는 단 하나의 책임만 가짐 -> 변경사항 발생 시 그 변경사항에 책임이 있는 부분만 수정 ex) A 모듈 : 특정 데이터를 분석 , 서버에 전송 A 모듈은 2가지 이유로 변경될 수 있다 1. 특정 데이터 분석 알고리즘 변경 2. 서버에 전송하는 형식 변경 실제로는 분리된 책임이며, 따라서 분리된 클래스 모듈로 나눠야한다 🔍 왜 이렇게까지 한 클래스에 한 책임만 가져야하는가 클래스를 더욱 튼튼하게 한다 (변경사항이 다른 책임에 영향을 주지 않으므로, 유지보수 용이) 개방 - 폐쇄 원칙..

📱 Android 2023.01.08

[Hilt] 코드랩으로 Hilt 익히기 # 1

Android 앱에서 Hilt 사용 | Android 개발자 | Android Developers 이 Codelab에서는 Hilt를 사용하여 종속 항목 삽입을 실행하는 Android 앱을 빌드해 보겠습니다. developer.android.com Android 앱에서 Hilt 사용 코드랩을 따라 Hilt를 익혀보겠어요 ✏️ Hilt가 dagger를 기반으로 만들어진 DI라, Hilt도 Annotation을 씁니닷 라이브러리 추가하기 코드랩에 적혀있는 방법으로는 라이브러리가 추가가 안되더라구여,, 아무래도 최신버전이 아니라서 그런 거 같아요 1. plugin id 추가 id 'kotlin-kapt' id 'dagger.hilt.android.plugin' 2. 프로젝트 단위 build.gradle plug..

📱 Android 2023.01.07

[Kotlin] Collection (List, Set, Map)

많이 접한만큼 익숙한 자료구조이지만, 한번 더 살펴보겠습니다 Collection 자료구조 중 하나로, 크게 3가지 컬렉션이 있습니다 (List, Set, Map) List와 Set은 Collection을 상속받고, Map은 독자적입니다 간단히 3가지의 특징, 생성법에 대해 알아보자면, ✅ List : 순서 O val list: Collection = listOf(1,2,3) ✅ Set : 순서 X, 중복 X val set: Collection = setOf(9,8,7) ✅ Map : [키-값]의 형태 , 키는 중복 X val map: Map = mapOf("First" to 0, "Second" to 1) Collection Interface interface Collection : Iterator Co..

💡 Kotlin 2023.01.03

[kotlin] Pair

Pair 두 변수를 하나로 묶어주는 클래스 (사용되는 경우가 많으므로 잘 알아두기) data class Pair : Serializable Pair 클래스의 Properties - first : Pair의 첫번째 값 - second : Pair의 두번째 값 Pair 생성하기 var (x,y) = Pair(3, 0.14) var (x,y) = Pair(3, 0.14) 자료형은 삭제해도 상관없다 Pair의 리스트화 toList() var x = Pair(3, 0.14).toList() toList()를 통해 리스트화 가능 두 값을 Pair화 시키려면 val test : Pair = 3 to 0.14 ✔️ to 확장함수 사용 infix fun A.to(that: B): Pair = Pair(this, that..

💡 Kotlin 2023.01.02

DI (Dependency Injection) 의존성 주입

코루틴으로 기존 프로그램 구조를 변경하다가, DI에 대해 다시 재정리가 필요할 것 같아서 재정리..합니다 DI (Dependency Injection) 의존성 주입 직접 객체를 생성하지 않고, 외부로부터 주입받는 방법 (객체의 의존성을 주입) 왜 이런 개념을 사용해야하는지 알아보겠습니다 (공식문서 참조) 의존성을 주입하지 않는 예시(클래스에서 인스턴스를 직접 생성) class Car { private val engine = Engine() fun start() { engine.start() } } fun main(args: Array) { val car = Car() car.start() } 위 코드에서의 문제점은 😱 Car, Engine이 너무 밀접하게 연결됨 (테스트가 어려움) 😱 Car에서 Engi..

📱 Android 2022.12.05

[🔥 Coroutine] #5 또 예제로 복습하기 (async, launch)

✏️ 예제를 통한 복습 suspend fun getRandNum1() : Int { delay(1000L) return Random.nextInt(0,500) } suspend fun getRandNum2() : Int { delay(1000L) return Random.nextInt(0,500) } fun main() = runBlocking { val time = measureTimeMills{ val one = getRandNum1() val two = getRandNum2() println("${one} + ${two} = ${one + two}") } println(time) } 순차적으로 실행되어 1000L + 1000L = 2초가 걸림 개별적으로 실행되지만, 순차적으로 실행되어서 항상 get..

[🔥Coroutine] #4 suspend, Job 간단하게 살펴보기

시작 전 복습 한 마디 코루틴이 쓰이는 모든 곳에는 CoroutineScope가 있습니다 CoroutineScope는 CoroutineContext(코루틴을 처리하기위한 정보)를 가지고 있습니다 suspend 코루틴 내에서만 함수를 호출하지 않고, 코드의 일부를 함수로 분리하려면 suspend 키워드를 사용 suspend가 붙은 함수를 사용하려면 1. 그 함수가 suspend이거나 2. CoroutineBuilder를 통해 코루틴을 만들어야한다 suspend fun showName(){ println("showName") delay(500L) println("My name is Kong") } suspend fun showAge(){ println("showAge") delay(1000L) println..