본문 바로가기

전체 글

(62)
StateFlow를 알아가는 과정 (Flow, LiveData) StateFlow를 알기전에 Cold? Hot? 이 뭘까? StateFlow를 위해 Android Developer 가이드의 문서를 읽어봤을때 핫 플로우, 콜드 플로우라는 설명이 있어서 이해할 수 없었다. 이 개념은 RxJava에서 나온 개념으로 보인다. - Cold: 호출되면 구독자가 처음부터 데이터를 발행할 수 있는 것 ㄴ ex) Flow, DB쿼리, 파일 읽기 - Hot: 구독자를 신경쓰지 않고 데이터를 계속 발행시키는 것으로 구독한 이후에 이벤트에 대해서만 알 수 있는 것 ㄴ SharedFlow, StateFlow, 마우스 이벤트, 키보드 이벤트 하나의 스트림을 여러번 Subscibe해야 하는 경우에는 Hot Observable을 사용하자 Flow에 대해서 알아보자 - Kotlin에서 Flow는 ..
Dagger2 - Android Dagger2는 의존성 주입(DI) 프레임워크입니다. Dagger2를 사용하면 보일러 플레이트 코드가 감소한다는 장점이 있습니다. Dagger 기본 개념 Inject @inject 어노테이션으로 주입을 요청하면 연결된 Component가 Module로 부터 객체를 생성하여 넘겨준다. Component 주된 역할을 하는 객체로 연결된 Module을 이용하여 의존성 객체를 생성하고 Inject로 요청받은 인스턴스에 생성한 객체를 주입한다. Subcomponent Compnent는 하위계층 Component로 그래프를 형성할 수 있다. Module component에 연결되어 의존성 객체를 생성합니다. Scope 생성된 객체의 Lifecycle 범위이다. @Provide vs @Binds 이 둘 모두 Modu..
안드로이드 include vs merge 태그 차이 include 똑같은 태그를 여러번 반복해야할 때 include 태그로 레이아웃 중복을 없앨 수 있다. 하지만 뷰그룹으로 묶어줘야하기 때문에 뷰 계층이 깊어진다는 단점이 있다. merge 뷰그룹으로 감싸주지 않고 그냥 단순히 merge 태그로 시작하면 된다. 그러면 include가 되는 순간 merge 태그는 사라지고 그 안의 내용물만 바로 붙게된다. include의 단점이 사라지는데 대신 merge는 뷰 그룹을 생성하지 않음으로써 include와 달리 id 사용이 제한적이다. include할 때 사용하는 id도 사라지게 된다.
지능형 지속 위협(APT, Advanced Persistent Threat) 지능형 지속 위협 (APT, Advanced Persistent Threat) 다른 해킹 방식과 달리 공격자가 특정한 대상을 목표로 다양한 해킹 기술을 이용해 은밀하고 지속적으로 공격하는 행위 기업이나 기관의 중요 시스템에 대한 보안은 단단해서 처음부터 침투가 어렵기 때문에 회사 개인 PC를 먼저 장악한 후, 합법적인 권한을 획득하여 내부로 들어가는 방법을 주로 사용한다. APT의 공격 단계 1. 먼저 목표를 정하고 목표에 대한 사전 조사를 실시한다. 2. 조사를 바탕으로 개인 PC에 악성코드를 감염시킨다. 3. 내부 인프라로 서서히 침투하여 몰래 드나들 수 있는 백 도어 및 툴을 설치한다. 4. 내부인프라 접속 권한을 상승시키기고 정보를 탈취하기 시작한다. 5. 후에 내부인프라를 장악하고 더 많은 유출..
보일러플레이트 코드란?(Boilerplate code) 보일러플레이트란? 최소한의 변경으로 여러곳에서 재사용되며, 반복적으로 비슷한 형태를 띄는 코드 흔히 말하는 찍어내는 코드를 말한다. (꼭 필요하고 간단한 기능이며 반복적인 기능) ex) java -> kotlin get/set이 코틀린에서 boilerplate 코드가 많이 줄어들었다. 보일러 플레이트 코드 제거하기 1. 어노테이션 프로세서 사용 2. Android Studio Plugin 사용 (Parcelable 구현, LiveTemplate, Loombok) 3. Kotlin 사용 (equals(), hashCode(), toString(), copy() 자동 생성) 4. 라이브러리 사용 (Dagger, Glide, Retrofit, Databindings) charlezz.medium.com/%EB..
가비지 컬렉션 원리 http://itmining.tistory.com/24 [JAVA] Garbage Collection의 기초 이 글은 PC 버전 TISTORY에 최적화 되어있습니다. 서론 이전에 안드로이드 메모리 관리 관련하여 Strong, Soft, Weak Reference에 대해 알아보면서 GC에 대해 살짝 언급한 적이 있습니다. Java의 가비지 컬 itmining.tistory.com 위 링크가 가비지 컬렉션에 대한 정리가 잘 되어 있는 것같아서 가져왔습니다. 프로그래밍 언어 C에서는 메모리의 할당, 반환을 수동으로 합니다. 그러나 자바에서는 GC에 의해서 자동으로 수행되는데 그 과정에 대해서 설명하겠습니다. 1단계 : Making 프로세스는 마킹을 호출해서 참조되는 객체와 참조되지 않는 객체로 스캔합니다. 모..
AlertDialog Dialog 전체화면을 다 채우지 않고 일부 화면만 가리는 윈도우, 사용자가 예/ 아니오 같은 선택을 하거나 추가적인 정보 입력을 기다린다. 사용자가 응답하기 전까지는 화면에서 사라지지 않고 대기하며 프로그래밍 코드도 잠시 대기상태가 된다. AlertDialog의 구성요소 - Title 다이얼로그의 제목 - Content 사용자에게 보여줄 내용으로 문자열, 리스트, 커스텀 레이아웃이 가능 - Button Posivite Button , Negative Button, Neutral Button(Later 결정을 연기) AlertDialog를 생성하기 위해서 먼저 AlertDialog.Builder 객체를 생성하고 이 객체의 메소드를 호출해서 속성을 지정하고 생성한다. AlertDialog.Builder b..
[리팩토링] 분류코드를 클래스로 치환 분류코드를 int 같은 기본타입이라면 두가지 이유로 문제가 생긴다. 첫 번째로 분류 코드 범위 밖의 값이 사용되는 것이고 두번째로는 다른 분류 코드와 착각할 수 가 있ㄷ는 것이다. 타입이 판별되지 않거나 타입 세이프가 아닌 문제가 생긴다. 그런 문제를 해결하기 위해서 분류 코드를 클래스로 치환하는 리팩토링이 필요하다. 방법 1. 새로운 클래스를 작성해 기존 인터페이스(API)에서 사용 2. 새로운 인터페이스로 전환 3. 기존 인터페이스 삭제 결과적으로 장점으로는 분류 코드의 타입 판별이 가능해지고 단점으로는 클래스 개수가 늘어나는 것이다. public class Item { public static final int TYPECODE_BOOK = 0; public static final int TYPECO..