본문 바로가기

전체 글94

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