view와 상호 작용하는 코드를 더욱 쉽게 작성할 수 있도록 도와주는 기능.xml파일에서 각 뷰는 id값을 가진다.일단, layout Component를 코드 단으로 고치는 과정이 매우 골칫거리 (findViewById가 대표적 예시)그래서 layout Componen
DI (Dependency Injection)는 의존성 주입을 의미합니다.의존성이란 클래스간 객체로 참조가 되는 경우를 말합니다.MVVM 모델에서 모듈 간 독립성과 TDD가 용이한 구조로 만들기 위해서 DI를 사용하기도 합니다.(물론 di가 훨씬 먼저 나온 개념입니다.
의존성 주입 요청. inject로 주입 요청시, 연결된 component가 Module로부터 객체를 생성하여 넘겨줌.inject 어노테이션을 di 진행할 변수와 생성자에 달아줌으로 di 확인 가능.연결된 module을 이용하여 의존성 객체 생성.inject로 요청받은
Android에서 UI 작업은 별도의 스레드가 아닌 메인 스레드에서 작업해야 한다.로직상, 다른 스레드에서 UI 처리를 해야 한다면 해당 스레드와 메인 스레드를 연결해주는 Handler를 사용해야한다.오늘은 그 handler에 대해 자세히 정리하고자 한다.UI작업을 비
MVVM 패턴을 쓰게 되면서 뷰모델과 Livedata를 결합하여 많이 사용하게 된다.모든 기술이 그렇듯 장단점이 존재하고 최적의 조합으로 구성하여 알맞은 환경에서 사용하여야 효율을 극대화 할 수 있다.그래서 오늘은 뷰모델과 라이브 데이터를 쓰는 좋은 패턴과 좋지 않은
LiveData is an observable data holder class. Unlike a regular observable, LiveData is lifecycle-aware, meaning it respects the lifecycle of other app
RecyclerView, ListView에 대한 개념을 알아보는 게 아닌 둘의 차이를 통해 어떤 걸 쓰는게 효율적인지 알아보고자 한다.(물론 맨날 리사이클러만 쓰지만)뷰홀더 패턴은 우리가 리스트를 스무스하게 스크롤할 수 있게 해준다.목록 행 뷰 참조를 저장함으로 fin
❌ CS에서의 프로세스와 스레드를 이야기하고자 하는게 아니다.Android에서의 프로세스와 스레드를 이야기 하고자 한다.일단, Android 시스템이 시작되면, 새로운 리눅스 프로세스가 단일 스레드로 시작된다. 기본적으로, 같은 어플리케이션의 모든 구성요소는 같은 프로
Velog를 하는 목적처럼 기존에 알더라도 제대로 잡고 가잔 의미에서 또 정리를 하게 된다. 아무 생각없이 쓰던 기술들에 대해 확실한 정리가 뒷받침되어야 해당 기술을 더 잘 활용하지 않을까...🧐 Activity나 Application 설정값이나 UI정보 같은 간단한
Enum 열거형 이란 의미로 서로 연관된 상수들의 집합이다. 다른 상수들에 비해 코드가 간결해지고 직관성이 좋아진다. > #### 하지만, 메모리 성능 상 문제로 쓰지말란 이유가 있던데..? Why? 🤷 ENUM의 각 값은 객체이며 각 선언은 객체를 참조하기 위해
애플리케이션이 응답하지 않는다.Main Thread(UI Thread)가 일정 시간 어떤 Task에 잡혀있게 된다면 발생하고 어플이 꺼지게 된다.왜 발생할까?Application이 UI 스레드에 어떠한 I/O 명령(빈번한 네트워크 엑세스)으로 인해 막힐 때어플리케이션이
JSON 데이터를 JAVA 객체로 변환 시켜주는 라이브러리.JAVA 객체를 JSON 데이터로 변환 시켜주는 라이브러리.JSON 데이터 ↔️ JAVA 객체Java 객체를 JSON으로 혹은 그 반대로 변환하기 쉬운 방법을 제공한다.기본에 수정 불가능한 객체를 JSON으로
데이터바인딩을 공부한다면, Jetpack과 AAC를 들어본 적 있을 것이다.Jetpack은 2018년 구글 IO행사에서 발표된 안드로이드 앱 개발 패키지 묶음 입니다.Databinding은 JetPack의 구성 요소 중 아키텍처와 관련된 AAC부분에 속한다. 이름 그대
Socket !? > 두 프로그램이 네트워크를 통해 서로 통신을 수행 할 수 있도록 양쪽에 생성되는 링크의 단자. 데이터를 캡슐화하여 전달 가능하다. UNIX에서의 입출력 메소드의 표준인 개발/읽기/쓰기/닫기 메커니즘이다. TCP/IP Socket TCP는 두 프
Server/Client 통신 카테고리가 왜 안드로이드에서만 다루지 싶을 수 있지만 안드로이드에서의 Server/Client 통신을 이야기 하려 한다.클라이언트와 서버가 1:1 방식으로 연결클라이언트가 요청을 하고 서버가 응답을 하는 것이 기본적인 네트워킹 방식서버의
어플리케이션 환경에 관한 전체 정보를 받을 수 있는 추상 클래스.액티비티, 브로드캐스트, 서비스를 시작할 떄도 사용되고 리소스에 접근할 때에도 context가 사용된다.어플리케이션과 관련된 정보에 접근하고자 하거나 어플리케이션과 연관된 시스템 레벨의 함수를 호출하고자
Parcel은 Intent에 담아서 전달할 때 Serailizable보다 더 가볍다. Serializable은 Java에서, Parcelable은 Android에서 추가된 개념. Serializable로 만드는 건 Serializable을 implements만 해주는
Android에서의 스레드는 크게 2가지로 나뉜다.UI를 업데이트 할 수 있기에 UI 스레드라고 이름 붙여진 메인 스레드.UI 업데이트 이외에 네트워크 작업 등 무거운 작업을 하게 되는 워크 스레드.메인 스레드는 하나의 어플에서 단 하나만 존재하고 워크 스레드는 n개
Activity::onBackPressed() 콜백 함수가 호출된다.Androidx에선 androidx.activity.OnBackPressedCallback 추상 클래스를 제공한다. OnBackPressedCallback::handleOnBackPressed() 메서
액티비티 내에 배치되서 어플리케이션 사용자 인터페이스를 구성하는 안드로이드 구성요소이다.액티비티를 분할하여 화면의 한 부분을 정의한다.액티비티와 같이 레이아웃, 동작 처리, 생명 주기를 갖는 독립 모듈이다.다른 액티비티에서도 사용할 수 있어 재사용이 뛰어나다.액티비티
기본에 충실하자.사용자 인터페이스 화면을 가지며 특정 작업을 담당하는 컴포넌트하나 이상의 view를 가질 수 있다. 다른 어플리케이션의 액티비티에 접근하는 것도 가능하다.Manifest에 등록되어야 한다.최소 하나 이상의 Activity를 가져야 한다.백그라운드에서 실
각 뷰를 보관하는 holder 객체를 의미하며 이는 recyclerview 그리고 listview에서 사용된다.ViewHolder 객체는 레이아웃의 태그 필드 안에 각 구성 요소 뷰를 저장하므로 반복적으로 조회하지 않고도 즉시 엑세스가 가능하다.10개의 데이터를 리스트
차이를 알고 쓰자.이 글은 Parcelable vs Serializable , 정말 Serializable은 느릴까? 해당 글을 읽고 작성 되었으며 일부를 참고하고 있습니다.평소 Object를 Intent를 통해 넘길 때 너무 자연스럽게도 parcelable 키워드를
우선,안드로이드에서는 상위 호환성을 중요시하여 compileSdkVersion, minSdkVersion, targetSdkVersion 이라는 개념이 있다.예전 버전이 최신 단말기에서 실행이 잘 된다면 '상위 호환' ex) 최신 단말기에서 핀치 투 줌(터치로 확대/축
Android에서의 layout, button과 같은 UI 관련 클래스들은 모두 View를 상속받아 생성된다.ViewGroup은 button, imageView 같은 것과 다르게 자식 뷰를 가질 수 있고 이를 배치하는 역할을 한다. ✅ 자신만의 button이나 view
복잡한 레이아웃을 단순한 계층 구조로 표현하여 이용할 수 있게하는 ViewGroup복잡한 계층 구조로 레이 아웃을 구성하는 방식에서 자유로워질 수 있다.형제 View들과 관계를 정의해서 레이아웃을 구성한다는 점이 RelativeLayout과 비슷하지만, 보다 유연하고
하나의 Activity에서 Fragment만을 교체해가면서 어플을 구성하게 된다면 한번쯤은 Navigation Component를 들어봤을 것이다.Jetpack에 포함되어 있는 컴포넌트로써 이름처럼 어플 내에서의 흐름을 그래프로써 지정하여 마치 네비게이션처럼 동작한다.
내가 참여한 대부분의 프로젝트에서 상당 수가 Single Activity - Multi Fragment 구조를 가지고 있다. 그렇다면 나는 왜 Activiy보다 Fragment를 많이 사용할까? 🧐 찰스님의 글에서 내가 사용하던 이유와 추가적인 견해를 얻게 되었다
자바와 안드로이드에서 사용 가능우선 개념부터 알고가자.GC에서는 reference의 강약에 따라 도달 가능한 객체를 제외하고 모두 쓰레기로 간주한다.GC의 관점에서는 객체를 참조가 가능한 객체와 참조할 수 없는 객체 2가지로 본다.다시 사용 가능한지? 다시 사용 불가한
Android는 해상도를 지원한다. 그 종류는 많고 안드로이드 개발자라면 반드시 알아야 한다. 왜 알아야 해? 디자이너와 협업을 해야하니까. 여러 화면에 대응해야 하니까 🧐 다양한 디바이스 크기에 대응? 그게 뭔데? dp는 픽셀 독립 단위이다. (Device In
면접에서 참 많이 받게 되는 질문이다. 면접을 떠나서 안드로이드 개발자는 안드로이드 어플 개발을 하면서 RecyclerView를 정말 많이 만들어보고 다양한 adpater를 사용해본다. 수 많은 리스트의 데이터의 내용 중 변화가 생기게 된다면 우린 를 통해 변화를
Android 11 버전 여러 업데이트 사항 중 개인정보 보호기능에서 크게 달라졌다는 글을 보았다.곧 Android 12가 출시 되겠지만 그래도... 여러 프로젝트를 해보면서 지도에서 사용자 위치 접근에 대한 퍼미션을 많이 다뤘었다. 근데 정작 허용 여부를 물어보고 허
해당 글은 A Garbage Collection Story를 번역한 글이며 아주 조금의 첨언이 되어있는 글입니다. 출처는 ProAndroidDev몇몇 안드로이드 관련 아티클을 찾아보는 곳 중 공식 미디엄 말곤 proandroiddev를 많이 보게 된다. 생각해보지 못한
최근 여러 서비스에서 WebRTC를 사용하여 많은 서비스를 제공한다는 글을 보았다. 화상회의, 소셜 소개팅 등 여러 부분에서 쉽게 쓰일 수 있기에 최근 인기를 끌고 있다. WebRTC라는 단어를 하도 많이 보게되서 내가 정리를 해두려 한다.Web Real-Time Co
코드를 난독화 및 최적화 시켜주는 오픈 소스 툴무료 자바 클래스 파일 축소기, 최적화기, 난독화기, 프리버레이터.사용되지 않는 클래스, 필드, 방법, 속성을 검출해 제거한다.bytecode를 최적화하고 사용하지 않는 지시사항을 제거한다.짧은 의미 없는 이름을 사용하여
Android는 JVM 기반의 ART 위에서 동작한다.ART 위에서 동작하기 위해 안드로이드 코드는 dex 파일로 컴파일 된다.이때, 메서드 수가 64k(65535)개를 초과할 수 없어서 나오게 된 개념이 Multidex이다.Multidex는 메서드가 64k(65536
우선 두 용어는 모두 SW 프로그램 개발의 서로 다른 두 계층의 차이를 설명하기 위한 용어이다.프로그램을 생성하기 위해 개발자는 첫째로 소스코드를 작성하고 컴파일이라는 과정을 통해 기계어 코드로 변환되어 실행 가능한 프로그램이 된다.컴파일 과정을 마친 프로그램은 사용자
위 글의 대부분의 내용은 안드로이드 View가 렌더링 되는 과정 해당 글을 참고하여 적었습니다. 안드로이드의 화면은 아래와 같은 단위로 구성된다. 화면을 구성하는 최소단위는 View이며 최대 단위는 Window이다.Window > Surface > Canvas > Vi
ConstraintLayout > 레이아웃에 배치되는 뷰들에 여러 제약을 적용하여 각 뷰의 위치와 크기를 결정하는 레이아웃 RelativeLayout의 상대적 위치 관계에 따른 배치 + LinearLayout의 가중치가 가진 장점 + chain 사용을 다른 레이아웃