일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Java8
- NoSuchMethodError
- ozd
- OZViewer
- mqtt
- cloud-firestore
- firebase-storage
- Kotlin
- AWS
- google-login
- git
- git-push
- firebase-database
- TIZEN
- Android
- JNI
- Dva
- Flavors
- 오즈뷰어
- socket-server
- socket-client
- gradle
- BottomSheetDialog
- Firebase
- 워치
- Galaxy Watch
- ActivityResult-API
- socket.io
- mosquitto
- hung-up
- Today
- Total
목록개발/Android (60)
Hyeyeon blog

1. MVI 패턴이란?MVI (Model-View-Intent) 패턴은 단방향 데이터 흐름을 기반으로 하는 아키텍처 패턴입니다.사용자의 입력(Intent)을 받아 애플리케이션의 상태(State)를 변경하고, 그 상태를 기반으로 UI(View)를 렌더링하는 구조를 갖습니다.이를 통해 복잡한 상태 관리를 단순화하고 UI의 동작을 예측 가능하게 만들어 디버깅과 유지보수를 용이하게 만듭니다. 2. Compose + MVI 1) 단방향 데이터 흐름Compose의 UI는 상태(State)에 따라 변하며 상태 변화가 있을 때마다 UI가 재구성됩니다.MVI는 단방향 데이터 흐름을 사용하여 상태를 관리하기 때문에 Compose의 흐름과 잘 맞습니다. 2) 불변 상태 관리Compose는 상태를 불변(immutable)하..

1. Compose의 Semantics 이란, Jetpack Compose의 UI 요소는 계층적인 시맨틱 트리(Semantics Tree)로 구성되며, 각 요소는 SemanticsNode로 표현됩니다. UI 테스트에서는 이 시맨틱 트리를 탐색하여 특정 요소(시맨틱 노드)를 찾아 테스트를 수행합니다.아래와 같이, Column, Text, Button, Row 같은 시맨틱 요소들이 등록되어 트리를 구성하며, UI 테스트 시 이를 탐색합니다.Root ├── Column │ ├── Text("Hello") │ ├── Button("Click!") │ └── Row │ ├── Text("Item 1") │ └── Text("Item 2")🔎 시맨틱 트리 시각화시맨틱 ..
5장 객체 생성 33. 생성자 대신 팩토리 함수를 사용하라 34. 기본 생성자에 이름있는 옵션 아규먼트를 사용하라 35. 복잡한 객체를 생성하기 위한 DSL을 정의하라 6장 클래스 설계 36. 상속보다는 컴포지션을 사용하라 37. 데이터 집합 표현에 data 한정자를 사용하라 38. 연산 또는 액션을 전달할 때는 인터페이스 대신 함수 타입을 사용하라 39. 태그 클래스보다는 클래스 계층을 사용하라 40. equals의 규약을 지켜라 41. haseCode의 규약을 지켜라 42. compareTo의 규약을 지켜라 43. API의 필수적이지 않은 부분을 확장함수로 추출하라 44. 멤버 확장 함수의 사용을 피하라 33. 생성자 대신 팩토리 함수를 사용하라 * 팩토리 함수: 생성자 역할을 대신 해주는 함수 * ..
🤓 AGP 7.4.0 이상에서 발생하는 문제로, 아래와같이 build.grale(app)에 JVM 대상의 JDK 버전을 명시하여 해결할 수 있다. kotlin { jvmToolchain(17) } android { kotlinOptions { jvmTarget = JavaVersion.VERSION_17.toString() } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } }
3장 재사용성 19. knowledge를 반복하여 사용하지 않기 20. 일반적인 알고리즘을 반복해서 구현하지 않기 21. 일반적인 프로퍼티 패턴은 프로터피 위임으로 생성하기 22. 일반적인 알고리즘은 제네릭 함수로 구현하기 23. 타입 파라미터의 섀도잉을 피하기 24. 제네릭 타입과 variance 한정자(out, in) 활용하기 25. 공통 모듈로 추출해서 여러 플랫폼에서 재사용하기 4장 추상화 설계 26. 함수 내부의 추상화 레벨을 통일하라 27. 변화로부터 코드를 보호하려면 추상화를 사용하라 28. API 안정성을 확인하라 29. 외부 API를 랩(wrap)해서 사용하라 30. 요소의 가시성을 최소화하라 31. 문서로 규약을 정의하라 32. 추상화 규약을 지켜라 19. knowledge를 반복하여 ..
2장 가독성 11. 가독성을 목표로 설계하기 12. 연산자 오버로드를 이름의 의미에 맞게 사용하기 13. Unit?을 리턴하지 않기 14. 변수 타입을 명확하게 지정하기 15. 리시버를 명시적으로 참조하기 16. 프로퍼티는 동작이 아닌 상태를 나타해야함 17. 이름있는 아큐먼트를 사용하기 18. 코딩 컨벤션 지키기코틀린은 간결성이 아닌 가독성을 개선하는 데 목표를 두고 설계된 언어임.간결성은 가독성을 목표로 두고 반복되는 코드를 짧게 쓸 수 있기 때문에 발생한 부가적인 효과임.11. 가독성을 목표로 설계하기코드는 읽고 이해하기 쉽게 작성해야합니다. 인지 부하가 있더라도 가치가 있는 경우라면 사용할 수 있습니다. 이를 위해 어떤 구조들이 어떤 복잡성을 가져오는지 파악이 필요합니..
이펙티브 코를린을 읽고 내용을 정리해봅니다. 나도모르게 사용하고있는 안티패턴을 경계하려는 마음을 한가득 담아... 🥹1장 안정성가변성 제어하기변수의 스코프 최소화 플랫폼 타입 사용 지양하기inferred 타입으로 리턴하지 않기 예외를 활용하여 코드에 제한걸기사용자 정의 오류보다 표준 오류 사용하기결과 부족이 발생한 경우, null과 Failure 사용하기적절하게 null 처리하기 use를 사용하여 리소스 닫기1. 가변성 제한하기 (가변지점 제한)val, immutable 클래스/프로퍼티를 사용하여, 상태 변경을 최소화합니다. 변경이 필요한 경우에는 immutable data class를 만들고 copy() 를 활용하여 새로운 인스턴스를 생성합니다.컬렉션의 상태를 저장할 시에는 읽기 전용(read-on..
JNI의 .cpp 파일에서 std::string을 사용하기 위해 include 을 추가했더니 오류가 발생했다. ㅠ.ㅠ 😵 오류 내용 : Execution failed for task ':mid:stripAllDebugDebugSymbols'. > 1 exception was raised by workers: org.gradle.process.internal.ExecException: A problem occurred starting process 'command '/Users/hyeyeon/Library/Android/sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-strip'' 😇 해결 방법 : 1..