본문 바로가기

분류 전체보기

(63)
코루틴 디버깅 로그에서 코루틴 식별 디버깅 중에 코루틴을 식별할 필요가 있을 때가 있다. private fun threadName() = Thread.currentThread().name 위 코드를 사용해서 Thread를 식별할 수 있다. 코루틴에 특정 이름 설정 물론 코루틴에 특정 이름을 설정하는 방법도 있다. withContext(pool + CoroutineName("inner") { } 위처럼 CoroutineName을 통해 가능하다. CoroutineNeme은 컨텍스트 요소 이므로 + 연산자로 사용해 설정할 수 있다. 디버거 감시 추가 Debug Tool 창의 [Variables] 부분에 New Watch 버튼과 브레이크 포인트를 통해 스레드의 이름을 감시할 수 있다. Condition : Thread.cur..
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..