전체 글 244

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

include layout 의 viewBinding id 참조하기

xml 에 다른 xml 파일을 include 하여 해당 xml에 포함되게 사용할수가 있는데 이때 그냥 해당 액티비티의 id로 view binding 을 하면 참조가 되지 않는다. 이때는 private lateinit var exampleBinding: InclueTopBinding exampleBinding = InclueTopBinding.inflate(layoutInflater) exampleBinding.tvLeft.setOnClickListener { findNavController().popBackStack() } include_top.xml 을 binding 했다. InclueTopBinding 은 해당 include xml 을 바인딩 한 것 tvLeft 는 include_top.xml 에 있..

Android/Android UI 2022.07.28

안드로이드 Paging 3

페이징이라는 개념은 예전부터 있었다. 페이징을 내 멋대로 설명 해보자면 대량의 데이터를 불러올때 한번에 다 불러오면 리소스 낭비가 심하다. 이를 처리하는 전략이 페이징이였는데 100개의 데이터가 있으면 이걸 다 불러오지말고 한 페이지당 10개씩 다음 페이지가 보고 싶다고 하면 다음 페이지의 10개의 데이터를 보여줘라. 라는 개념이다. 그리고 안드로이드에서도 비슷한 니즈가 있었는데 스크롤을 내려서 데이터를 볼때 한번에 다 보여줄 필요없이 스크롤이 어느정도 내려왔을때 다음 데이터를 불러오면 좋지 않을까? 하는 점이다. 그리고 그걸 관리하기 쉽게 구현을 도와주는 라이브러리가 Paging3 다. 이게 최선인가에 대해서는 확실히 말하기 어렵지만 일단 내가 구현한 방법대로 설명을 해보려고 한다. 해당 예시는 MVV..

Android 2022.07.24