바삭바삭 IT/안드로이드(8)
-
gRPC란 무엇인가
gRPC에 대해 알아보기 전에 RPC(Remote Procedure Call)에 대해 알아봅시다. Local Procedure Call과 Remote Procedure Call의 차이는 무엇일까요? Local Procedure Call vs Remote Procedure Call Local Procedure Call은 코드를 수행하기 위한 프로세스 내의 함수 호출을 말합니다. Remote Procedure Call은 A서버에서 B서버의 코드를 수행하는 것을 가능케 하는 방법입니다. RPC 구현체 대표적인 예로 구글에서 만든 gRPC가 있습니다. 많은 서비스들이 데이터 센터들과 함께 수많은 마이크로 서비스를 연결하기 위해 RPC 메카니즘으로 gRPC를 사용하고 있다고 합니다. gRPC가 핫한 이유 개발자 ..
2023.11.26 -
단방향 데이터 흐름의 이해
Compose의 중요한 키워드인 State를 이해하려면 먼저 기존의 View System의 흐름을 알아야 합니다. 기존의 View System은 아래와 같은 흐름을 갖고있었죠. 사용자가 버튼을 클릭 -> click event가 발생 -> event handler가 상태를 업데이트 -> 상태와 관련된 ui가 새로 업데이트됨 좀더 구체적인 예제로 알아볼까요? 구조화되지 않은 상태 사용자가 이름을 입력하면 바로 화면에 "Hello 이름"이 출력되게 하려고 합니다. 구현하는 한가지 방법은 TextView에 이벤트 콜백을 바로 추가하는 것이죠. viewBinding을 사용한다면 아래코드처럼 될것입니다. class HelloCodelabActivity : AppCompatActivity() { private lat..
2021.11.21 -
[안드로이드] WebViewClient와 WebChromeClient
웹뷰를 구현하기 할때 WebView객체를 만들게 되는데요, 단순히 WebView객체만 생성하면 화면만 보여질 뿐 웹뷰 속 버튼이나 다른 기능들은 동작하지 못합니다. 웹뷰 속 버튼을 앱에서 제어하기 위해 필요한 구현체들이 바로 WebViewClient와 WebChromeClient입니다. WebViewClient와 WebChromeClient 먼저 WebViewClient와 WebChromeClient 이 둘의 차이를 알아봅시다. WebViewClient는 웹페이지를 로딩할때 생기는 콜백함수들로 구성되어 있습니다. 반면 WebChromeClient는 웹페이지에서 일어나는 액션들에 관한 콜백함수들로 구성되어 있습니다. 예를들면 웹에서 새 창을 띄우려하거나 파일을 첨부하는 경우가 있습니다. 아래는 각 클래스에..
2021.11.01 -
[안드로이드] 저장소 사용하기 - 2. Scoped Storage
안드로이드 버전10 이상부터는 Scoped Storage를 사용합니다. 이전 버전이였던 Legacy Storage와 어떤차이가 있는걸까요? 지난 포스트에서도 말했듯이 안드로이드의 저장소는 크게 내부저장소와 외부저장소로 나뉩니다. 두 버전에서 내부저장소는 동일하고 외부저장소의 구조가 살짝 바뀌었습니다. 외부저장소 구조의 변화 기존에는 공용공간안에 모든 파일이 저장되었다면, 변경된 후에는 개별공간이 샌드박스 형태로 보호되어있고 공용공간 또한 타입별로 분리되었습니다. 개별 앱 공간은 앱 삭제시 함께 제거되고, 공용공간은 앱이 삭제되어도 기기에 남아있습니다. 외부저장소 접근 방법 1. 개별 앱 접근방법 개별 앱 공간은 따로 권한요청이 필요 없고 Context.getExternalFilesDir()를 통해 자신의..
2021.02.24 -
[안드로이드] 저장소 사용하기 - 1. Legacy Storage
안드로이드에서는 저장소를 내부저장소와 외부저장소로 나눠서 관리하고 있습니다. 안드로이드 버전10(Q)을 기준으로 저장소의 모양이 바뀌었는데요. Q버전 이전의 저장소, Legacy Storage라는 형태가 Q버전 이후로는 Scoped Storage라는 형태로 변경되었습니다. 두개의 차이는 구조인데 그부분은 다음글에서 설명하고, 이번 글에서는 Q이전 형태인 Legacy Storage에 대해서 설명하려고 합니다. 내부저장소와 외부저장소? 내부저장소 | 내부저장소는 모든 스마트폰에서 제공됩니다. 앱을 설치하게 되면 해당 앱을 위한 저장공간이 할당됩니다. 이 공간은 샌드박스 형식으로 되어있어서 해당 앱만 접근하고 외부에서는 볼 수 없는 형태입니다. 앱이 삭제되면 이 공간 또한 같이 제거됩니다. 외부저장소 | 대부..
2021.02.23 -
[ACC] 데이터 바인딩 기초
ACC(안드로이드 아키텍처 컴포넌트)에서 가장 인기있는 패키지 중 하나인 '데이터 바인딩'을 소개합니다. 데이터바인딩을 이용하면 액티비티 코드를 간결하게 줄일 수 있습니다. 기존에는 아래와 같이 findViewById()를 여러번 호출해야 했습니다. Button button; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = findViewById(R.id.button); } 하지만 데이터바인딩을 이용하면 위 코드를 xml에서 대신 처리해주면서 액티비티에서 했던 ui작업이 아주 간단하게 바뀝니다. 사용방법부터 ..
2021.02.14 -
[Android Jetpack] LiveData 사용방법
observable을 모르신다면 이 글을 먼저 추천드려요! 2021/01/31 - [바삭바삭 IT/디자인패턴] - [디자인패턴] Observer? Observable? [디자인패턴] Observer? Observable? 안드로이드의 라이브데이터가 구현한 패턴, Observer에 대해 알아봅시다. 우선, 디자인패턴이란 소프트웨어에서 반복되는 문제상황에 대한 해결책입니다. 개발자가 앱이나 시스템을 디자인할때 kimdabang.tistory.com LiveData는 observable data holder class, 관찰가능한 데이터들을 담는 클래스라는 뜻 입니다. LiveData는 일반적인 observable과는 달리 생명주기를 인식합니다. 즉 앱의 컴포넌트들(액티비티, 프래그먼트, 서비스 등)의 생명주..
2021.01.24 -
Recycler View 제대로 이해하기 - RecyclerView lifecycle
안드로이드에서 리스트뷰는 많은 데이터들을 일렬로 나열해주는 우리가 자주 볼수있는 화면입니다. 그러나, 매번 스크롤할때마다 새 항목을 만들고 뷰를 생성하는게 비용이 커서 리소스 소비에 그다지 좋지 않다고 할 수 있습니다. 목록의 양이 많으면 그만큼 리소스를 많이 사용하게 되고, 앱의 성능을 저하시키게 되죠. RecyclerView가 나오기 전까지 오랫동안 고민되어 왔던 문제들이였습니다. Google은 2014년 롤리팝 출시와 함께 RecyclerView를 공개했습니다. RecyclerView의 아이디어는 간단했습니다. 사용자가 스크롤할때마다 뷰가 생성되는게 아니라 뷰는 처음 한번만 생성되고 필요할때마다 재사용하는 방법입니다. 뿐만 아니라 전에 ListView에 없던 LayoutManager, ItemDec..
2020.11.24