일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- QoS
- darkmode
- Java
- Dialog
- Collection
- 쌓기게임
- 동적프로그래밍
- DataStructure
- AfxMessageBox
- android
- 피요모리2
- 피보나치
- math
- WebView
- LRU
- memory
- 리틀포레스트
- Dokka
- 코인거스름돈
- devicedriver
- MFC
- FirebaseAuth
- stack
- 형변환
- DynamicProgramming
- 보늬밤
- 제곱근
- Kotlin
- synergy
- SPI
- Today
- Total
목록Computer (62)
퉁탕퉁탕 만들어보자
LRU알고리즘 - Least Recently Used 가장 오랫동안 참조되지 않은 아이템를 없애버리는 알고리즘이다. 보통은 Cache에서 많이 사용된다. cache는 사이즈나, 저장할 수 있는 개수가 정해져 있기 때문에 꽉차있는 상태에서 새로운 item을 put하려면 누군가를 삭제해야한다. 이때 누구를 삭제할지를 고르는 알고리즘이라고 볼 수 있다. LRU외에도 뭐 가장 들어온지 오래된 친구를 삭제한단다던지 (FIFO), 가장 적은 횟수 참조된 친구를 삭제한다던지 (LFU) 여러방식이 있지만 널리 쓰이는 것은 LRU이다. LRU의 경우에는 그러면 가장 오랫동안 참조되지 않았는지를 트래킹하기위해서 참조를 할 때마다 그 참조를 map의 맨 앞으로 넣어준다. 그래서 LinkedHashMap이 쓰이게 되는데, L..

이전 포스팅 : View lifecycle https://hosyonty.tistory.com/entry/Android-View Android View LifeCycle View의 수명은 3가지로 구성된다. * Attachment / Detachment * Traversals * State save/restore Attachment 이미 window에 속한 ViewGroup에 view가 add될 때, onAttachedToWindow() 콜백을 받게된다. 이때 view.. hosyonty.tistory.com 뷰트리를 트레버스 하면서 메저링하고, 레이아웃에서 알맞은 포지션에 두고, 드로우까지 거친 뒤에는 어떻게 그려지는지 계속 알아보자 우리가 잘 아는 모든일들은 UI Thread에서 일어난다. 이 모든게..

View의 수명은 3가지로 구성된다. * Attachment / Detachment * Traversals * State save/restore Attachment 이미 window에 속한 ViewGroup에 view가 add될 때, onAttachedToWindow() 콜백을 받게된다. 이때 view가 active되었다 라는 것을 알 수 있다. 그래서 여기서 이제 resource할당이나 listener들을 등록한다. Detachment Window에 붙어있는 parent로부터 detach될때 onDetachedFromWindow() 콜백을 받게된다. 이를 테면 recyclerview에서 view가 recycle될때나, parent에서 해당 뷰를 없앴을 때, activity가 finish()될때 모든 v..
InputStream을 봤으니 OutputStream도 보자,, public static void writeToFile(Context context, String fileName, List data) { try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( context.openFileOutput(fileName, Context.MODE_PRIVATE))) { for (String str : data) { writer.write(str); writer.write("\n"); } } catch (IOException e) { Log.e(TAG, "IOException occurred during file write: " + e.to..
네트워크나, 파일 입출력을 하게될때 InputStream이나 OutputStream을 사용하게된다. 네크워크에서 String을 읽어오는 예제를 보자 HttpURLConnection connection = openConnection(src); if (!isValidResponse(connection)) { Log.e(TAG, "Connection error : " + connection.getResponseCode()); connection.disconnect(); return null; } try (InputStream inputStream = connection.getInputStream()) { List mImageSrcList = new LinkedList(); try (BufferedReader ..
어떤 아이템이 언제 바인딩/어태치/디태치/리사이클 되는가? @NonNull @Override public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { EwImageItemBinding binding = EwImageItemBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); View view = binding.getRoot(); ImageViewHolder holder = new ImageViewHolder(view, binding); Log.e(TAG, "onCreateViewHolder: " + holder.getAdapterPo..

1.ViewModel? ViewModel을 사용하는 가장 큰 이유는 아무래도 UI삭제 또는 구성 변경 시 데이터 유지를 위함이다. onSaveInstanceState()에서 간단한 bundle을 통한 UI복구는 가능하지만, 큰 데이터의 경우에는 부적합하기 때문에 ViewModel을 쓰는것이 용이하다. 또 다른 이유로는 Activity나 Framework 내부에서 모든 비지니스 로직을 처리하게되면 안그래도 LifeCycle관련되서 굉장히 많은 로직을 처리하게 되는데 너무 클래스가 커지고, TC작성에도 어려움이 있다. (android framework에 디펜던시가 많아서 mock을 전부 하기에 손이 많이감) 따라서 이때 데이터를 load하는 부분과 비지니스 로직부분을 ViewModel로 위임하면 SRP에도 ..

* Process / Thread Process는 각각의 독립된 메모리 영역(code, data, heap, stack)을 갖고있음 Process하나당 최소 1개의 메인스레드를 갖고있음 Thread는 하나의 프로세스 내에서 실행되는 흐름의 단위로, Process 안에서 코드, 데이터, heap을 공유하고 stack만 별도로 가진다. 따라서 같은 프로세스 안에서 백그라운드 작업을 thread로 수행시키고 대신 동시에 같은 값을 변경하거나 하지 않도록 신경써서 코드를 작성한다. Android 시스템은 일반적으로 단일 thread로 애플리케이션의 Linux 프로세스를 시작하게된다. 기본적으로 같은 애플리케이션의 모든 구성 요소는 같은 프로세스와 같은 스레드에서 실행된다. (main thread) 하지만 애플리..
Kotlin의 Generic은 기본적으로 Java와 동일한 방식으로 사용가능합니다. class Box(t: T) { var value = t } val box: Box = Box(1) val box = Box(1) 명시적으로 타입을 써줄수도 있지만, 추론이 가능한경우에는 그냥 값을 넣어줄 수도 있습니다. Java의 WildCard type Java type 시스템에는 와일드카드 type이 있습니다. 를 의미합니다. Function은 Function를 의미합니다. Star-projections는 Java의 원시 유형과 매우 유사하지만 안전합니다. Generic functions 클래스는 형식 매개변수를 가질 수 있는 유일한 선언이 아닙니다. function도 가능합니다. 유형 매개변수는 함수 이름 앞에 배..

Content Provider는 내 앱이 아닌 타 앱(외부 프로세스)에서도 데이터를 가져갈 수있는 방법을 제공하는 인터페이스이다. Content resolver는 이 Content provider를 가져다가 사용할 수 있는 도구 인터페이스 이다. Activity나 Fragment에서 Content Provider를 사용해서 다른 앱의 data를 access하려면, Context에 있는 getContentResolver()를 통해서 ContentResolver를 가져와서 사용한다. 1. Query를 통해서 데이터 가져오기 // 가져올 컬럼들 정의 String[] projection = { ID, NAME, NUMBER }; // 쿼리로 cursor가져오기 val cursor = context?.conten..