Android
-
[Android Clean Architecture] Hilt 설정
1. Version Catalog 세팅 기준으로 했습니다.2. app, data, domain, presentation 모듈이 생성되어 있는 기준입니다. Version Catalog (libs.versions.toml)[versions]......kotlin = "2.0.0"......#Hilthilt = "2.51.1"androidx-hilt = "1.2.0"#Kaptkapt = "1.8.10"#Kspksp = "2.0.0-1.0.21"[libraries]......#Hilthilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }hilt-compiler = { group = "com.google..
-
[Android] ViewModelStoreOwner 와 ViewModelProvider
ViewModelStoreOwner 와 ViewModelProvider 를 통한 특정 Activity, Fragment에서 ViewModel을 관리하는 방법에 대해 살펴보겠습니다. ◼️ MainActivity val customViewModelOwner: ViewModelStoreOwner = object : ViewModelStoreOwner { override val viewModelStore: ViewModelStore = ViewModelStore() } fun clearCustomViewModelStore() { customViewModelOwner.viewModelStore.clear() }위 코드에서 ViewModelStoreOwner 인..
-
[Android Clean Architecture] 멀티 Module 생성
1. 모듈 생성 꼭 Android Library 선택!data, domain, presentation 각각 생성해줍니다. 2. app 모듈의 res 파일을 presentation 모듈로 이전 3. ApplicationClass 생성 및 설정위치: App 모듈 패키지 하위 import android.app.Applicationclass ApplicationClass: Application() { override fun onCreate() { super.onCreate() }} App 모듈 Manifest 설정 4. MainActivity를 presentation 모듈로 이동 4. 모듈 종속성 설정 data, presentation 모듈에 추가하는 것은 이번 포스팅에서 필요 없지..
-
[Android] Version Catalog
Version Catalog를 사용하는 이유프로젝트 전체에서 사용되는 라이브러리를 중앙에서 관리할 수 있습니다.이는 라이브러리 버전을 일관성 있게 유지하는 데 도움이 됩니다. 예를 들어 클린 아키텍처 구조로 멀티 모듈을 사용하시면서 라이브러리 버전을 각 모듈별로 선언한다면, 라이브러리 버전이 변경될 때마다, 각 모듈의 라이브러리 버전을 변경해야 하는 번거로움이 발생합니다. Version Catalog를 사용하면 이러한 단점을 개선할 수 있습니다. Version Catalog 생성해당 포스팅에서는 프로젝트 생성시 Version Catalog를 생성하여 진행하겠습니다. (작성일 기준 가장 최근 버전인 Koala는 프로젝트 생성시 디폴트로 Version Catalog가 적용됩니다!) 프로젝트를 생성하면..
-
[Android] Room : openHelperFactory & 암호화 DB
openHelperFactory는 Android에서 데이터베이스를 관리하기 위한 SQLiteOpenHelper 인스턴스를 생성하는 데 사용됩니다.주로 Room 데이터베이스 라이브러리와 함께 사용됩니다.Room은 SQLite 데이터베이스의 추상화 계층으로, 더 쉽고 안전하게 데이터베이스 작업을 수행할 수 있도록 도와줍니다. openHelperFactory의 주요 역할은 데이터베이스를 여는 데 필요한 SQLiteOpenHelper를 제공하는 것입니다.SQLiteOpenHelper는 데이터베이스 생성 및 업그레이드와 같은 작업을 처리합니다. Room 라이브러리에서 openHelperFactory는 데이터베이스 빌더에 전달되어 사용자 정의 SQLiteOpenHelper를 사용할 수 있도록 합니다. SQLCip..
-
[Android Annotation] @Keep
@Keep @Keep 어노테이션은 Android 애플리케이션에서 ProGuard나 R8 같은 코드 난독화 도구를 사용할 때 특정 클래스, 메서드, 필드 등을 난독화하지 않도록 지시하는 어노테이션입니다. 언제 사용하면 될까?reflection를 사용하는 경우: 리플렉션을 통해 접근해야 하는 클래스나 메서드, 필드는 난독화되면 안됩니다. ProGuard나 R8이 난독화할 경우, 리플렉션 코드가 올바르게 동작하지 않을 수 있습니다.네이티브 코드와의 상호작용: JNI(Java Native Interface)를 통해 네이티브 코드와 상호작용하는 경우, 해당 네이티브 코드에서 참조하는 Java 메서드나 클래스는 난독화되면 안됩니다.외부 라이브러리와의 상호작용: 외부 라이브러리에서 특정 클래스나 메서드를 직접 호출하..
-
[Android Studio] 안드로이드 스튜디오 설치
바로 설명 시작하겠습니다. Download Android Studio & App Tools - Android DevelopersAndroid Studio provides app builders with an integrated development environment (IDE) optimized for Android apps. Download Android Studio today.developer.android.com위 링크에 접속하셔서 아래로 스크롤 하시면 다음과 같은 화면이 나타납니다.(Windows 64-bit) android-studio-2022.1.1.19-windows.zip 파일을 설치해 줍니다. 다운로드한 파일을 압축해제 하시고 원하시는 곳에 파일을 넣어주시면..
-
[Firebase] Authentication - 구글 로그인 간단하게 구현해보기
Firebase에서 제공하는 Authentication에서 구글 로그인을 간단하게 구현해 보았습니다. 우선 Firebase와 안드로이드 프로젝트를 연결해야 합니다!!! Firebase와 Android 프로젝트 연동하기이번 글에서는 Firebase와 안드로이드 프로젝트를 연동하는 것을 보여드리겠습니다. 1. Firebase 콘솔 접속 https://console.firebase.google.com/?hl=ko 로그인 - Google 계정 이메일 또는 휴대전화 accounts.google.com 2dong-hyeok.tistory.com 1. Firebase에 본인이 만든 프로젝트에 접속하면 화면 좌측에 다음과 같이 확인하실 수 있습니다. 2. Authenticatio..
-
[Firebase] Android 프로젝트 연동하기
이번 글에서는 Firebase와 안드로이드 프로젝트를 연동하는 것을 보여드리겠습니다. 1. Firebase 콘솔 접속 https://console.firebase.google.com/?hl=ko 로그인 - Google 계정이메일 또는 휴대전화accounts.google.com 2. 프로젝트 생성 3. 안드로이드 프로젝트 선택 중앙에 안드로이드 마커를 선택하시면 됩니다. 4. 정보 입력 패키지 이름은 여러분의 안드로이드 스튜디오에서 확인하실 수 있습니다. SHA-1값 구하기1. 안드로이드 스튜디오에서 우측 상단 Gradle을 클릭합니다. 2. 만약 1번 그림처럼 Gradle이 열린다면File - Settings - Experimental ..
Language
-
[Kotlin] Coroutine 실행 순서 살펴보기
코루틴 실행순서를 간단하게 테스트해 보았습니다. 코루틴의 개념은 다루지 않습니다!class MainActivity : AppCompatActivity() { private val mainActivityViewModel: MainActivityViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mainActivityViewModel.testCoroutine() }} [1] 하나의 코루틴스코프 내에 실행 순서private const v..
-
[Effective Kotlin] 2장 가독성 : Item 15번 ~ 18번
📌 [Item 15] 리시버를 명시적으로 참조하라. ✅ 리시버가 명확하지 않다면, 명시적으로 리시버를 적어서 명확하게 하는 것이 좋다. 레이블 없이 리시버를 사용하면 가장 가까운 리시버외부에 있는 리시버를 사용하려면, 레이블을 사용 예시)apply 스코프 내부에 레이블 없이 사용된 리시버는 create()메서드의 반환값을 가리킨다. (this?.name)그리고 외부 리시버를 사용하기 위해 레이블을 붙여 사용하는 것을 확인할 수 있다. (this@Node.name) 출력: Created parent-child in parent 어떤 리시버를 활용하는지 의미를 명확하게 하면 코드의 안정성과 가독성을 향상할 수 있다.리시버를 제거하여 코드를 짧게 만든다고 해서 무조건 좋은 것은 아니다. 📌 [I..
-
[Kotlin] 자료형 | 자료형 변환 | 스마트 캐스트
◼️ Kotlin코틀린은 JetBrains에서 개발하고 보급.자바와 달리 문장 끝에 세미콜론(;)은 옵션Google IO 2017에서 Android 공식 언어로 추가 발표변수는 Nullable과 NotNull로 나뉨 ◼️ 코틀린의 장점자료형에 대한 오류를 미리 잡을 수 있음 (컴파일러가 타입을 검증한다.)자바와 비교했을때 NullPointer Exception에서 비교적 자유로움데이터형 선언 시 Null 가능한 형식과 불가능한 형식 지원자바와 완벽하게 상호호환됨자바와 비교했을 때 간결하고 효율적인 프로그래밍이 가능함수형 프로그래밍과 객체 지향 프로그래밍이 모두 가능세미콜론 생략 가능 ◼️ 참고코틀린은 JVM위에서 동작한다.자바는 class안에 main 메서드를 선언해야 한다. 하지만 코틀린은 clas..
-
[Kotlin] 자료형 | 자료형 변환 | 스마트 캐스트
◼️ Kotlin코틀린은 JetBrains에서 개발하고 보급.자바와 달리 문장 끝에 세미콜론(;)은 옵션Google IO 2017에서 Android 공식 언어로 추가 발표변수는 Nullable과 NotNull로 나뉨 ◼️ 코틀린의 장점자료형에 대한 오류를 미리 잡을 수 있음 (컴파일러가 타입을 검증한다.)자바와 비교했을때 NullPointer Exception에서 비교적 자유로움데이터형 선언 시 Null 가능한 형식과 불가능한 형식 지원자바와 완벽하게 상호호환됨자바와 비교했을 때 간결하고 효율적인 프로그래밍이 가능함수형 프로그래밍과 객체 지향 프로그래밍이 모두 가능세미콜론 생략 가능 ◼️ 참고코틀린은 JVM위에서 동작한다.자바는 class안에 main 메서드를 선언해야 한다. 하지만 코틀린은 class없..
-
[Kotlin] infix & top level function
📌 infix 확장 함수Kotlin에서 infix 확장함수는 특정 타입의 메서드를 더 읽기 쉽고 자연스러운 문법으로 호출할 수 있게 해주는 기능입니다. infix 함수는 한 쌍의 객체 사이에 중위 연산자처럼 사용될 수 있으며, 단일 파라미터를 받습니다. 이를 통해 코드를 더 간결하고 직관적으로 작성할 수 있습니다. infix 확장함수 정의 방법infix 함수를 정의하기 위해서는 몇 가지 규칙이 있습니다.멤버 함수 또는 확장 함수여야 합니다. 단 하나의 파라미터를 가져야 합니다. infix 키워드로 시작해야 합니다. 사용 시 주의 사항infix 함수는 가독성을 높이는 목적으로 사용되며, 남발할 경우 코드의 명시성을 해칠 수 있으므로 적절한 상황에서 사용하는 것이 중요합니다. 함수가 단 하나의 인자만 받는..
-
[Effective Kotlin] 2장 가독성 : Item 11번 ~14번
📌 [Item 11] 가독성을 목표로 설계하라✅ 인식 부하 감소가독성이란 코드를 읽고 얼마나 빠르게 이해할 수 있는지를 의미합니다. 사람에 따라 가독성에 대한 관점은 다르지만, 뇌가 프로그램의 작동 방식을 이해하는 과정을 더 짧게 만드는것을 가독성이 좋은 코드라고 말할 수 있습니다.숙력된 개발자만을 위한 코드는 좋은 코드가 아니다.일반적이지 않고 ‘굉장히 창의적인’ 구조는 유연하지 않고, 지원도 제대로 받지 못한다. ✅ 극단적이 되지 않기let과 같이 잘 모르고 사용하면, 예상하지 못한 결과가 나올 수 있습니다. 누군가는 let을 절대로 사용하지 말라고 합니다. 그러나 let을 적제 적소에 잘 사용한다면 더 좋은 코드를 만들 수 있습니다. 📌 [Item 12] 연산자 오버로드를 할 때는 의미에 맞게 ..
-
[Effective Kotlin] 1장 안전성 : Item 6번 ~ 10번
📌 [Item 6] 사용자 정의 오류보다는 표준 오류를 사용하라제목 처럼 사용자 정의 오류를 사용하기 보단, 가능한 표준 라이브러리를 사용하는 것이 좋다. ✅ 표준 라이브러리를 권장하는 이유많은 개발자들이 더 쉽고 빠르게 이해할 수 있다. 그러므로 재사용성도 더 좋아집니다. ✅ 표준 라이브러리 예외IllegalArgumentException과 IllegalStateException : require와 check를 사용해 throw 할 수 있는 예외다.IndexOutOfBoundsException : 인덱스 파라미터의 값이 범위를 벗어났을때 나타냅니다. 보통 ArrayList.get(Int)를 사용할 때 throw 된다.ConcurrentModificationException : 동시 수정을 금지했는데..
-
[Effective Kotlin] 1장 안전성 : Item 1번 ~ 5번
📌 [Item 1] 가변성을 제한하라✅ var 보다는 val을 사용하여 가변성을 줄이자!var읽고 쓰기가 모두 가능한 프로퍼티val읽기 전용 프로퍼티지만, 변경할 수 없음을 의미하는 것은 아니다.완전 불변이 필요하다면 final 프로퍼티를 사용하는 것이 좋다.✅ val & 스마트 캐스트타입 캐스트가 불가능한 경우 val name: String? = "dong" val surname: String = "hyeok" val fullName: String? get( ) = name?.let{ "$it $surname"} fun main() { // 타입 캐스트가 불가능하기 때문에 fullName!!...
-
[Python] - List, Set, Dict 시간 복잡도(Big-O)
알고리즘의 시간복잡도는 프로그램의 입력값과 연산 수행 시간의 상관관계를 나타내는 척도이다. 알고리즘의 시간복잡도는 주로 빅-오 표기법을 사용하여 나타내며, 이 빅-오 표기법은 계수와 낮은 차수의 항을 제외시키는 방법으로 표현할 때, 시간복잡도를 점근적으로 묘사한다고 말한다. ex) 약 크기 n의 모든 입력에 대한 알고리즘에 필요한 시간이 최대 (어떤 n0보다 크지 않은 모든 n에 대하여) 5n^3 + 3n의 식을 가진다면, 이 알고리즘의 점근적 시간 복잡도는 O(n^3)이라고 할 수 있다. List Set Dictionary 참고자료 https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt List와 Set의 탐색 속도 차이 두 방식 모두..
-
[백준] 17269 - 이름궁합 테스트 (python)
17269번: 이름궁합 테스트 시윤이는 좋아하는 이성이 생기면 가장 먼저 이름궁합부터 본다. 이름궁합을 보는 방법은 간단하다. 먼저 이름을 알파벳 대문자로 적는다. 각 알파벳 대문자에는 다음과 같이 알파벳을 적는데 www.acmicpc.net N, M = map(int, input().split()) A, B = input().split() alp = [3,2,1,2,4,3,1,3,1,1,3,1,3,2,1,2,2,2,1,2,1,1,1,2,2,1] AB = "" min_str = min(N,M) for i in range(min_str): AB += A[i]+B[i] AB+=A[min_str:]+B[min_str:] num_lst=[alp[ord(i)-ord('A')] for i in AB] for i i..
-
[백준] 10539 - 수빈이와 수열 (python)
10539번: 수빈이와 수열 수빈이는 심심해서 수열을 가지고 놀고 있다. 먼저, 정수 수열 A를 쓴다. 그리고 그 아래에 정수 수열 A의 해당 항까지의 평균값을 그 항으로 하는 정수 수열 B를 쓴다. 예를 들어, 수열 A가 1, 3, www.acmicpc.net N, lst = input(),list(map(int,input().split())) res =[lst[0]] for i in range(1,int(N)): res.append(lst[i]*(i+1)-sum(res)) for i in res: print(i, end=' ') Tip) end = ' ' 옵션을 사용하여 한 줄에 결과가 공백을 사이에 두고 출력하도록 했습니다.
-
[백준] 15969 - 행복 (python)
15969번: 행복 모든 서브태스크에서 2 ≤ N ≤ 1,000이고 입력되는 학생들의 점수는 0 이상 1,000 이하의 정수이다. www.acmicpc.net N, lst = input(),list(map(int,input().split())) print(max(lst)-min(lst))
- 방문자수
전체 방문자
오늘 방문자
어제 방문자