분류 전체보기 426

컴포즈(compose) 컴포저블 함수 상태 관리

컴포저블 함수 상태 관리 7장에서는 초기화 후에 객체를 ViewModel에 전달하는 방법 객체를 사용해 데이터를 불러오고 저장하는 방법을 알아본다. 상태 유지와 검색 이전에 배운것 컴포즈 앱에서는 상태를 State나 MutableState의 인스턴스로 나타낸다. 상태가 변경됨에 따라 재구성 동작을 유발한다. 상태를 전달 받아 호출한곳으로 상태를 옮기는 것을 상태 호이스팅이라 부른다. 이러한 상태는 종종 사용하는 부모 컴포저블 중 하나에서 기억되는 경우도 있다. → 다른 대안으로 ViewModel 패턴으로 구현하는 방법이 있다. ViewModel 인스턴스는 데이터 초깃값을 어디서 가져오고, 데이터가 변경되면 무슨일을 하게 되는가? 안드로이드에서는 리포지터리 패턴 제안(책에서) 생성 class ViewMod..

컴포즈(compose) 앱 스타일링

컴포즈 앱 스타일링 1 색상, 모양, 텍스트 스타일의 정의 대부분의 컴포즈 UI는 android.compose.material 패키지에 내장된 컴포저블 함수를 사용할 것이다. 브랜드나 회사들은 그들의 정체성을 반영하는 색상, 모양, 텍스트 컬러를 정의하곤 한다. 그렇기 때문에 기본적으로 제공되는 머터리얼 컴포저블 함수의 모양을 수정할 필요가 있다. 머터리얼 테마의 메인 진입점은 MeterialTheme()이다. 이 컴포저블은 커스텀 색상, 모양, 텍스트 스타일을 매개변수로 전달받는다. 값을 설정하지 않으면 그에 상응하는 기본값이 사용된다. @Composable fun ComposeUnitConverterTheme( darkTheme: Boolean = isSystemInDarkTheme(), //isSy..

Firebase FCM 기존 HTTP에서 HTTP v1로 마이그레이션

Firebase FCM 기존 HTTP에서 HTTP v1로 마이그레이션 타사 라이브러리 작업중 HTTP v1 API로 하라는 경고가 떠서 작성하게 되었습니다. FCM(Firebase 클라우드 메시징) 서비스는 2024년 6월 20일을 기점으로 레거시(XMPP, HTTP) 방식의 통신 API를 중단하고, 새로운 HTTP v1 API를 지원합니다. HTTP v1 API 장점 액세스 토큰을 통한 보안 향상: HTTP v1 API는 OAuth2 보안 모델에 따라 수명이 짧은 액세스 토큰을 사용합니다. 액세스 토큰이 공개되는 경우에도 악의적으로 사용될 수 있는 시간은 만료되기 전 1시간 정도뿐입니다. 갱신 토큰이 기존 API에서 사용하는 보안 키만큼 자주 전송되지 않으므로 캡처될 가능성이 매우 낮습니다. 보다 효율..

안드로이드 2024.01.29

Android Studio Preferences 설정

Android Studio Preferences 설정 개발 하면서 설정 코틀린 코딩컨벤션 및 개발 설정을 하기위해 적었습니다. kotlin, import * 제한 설정 코틀린 코딩 컨벤션 중, import 시 `*` 사용 지양 관련 처리 방법 Preferences > Editor > Code Style > Kotlin Top-level Symbols, Java Statics and Enum Members 항목 Use single name import 사용 Packages to Use Import with '*', Import Layout 항목 하위 목록 삭제 각각의 다른 windows로 Emulator 열기 설정 Android Studio Bumblebee | 2021.1.1 이후, Emulator를 각..

개발설정 2024.01.23

테스트 코드 작성 junit assertEquals

안드로이드 테스트 코드 작성 작업중 StringUtil에 함수를 하나 만들었다. PR에 StringUtil함수 추가시에는 테스트 코드도 넣어주었으면 좋겠다고 하여 테스트 코드를 추가 하였습니다. 자바로 작성되어있어서.. 자바로 했다. 1. 테스트 클래스 파일을 만든다. 2. 함수를 실행하여 결과 확인 public class StringUtilTest { @Test public void replaceCurrentAppSchemeAndDomain() { assertEquals(StringUtil.함수(), "결과값"); } } 함수옆에 보면 실행하는 표시가 있다! 단정 메소드(assert method) JUnit에서 가장 많이 이용되는 단정(assert) 메소드입니다. 단정 메서드로 테스트 케이스의 수행 결..

안드로이드 2023.10.13

binding시 release 모드에서 에러가 발생할 때

릴리즈모드 바인딩 에러와 관련하여 몇 가지 테스트를 통해서 내용 정리를 했습니다. 1. Release 모드에서 VIewBinding class를 찾지 못해서 에러가 발생 -> 왜 찾지 못할까? ... 최적화(minifyEnabled)옵션이 true이면 binding 파일이 사라진다. 2. 최적화에서 binding 파일이 사라지지 않으려면 어떻게 해야 할까? -> layout 태그를 명시적으로 추가하거나, binding 파일을 사용하는 화면에서 binding에 실제 접근을 하면 된다. 결론 : layout 태그도 없고, Fragment 소스상에서 binding에 접근도 하지 않아 최적화 과정에서 참조 없는 클래스로 판단, 자동으로 삭제되어 문제가 발생. 앞으로, layout 태그를 명시적으로 추가하자!!!..

컴포즈(compose) 컴포저블 함수 상태 관리

컴포저블 함수 상태 관리 상태를 갖지 않는 컴포저블과 상태를 갖는 컴포저블 간의 차이점 이해 언제 어떠한 것을 선택할지 살펴본다. 상태를 갖거나 갖지 않는 컴포저블 함수 이해 상태 : 시간이 흐름에 따라 변하는 데이터 UI는 항상 현재 데이터를 보여줘야만 한다는 것이 중요 따라서 값이 변경되면 반드시 UI에 알려야 함. 옵저버블 타입을 사용 State는 기본 인터페이스로, value라는 이름을 갖는 프로퍼티에 특정 타입의 값을 저장하는 객체인 값 홀더(value holder)를 정의 컴포저블 함수가 실행되는 동안 value가 변경될 때마다 재구성될 것이다. 내부적으로 RecomposeScope 인터페이스가 값의 변경 사항을 구독하고 있을 것이기 때문 값이 변경될 수 있게 하려면 MutableState의 ..

컴포즈(Compose) UI 요소 배치

미리 정의된 레이아웃 사용 고려해야 할 세가지 축 수평(Horizontal) 수직(Vertical) 스택(Stacked) Row() - 가로 Column() - 세로 Box() & BoxWithConstraint() - 콘텐츠를 맨위에 쌓음. CheckBox() - 현재 상태(checked)와 선택하면 호출되는 람다(onCheckedChange)를 받는다 함수 작성시점에 레이블 전달할 수 없다. 대신 CheckBox(), Text()를 Row()안에 포함해 유사한 결과물 만들 수 있다. CheckBoxWithLabel()은 MutableState을 받는다. onCheckedChange 내부에서 값이 변경되면 다른 컴포저블 함수를 재구성해야 하기 때문이다 제약 조건을 기반으로 하는 레이아웃 생성 코드를 단..

컴포즈(Compose) 컴포즈 핵심 원칙 자세히 알아보기

잿팩 컴포즈가 의존하고 있는 핵심 원칙을 검토 컴포저블 함수 자세히 살펴보기 컴포저블 함수의 구성 요소 @Composable 어노테이션을 포함하는 코틀린 함수 컴포즈 컴파일러에 해당 함수가 데이터를 UI로 변환 한다는 것을 알림 코틀린 함수 시그니처 선택 사항인 가시성 변경자(private, protected, internal 또는 public) fun 키워드 함수명 매개변수 목록 또는 선택적 기본값 채택 선택 사항인 반환 타입 코드블록 컴포저블 함수명은 파스칼(PascalCase) 표기법을 사용 대문자로 시작하지만 나머지 문자는 소문자로 나타낸다. 두 단어 이상으로 되어있다면 이름은 명사(Demo) 서술형 형용사를 접두어로 갖는 명사(FancyDemo)여야 한다. 다른 코틀린 함수와는 다르게 컴포저블 ..