Android/Jetpack Compose 16

Jetpack Compose : Strong Skipping Mode

주의 사항 : Strong Skipping Mode는 현재 실험적이고 아직 프로덕션 용도로 사용될 준비가되지 않았습니다. Compose 1.7에서 활성화 하는 것을 목표로 하고있습니다 Strong Skipping ModeCompose Compiler 1.5.4 version에 추가된 실험적인 모드입니다.Strong Skipping Mode를 적용시킨다면 아래와 같은 두가지 방법으로 동작을 변경시킵니다.- 불안정한 매개변수가 있는 컴포저블을 안정화(skippable)하게 변경합니다.- 불안정한 Lambda는 remember를 적용시킵니다.skippable : 컴파일러가 컴포저블을 건너뛸 수 있음. 리컴포지션이 되지 않음  Composable skippability기본적으로 Compose 컴파일러는 Comp..

Android Jetpack Comopse의 CompositionLocal을 이해하고 써보자

왜 나온걸까?Composable 함수는 Tree구조를 가지고 있다.이때, 상태(state)는 일반적으로 최상단 노드에 저장이 되어있어야 한다(상태 호이스팅)상위 트리에서 만든 상태를 하위 트리에서 매개변수로 받는 것이 아닌, 바로 접근할 수 있게 해준다.  왜 최상단에 저장되어있어야 할까?컴포넌트들은 상태를 모르는게 좋다. 최상단에서 전달해준 정보를 바탕으로 화면을 나타내는 것이 더 좋은 방법이라고 생각한다. 왜냐하면 상태를 컴포넌트 별로 다 가지고 있다면 이후 추적하는 것도 힘들고, 각각의 상태를 하나씩 참조하며 변경해줘야 하기 때문에 관리하기 더 어려워 진다. 그렇다면 상태가 최상단에 있고, 트리 개념으로 아래로 내려가는 UI 구조를 가진다고 했는데 “매번 변수로 state를 내려줘야..

[Jetpack Compose] Button 사용법의 모든것

Button 말 그대로 버튼을 화면에 나타내고자 할 때 사용된다. Button(onClick = { /*TODO*/ }) { Text(text = "Button") } 어우 많다. 하나씩 가보자. onClick 버튼을 클릭했을 때 발생시킬 액션이다. api를 호출시킬 수도 있고, Toast를 띄울 수도 있고 페이지를 이동시킬 수도 있다. 그냥 버튼 클릭시 실행시키고 싶은 모든것을 넣으면 된다. enabled Button( onClick = { /*TODO*/ }, enabled = false ) { Text(text = "Button") } 버튼을 활성화시킬지 여부를 나타낸다. 기본값은 true이고, false로 설정하면 버튼이 클릭되지 않는다. 그럼 이건 어떨때 쓸까? 난 최근에 썼을때 입력받은 정보..

[Jetpack Compose] Text 사용법의 모든것

Text 말 그대로 텍스트를 화면에 나타내고자 할 때 사용된다. class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { SOPTComposeStudyTheme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { Text(text = "Hello World!") } } } } } Text도 Composable 함수이기 때문에 매개변수들을 살펴보자.오… 많다. 하나씩 하나씩 뽀개보자. text..

[Jetpack Compose] LaunchedEffect란?

LaunchedEffect가 뭘까? 코루틴을 사용하기 위한 suspend function을 호출하기 위해 필요하다. 좀 더 쉽게 말하자면 중간에 멈추고자 하는 함수를 넣기 위해서 존재한다. 이게 무슨소린가 싶을거다. 이전에 내가 작성한 Delay함수 관련 글이 있다. 이것처럼 도중에 멈추고 싶을때 LaunchedEffect를 사용한다. https://naemamdaelo.tistory.com/entry/Jetpack-Compose-%08Delay-%EC%A3%BC%EB%8A%94-%EB%B0%A9%EB%B2%95 [Jetpack Compose] Delay 주는 방법 개발을 하다보면 특정 초 지난 후 에 기능이 작동하면 좋겠다는 생각을 할 때가 있다. 그러면 Delay를 줘야하는데 어떻게 줄 수 있을까?..

[Jetpack Compose] local.properties에 값 숨기는 방

왜 숨겨야할까? 개발을 하다보면 외부 기능을 사용하고자 api연결을 위한 key를 발급받을 때가 있다. 무료인 기능도 있지만 부분유료, 유료인 상품들이 있다. 만약 내 Key가 유출되어 다른사람이 사용한다면 그 돈도 전부 내가 내야한다. 요즘 외국에서 매크로로 이런거 뽑아낸다더라... api key값이면 그나마 낫다고 쳐도 aws같은거는 진짜 조심해야한다. 그럼 아무데도 안올리면 되지않냐? 싶을 수도 있다. 물론 혼자서 개발할때는 괜찮다. 하지만 팀단위로 개발을 하게 되면 git을 사용할 것이다. private로 작성하면 상관이 없긴 하다. 그렇지만 public으로 공개를 하고자 할때는 값이 나타나면 안되기 때문에 숨겨야 한다. 어떻게 해야할까? 가장 먼저 설정해야 하는 것은 git의 gitignore ..

[Jetpack Compose] Delay 주는 방법

개발을 하다보면 특정 초 지난 후 에 기능이 작동하면 좋겠다는 생각을 할 때가 있다. 그러면 Delay를 줘야하는데 어떻게 줄 수 있을까? 두가지 방법이 있다. 1. Handler Handler(Looper.getMainLooper()).postDelayed({ // do something },1000) 하단에 있는 , 뒤에있는 숫자만큼 딜레이를 주고 중괄호 내부에 있는 코드를 실행시킨다. 1000은 1초를 의미한다. 2. LaunchEffect LaunchedEffect(Unit){ delay(1.seconds) // do something } delay 내부에 있는 시간만큼 시간이 지난 후 밑에있는 코드를 실행시킨다. Handler와 마찬가지로 1000을 적으면 1초가 되고, 위 예시처럼 1.seco..

[Jetpack Compose] Android Localhost 접속하기

기존에 웹을 했던 사람들이라면 localhost에 접속하고자 할 때 "http://localhost:8080"으로 주소를 설정할 것이다. 그런데 안드로이드는 다르다. 안드로이드에서 애뮬레이터를 돌릴 때, localhost에 접속하려면 "http://10.0.2.2:8080"과 같이 주소를 설정해야한다. 아 물론 8080은 포트번호기때문에 8080포트가 아닌 다른 포트를 쓴다면 바꿔서 넣기만 하면 된다. Base URL을 "http://10.0.2.2:8080"으로 설정하고, api 주소를 뒤에 붙여서 사용하면 된다 ex) http://10.0.2.2:8080/login 나는 이런식으로 사용한다. 정말 헷갈리는게 또 swagger를 보려면 웹으로 접속하기때문에 http://localhost:8080 로 접..

[Jetpack Compose] BackHandler : 뒤로가기 감지

어플을 사용하다보면 뒤로가기를 눌렀을 때 이런 창이 뜰때가 있다. 이건 어떻게 하는걸까? 뒤로가기를 감지하고, 특정 동작을 작동시켜야 한다. 그렇기때문에 사용하는 것이 BackHandler이다. @Composable fun BackOnPressed() { val context = LocalContext.current var backPressedTime = 0L BackHandler(enabled = true) { if(System.currentTimeMillis() - backPressedTime

[Jetpack Compose] 폰트 적용법

안드로이드 어플을 개발하다보면 디자인이 참 중요하다. 사실 모든 프론트가 다 중요하다. 그중에서 큰 영향을 끼치는 것 중 하나가 폰트다. 예쁜디자인에 구린 폰트가 들어있는것만큼 화나는게 없다. 정말 모니터 한대 치고싶어지니까 비싼 모니터 부수기 전에 폰트 적용하는 법을 배워보자. 1. res폴더 내부에 font 폴더 만들기 res -> New -> Android Resource Director를 누르면 이상한 창이 하나 나올거다. Directory name을 font로 설정하고 Resource type도 font로 설정해주고 ok를 누른다. 2. 폴더에 원하는 폰트 파일 넣기 이때 중요한게 파일 이름이다. 반드시 소문자와 _(언더바)만 사용해야 한다. 어떻게 알았냐고? 알고싶지 않았다... 에러 나니까 ..