MVC와 MVP에서 View와 Model 간의 의존성은 없었지만 Controller 혹은 Presenter와 View 사이의 의존성은 여전히 존재했다. MVVM에서는 ViewModel이라는 새로운 개념을 도입하였고, ViewModel은 View를 참조하지 않기 때문에 의존성이 없다. 이는 ViewModel이 독립적인 존재라는 뜻이기 때문에 ViewModel과 View는 1:n의 관계를 가질 수 있다. MVVM (Model, View, ViewModel) Model MVC, MVP에서의 Model과 같은 개념이다. View 사용자가 보는 UI 부분이다. MVP처럼 레이아웃 파일(.xml)은 물론이고 Activity와 Fragment도 View로 분류한다. 보통 Command 패턴이나 DataBinding을..
1. MVC (Model, View, Controller) Model 앱에서 사용하는 데이터, 상태, 비즈니스 로직을 포함한다. 데이터 : 사용자의 이름이나 상품의 가격 등과 같은 말 그대로의 데이터를 의미. 상태 : UI 상태. isEnabled와 같은 플래그로 UI의 상태를 나타낼 수도 있고, 데이터의 값이 변경되어 UI가 갱신되어야 한다면 그 또한 상태 변경으로 볼 수 있다. 비즈니스 로직 : 앱에 필요한 동작을 수행하기 위해서 데이터를 처리하기 위한 알고리즘. View 사용자가 보는 화면, 즉 UI요소를 담당한다.. 사용자의 입력에 대해 어떤 동작을 해야하는지는 모른다. 예를 들어 UI에 있는 버튼을 눌렀을 때 처리해야하는 코드를 포함하지 않는다. 안드로이드에서 레이아웃 파일인 activity_m..
Android의 코루틴은 비 동기적으로 실행되는 코드를 비교적 효율적으로 구현할 수 있게 해주는 동시 실행 설계 패턴이다. 1. 코루틴에서의 주요 기능은 다음과 같다. Thread 대비 굉장히 가볍다. 기존의 비동기 작업은 Context Switching을 하면 기존 Thread는 차단시키는 것에 반해 코루틴은 실행 중인 Thread를 차단하지 않고 일시 정지할 수 있다. 따라서 Single-Thread에서 많은 코루틴을 실행할 수 있다. 이때, 기존의 Thread를 일시 정지하는 것은 동시에 많은 작업을 할 수 있게 하면서도 차단하는 것보다 메모리를 절약한다. 작업을 간편하게 취소할 수 있다. 코루틴에서는 ".cancle()"을 이용하여 Thread보다 쉽게 취소할 수 있다. 작업 용도에 따라 어떤 T..
1. Thread란 무엇이며, 왜 필요할까? Thread란 컴퓨터 내부에서 하나의 흐름을 의미한다. 작업이 진행되는 하나하나의 흐름을 모두 Thread라고 부른다. 여기서 이러한 흐름이 하나인 경우 Single-Thread, 여러 가지인 경우 Multi-Thread라고 부른다. Single-Thread는 하나의 흐름, 즉 하나의 동작밖에 하지 못하기 때문에 동시에 여러 작업을 하기 쉽지 않다. 우리가 사용하는 앱을 Single-Thread로 구현이야 할 수는 있지만 상당히 비 효율적일 것이다. 왜냐하면 하나의 작업만 가능하기에 다른 작업을 수행하기 위해서는 이전 작업이 완료되어야 가능하다. 예를 들어 카카오톡에서 X에게 동영상을 보내는 상황을 생각해 보자. 우리는 동영상이 다 전송되기 전까지는 다른 작업..
● 디자인 패턴(Design Pattern)의 개념 디자인 패턴은 소프트웨어 공학에서 특정 Context에 공통적으로 발생하는 문제에 대해 재사용이 가능하도록 만들어 놓은 해결책이다. 이것은 개발자들이 개발을 하다보면 생기는 '자주', '반복적으로', '공통적으로' 해결해야할 문제가 있을 때 이를 해결하기 위해 쓰인다. 즉, 코드를 효율적으로 작성하기 위한 방법론, 건강한 소프트웨어 개발을 위한 방법론이라고 할 수 있다. ● 디자인 패턴을 이해하고 사용해야하는 이유 코딩을 할 때에는 많은 사람들이 이해할 수 있도록 짜는 것이 좋다. 왜냐하면 어떤 프로젝트를 진행한다고 했을 때에 자신만이 이해할 수 있는 코드로 작성한다면 유지 및 보수에 어려움이 생길 수도 있기 때문이다. 따라서 코딩을 하는 데에 있어서 ..
1. View View는 앱에서 눈에 가시적으로 보여지는 것을 의미한다. 이러한 View 클래스를 베이스로 두고 각각의 기능을 가진 하위 클래스들이 존재한다. TextView Button ImageView 등등 2. View의 트리 구조 아래 그림에서 알 수 있듯이 모든 View들의 부모클래스는 'View'라는 것을 알 수 있다. View 클래스 밑에 Text, Image, Surface, ProgressBar 등을 포함하고 있는 'View'와 'ViewGroup'으로 나누어 지는데, View 계열의 클래스는 가시적으로 모양이 있는 클래스이고, 'ViewGroup' 계열의 클래스는 눈에는 보이지 않지만 View들을 잘 배치하거나 Grouping을 하는 역할을 한다. 즉, ViewGroup은 View와 V..
앞 게시글에서 Palette에서 자주 사용되는 View에 대해 알아보았다. 이번에는 Palette의 또 다른 카테고리인 Layout에 대해서 다루어 보겠다. 안드로이드 Layout 클래스는 View 위젯들을 화면에 배치하는 과정에서 위젯의 위치를 정렬하거나 연관된 위젯들을 그룹화하는 역할을 수행한다. 즉, Layout 클래스는 View 위젯들을 그룹화하여 배치하기 위한 용도로 사용되는 ViewGroup이다. 하지만 자체적인 UI 표시 기능이나 사용자 이벤트 처리 기능은 매우 제한적으로 사용된다. 1. LinearLayout LinearLayout의 Linear은 '선형'이라는 뜻이다. 따라서 LinearLayout은 화면은 가로방향이나 세로방향으로 나열할 때 사용하는 Layout이다. Horizontal..
Palette 메뉴에는 Common(자주 사용되는 컴포넌트들) / Text / Buttons / Widgets / Layout / Container / Google(구글에서 제공하는 광고판, 맵 뷰) 로 이루어진 하위 카테고리가 있다. 여기에서 각 카테고리별로 자주 사용되는 View에 대해 정리해보고자 한다. 1. Text TextView: 화면에 텍스트를 표시하는 기능을 제공한다. 2. Buttons Button: User가 탭하거나 클릭해서 작업을 수행할 수 있는 사용자 인터페이스 요소이다. MainActivity에서 setOnClickListener로 버튼을 누르면 어떤 작업을 수행할 것인지 설정할 수 있다. ImageButton: 사용자가 누르거나 클릭할 수 있는 이미지 버튼을 표시한다. Chip..
앱 구성 요소 Android 앱의 필수적인 구성요소로, 각각은 시스템이나 사용자가 앱에 들어올 수 있는 진입점(EntryPoint)의 역할을 한다. 이 구성요소는 크게 Activity, Service, Broadcast Reciever, Content Provider 총 4가지로 분류된다. 1. Activity Activity란 앱과 사용자가 상호작용을 하기 위한 진입점이다. 앱을 실행할 때에는 앱을 전체적으로 호출하는 것이 아니라 앱의 Activity를 호출한다. 모든 앱에 반드시 1개 이상 존재해야 한다. Activity는 사용자의 상호작용을 위한 UI가 있다. 앱이 실행되면 화면이 표시되고, 사용자의 입력값을 받으며, 사용자에게 제공하고자 하는 내용을 화면에 표시한다. 사용자의 입력값을 받는다는 것..
안드로이드 프로젝트에는 반드시 포함되어야 하는 파일이 있다. 그것은 바로 AndroidManifest.xml파일 이다. Manifest 파일은 프로젝트의 Source Set의 루트에 위치해야 한다. (별도의 루트를 성절하지 않았다면 src/main에 위치해야 한다.) Manifest 파일은 앱에 대한 필수적인 정보를 Android Build Tool과 Android OS, 그리고 Google Play에 제공한다. Manifest의 주요 속성을 알아보자. , , , , , , , , , 순으로 정리되어 있다. 1. AndroidManifest.xml 파일의 루트 요소로 단 하나의 요소를 포함해야 한다. Namespace를 지정해주는 xmlns:android 속성, package 속성을 지정한다. 2. 1번..