본문 바로가기

전체 글239

[안드로이드] - ConstraintLayout 을 왜쓸까? ConstraintLayout ? 2016년 Google IO 에 공개된 레이아웃 에디터에 상호연관 시키기 위해 도입된 Layout 이다. 'constraint' 라는 단어 의미대로 제약조건을 걸어 View 들을 배치하는 역할을 하는 Layout 이다. 정말 다양한 제약조건이 있다. 이 부분은 android developer 를 참고하여 자세히 알아보자. 왜 ConstraintLayout 을 사용하라고 할까? 뷰 Layout 작업을 할 때 컨스트레인트 레이아웃을 주로 사용하라는 다른 글을 많이 보았다. 퍼포먼스 측면에서 좋다는 글을 봐서 개발할 때 늘 그렇게 개발했다. 하지만 여기서 그 왜? 라는 의문을 갖고 글을 적어보려한다. 그 이전에 우리는 개발자로써 Layout 작업을 하기 이전에 Renderin.. 2023. 1. 26.
[안드로이드 면접] - 2 : 1. Http VS Https 더보기 둘 다 인터넷을 이용하는 프로토콜이다. Hypertext transfer protocol 의 약자로 웹 서버와 사용자의 인터넷 브라우저 사이에서 문서를 전송하기 위한 통신규약이다. 둘이 비슷하지만 한 가지 다른 점은 https 가 모든 통신 내용을 암호화 한다는 점이다. 끝에 's' 가 붙은 건, secure socket 을 의미한다. 안전한 통신망이라는 뜻이다. 패킷이 암호화 되어 있기 때문에 패킷 캡쳐 프로그램으로 캡쳐를 하여도 암호화된 내용만 보인다. 암호화는 TLS 라고 하여 Transport 계층에서 이루어지고, L4 의 전송계층에서 암화가 이루어진다. TLS란? Transport Layer Security 의 줄임말로 과거 SSL 에서 발전하며 이름이 변경.. 2023. 1. 25.
[안드로이드 면접] - 1 1. OOM Killer 란? 더보기 Out of Memory Killer 의 약자로 메모리가 부족할 경우, 특정 프로세스를 강제 종료시킨다. 즉, OOM 이 발생하지 않도록 적은 프로세스를 죽여 많은 메모리를 확보하는 heuristic 에 기반한다. 그리고 OOM 상황이 발생하지 않도록 노력하는 것이 중요하여 안드로이드에서는 별도의 LMK 를 사용하고 있다. 2. OOM 발생원인은? 더보기 커널은 가상 메모리를 이용한 메모리를 할당하므로 실제 가용한 물리적 메모리보다 큰 프로그램 메모리를 할당할 수 있다. 즉, 프로그램에서 당장 사용하지 않는 메모리는 나중에 할당하기 때문에 실제로 사용 가능한 메모리를 초과한 프로세스가 load 될 수 있게 된다. 이것이 overcommit 이라 부르는데, 메모리가 실.. 2023. 1. 24.
[안드로이드 면접준비] - 0 : 하루에 하나 One a day 하루에 하나, 오늘부터 하루에 한 번 면접 관련 내용을 블로그에 업로드할 예정이다. 하루종일 개발을 하다보면 엄청 많은 정보가 내 머릿속에 들어갔다 나가지만 정작 기억에 남는게 없다.. 이해만하고 적용을 하다보니 내 머릿속에 잠깐 지식이 앉았다가 나가는 기분이다. 그러다보니 내가 이해한 내용을 설명하고 정리하기가 어렵다. 그래서, One a day (하루에 하나) 를 실천해볼 생각이다. 안드로이드 면접 블로그 내용을 내가 알고 있던 지식, 이해한 부분과, 여타 다른 블로그 글을 읽고 참고해서 글을 작성할 예정이다. 하루에 3~5개씩 정리할 예정이다. 주제는 CS[운영체제, 네트워크, 알고리즘, 자료구조], Android[디자인패턴, 아키텍처, Jetpack, 기본]를 다룰 생각이다. 기.. 2023. 1. 21.
[안드로이드] - Flow (coroutine) - 0 안드로이드에서 비동기 처리를 위해서 코루틴을 사용한다. 우리는 개발 시, LiveData 대신하여 Flow 를 사용할 수 있다. 하지만, Flow 는 스스로 라이프사이클을 알지 못하기 때문에 CoroutineScope 를 잘 이해하고 사용하여 불필요한 메모리 사용을 방지해야 한다. LiveData VS Flow LiveData 는 UI 에 밀접하게 연관되어 있기 때문에 Data Layer 에서 비동기 방식으로 데이터를 처리하기에 자연스러운 방법이 없다. 또한 LiveData 는 안드로이드 플랫폼에 속해 있기 때문에 순수 Java / Kotlin 을 사용해야 하는 Domain Layer 에서 사용하기에 적합하지 않다. 반면 Flow 는 스스로 안드로이드 생명주기에 대해 알지 못하여, 라이프사이클에 따른 중.. 2023. 1. 18.
[안드로이드] - coroutine (코루틴) - 0 코루틴을 알기 위하여, 프로그램 실행을 훑기 보통, 프로그램이 실행되는 과정을 한 번 정리를 해보자. 프로그램이 실행이 되면, 실행된 코드가 메모리에 load 가 된다. load 된 인스턴스를 프로세스라고 일컫는다. 프로세스는 여러 개의 독립된 실행의 흐름을 갖게 된다. 이 실행 흐름 하나하나를 Thread 라고 한다. 프로세스는 자기가 사용하기 위해 메모리를 할당 받는다. 그걸 Heap 이라 한다. 프로세스 안에서 돌아가는 각 각의 Thread 가 존재하는데, 그 스레드 메모리를 Stack 이라 부른다. 또한, 스레드는 프로세스 안에 있는 Heap 안 자원을 각 Thread 끼리 공유할 수 있다. 여기서 코루틴은 Thread Stack 을 할당을 받지 않고, 프로세스에 할당된 Heap memory 를 .. 2023. 1. 18.