전체 글 236

플러터의 GetX ?

플러터의 다음 포스팅으로 자주 쓰는 위젯을 적으려고 했는데 사실 워낙 많은 위젯이 있고 모든걸 다 적는건 시간도 시간이고 그때그때 찾는게 더 효율적일거 같다는 생각이 들어서 많은 사람들이 잘쓰고 있고 유명한 오픈소스 위젯? 들에 대해서 적어보려고 한다. 이번 포스팅은 GetX다. 1. GetX란 뭘까? 전 포스팅에서 말했던 state (상태) 라는 개념을 관리하기 위해 많이쓰이고 있다. 다시 정리하면 Flutter를 위한 state 관리 라이브러리다. 플러터에서는 GetX ,BLOC, Provider 등을 상태관리로 많이 쓰고 있는데 그 중에서 GetX가 상대적으로 사용하기 편하고 또 강력해서 많이들 사용한다. 2. GetX는 상태관리말고도 이것저것 해준다. 라우팅 (화면 전환 애니메이션도 제공) 의존성..

Flutter 2023.01.08

Dev6 의 첫 시작 _ 리드펫

0. 시작 혼자서 제대로 완성은 못해도 끄적끄적 생각나는 아이디어를 코드로 만드는걸 좋아했던 나는 혼자 이렇게 만들지말고 나 말고 서버 개발자, 디자이너 , 웹개발자, ios 개발자들을 모아서 팀을 만들고 같이 하나의 목표를 위해 개발해보고 싶다는 생각이 들었다. 다른 개발자들과 소통하는걸 바랬던것도 있지만 동료가 있다면 혼자서는 해내지 못하는 일을 해낼 수 있다는 믿음 때문이였다. 서비스를 만드는 사람들이 최소 6명은 있으면 좋겠다는 생각에 생겨난 Dev6. 얼굴도 모르는 사람들을 인터넷으로 찾고 찾아서 팀을 꾸렸고 생각하고 있었던 아이디어를 듣고는 좋다며 같이 해보자고 흔쾌히 동의해준 동료들과 함께 프로젝트가 시작됐다. 1. 좋았던 점 일단 사람들이 좋았다. 어느하나 설렁설렁 하는 사람이 없었고 서로..

Dev6 2022.11.10

플러터의 위젯이란?

플러터의 동작 원리에 대해 말하려면 위젯의 대한 설명을 먼저 하고 넘어가야한다. 1. 플러터는 곧 위젯의 집합이다. 플러터 프로젝트를 생성해보면 웹이나 Rn 와 비슷하게 코드가 생겼는데 뷰 계층 을 이루고 있다. 플러터는 위젯이라는 개념이 존재하는데 이 위젯은 버튼, 이미지, 텍스트 등등 작은 컴포넌트를 의미한다. 이것들을 조합하고 계층을 만들어 프로젝트를 구성해간다. 심지어 스타일과 애니메이션 까지고 모두 위젯이다. 2. 위젯의 사용 예시 위젯은 앱 화면의 모든 정보를 정의하는데 쓰이고 있다. 예를들어 Row 라는 위젯은 Row( childern : [ ] ) 이런식으로 적으면 childern 안에 들어있는 위젯들을 가로로 정렬한다는 의미가 된다. 그리고 또 Row( mainAxisAlignment :..

Flutter 2022.11.06

플러터란?

1. 플러터란 구글에서 만들어졌으며 오픈소스로 공개된 모바일 SDK 다. 플러터는 리액트 네이티브와 비슷하게 안드로이드 , IOS 를 하나의 코드로 동시 개발 할 수 있는 크로프 플랫폼이다. 현재는 웹과 윈도우 프로그램도 개발이 가능한 상태다. 1.1 플러터는 어떤 언어를 사용할까? 리액트 네이티브가 비교적 넓게 쓰기는 자바 스크립트로 개발할 수 있어서 얻는 이점이 있었듯 기존 개발자들이 사용하는 언어를 그대로 사용할 수 있었다면 더 좋았겠지만 플러터는 다트(Dart) 라는 언어를 사용한다. 이 언어도 구글에서 만들었는데 안드로이드 플랫폼도 지원하고 있는 구글이 왜 생소한 언어를 따로 만든걸까? 다트는 JIT(just-in-time) 컴파일과 AOT(ahead-of-time)컴파일을 모두 지원한다. AO..

Flutter 2022.11.06

선언형 UI 에 대한 지극히 개인적인 생각

몇년전부터 많이 언급되고 실제로 사용도 많이하고 있는 선언형 UI 에 대해서 한번쯤 이야기 해보고 싶었다. 여러가지가 있겠지만 내가 경험해본 선언형 UI 는 compose , flutter 가 있다. 선언형 UI 라고 하면 라는 개념이 심심치 않게 나오는데 STATE 라고 하는 상태라는 개념이 컴포즈에서는 컴포저블, 플러터에는 위젯으로 존재하는 것에 들어갔을때 그에 맞는 View를 생상하는 개념이 있다. 그래서 xml, html, 또는 명령형 프로그래밍 처럼 특정 view에 하나하나 값을 나열해서 넣어주는게 아니라 state 를 파라미터로 받아 좀 더 직관적이고 짧은 코드로 UI를 작성 할 수 있다고 한다. 그럼 직접 명령형 프로그래밍 처럼 값을 set 해주는것도 아닌데 도대체 어떻게 view를 바꿀까?..

잡담 2022.09.21

StateFlow 원시성 보장하기

StateFlow를 MVVM 패턴에서 UI 상태를 관리하고 반영하는데 사용하곤 했다. flow를 반복적을 관찰하며 최신 UI 상태를 얻어서 view에 보여줄 수 있는데 class MainViewModel: ViewModel(){ _viewState.value = _viewState.value.copy(checked = true) } 위 코드처럼 copy 함수를 사용해서 다른 값을 유지하면서 하나 이상의 속성을 변경하는것도 가능하다. 갑자기 copy 이야기를 뜬금없이 왜 했냐? 이런식으로 값의 수정이 일어나면 copy가 완료된 시점과 stateflow에 새로운 값이 내보내지는 시간 그 사이에 우연히 다른 코루틴이 다른 속성의 값을 업데이트 했다면? 의도치 않은 data class 값이 만들어질수도 있을 것..

Android/Coroutine 2022.09.19

Jetpack navigation startDestination 동적으로 설정

팀 프로젝트를 하다가 기존에 로그인이 됐던 유저인지 처음 로그인 하는 유저인지 체크해서 로그인 화면으로 이동시킬지 자동으로 메인화면으로 이동하게 할지 체크하고 이동시켜주는 기능이 필요했다. 해당 프로젝트에서는 Jetpack navigation 을 사용하고 있었는데 위 동작을 정상적으로 보여주려면 startDestination 을 상황에 맞게 새로 설정해주는게 필요했다. 일단 해당 기능이 필요한 액티비티에서 lateinit var navController : NavController 네비게이션 동작을 컨트롤 해줄 NavController 을 선언해주자. 그리고 onCreate 에 val navHostFragment = supportFragmentManager.findFragmentById(R.id.join..

Android 2022.08.27