본문 바로가기

전체 글

(63)
Big-O란? 코딩 테스트를 준비하면서 가장 먼저 기본을 다져야 할 부분은 바로 Big-O 계산이죠. Big-O는 알고리즘의 효율성을 나타내는 지표 혹은 언어입니다. Big-O 계산법 1. 상수항은 무시하라 big-O는 단순히 증가하는 비율을 나타내는 개념입니다. 특수한 입력에 의해 O(n)이 O(1)보다 더 빠를 수 있죠. N이 1/2이라면요. (아주 특수한 입력이기 때문에 무시) 그렇지만 앞서 이야기 드렸던 것처럼 증가하는 비율을 나타내는 개념이기 때문에 상수항은 그냥 무시한다고 보시면 됩니다. 따라서 O(2N)이 있다면 빅오 표기법으로는 O(N)으로 표기하시면 됩니다. 2. 지배적이지 않은 항은 무시하라 앞서 상수항은 무시해도 된다고 언급했던 것처럼 같은 원리입니다. O(N^2 + N) 의 경우는 O(N^2) 이..
Android Room 혹시 Android 개발할 때 Room을 못들어보신 분은 없죠? Jetpack이 제공하는 데이터베이스 아키텍처(database architecture)입니다. [Android Developer Document] developer.android.com/training/data-storage/room?hl=ko Room을 사용하여 로컬 데이터베이스에 데이터 저장 | Android 개발자 | Android Developers Room 라이브러리를 사용하여 더 쉽게 데이터를 유지하는 방법 알아보기 developer.android.com 가이드는 공식가이드를 한번씩 읽어보시는게 좋겠습니다. SQLite는 모두 아시죠? Android 내장 데이터베이스! 안드로이드 입문서에도 적혀있으니 모르는 분 없을 것이라고 생각..
텔넷이란? (Telnet) Telnet 원격 접속 서비스로서 특정 사용자가 네트워크를 통해 다른 컴퓨터에 연결하여 그 컴퓨터에서 제공하는 서비스를 받을 수 있도록 하는 인터넷 표준 프로토콜 보안 문제로 사용률이 감소하고 원격 제어를 위해 SSH로 대체되는 추세 텔넷과 SSH의 차이? 텔넷은 byte 스트림형식으로 정보를 주고 받음 ssh는 DES, RSA 등 고급 암호화를 통해 통신을 함 ssh는 암호화 뿐이 아닌 압축 기술도 사용하는데, 암호화 때문에 트래픽이 텔넷보다 크게 늘어나지 않는다고 합니다. 단지 약간의 부하가 더 생긴다고 합니다.
코루틴 콘텍스트 (Context) 디스패처는 코루틴이 실행될 스레드를 결정한다. 시작될 곳과 중단 후 재개될 곳을 모두 포함된다. Dispatcher.Default CommonPool로 프레임워크에 의해 자동으로 생성되는 스레드 풀이다. 스레드 풀의 최대 크기는 시스템의 코어 수에서 1을 뺀 값이다. Dispatcher.Unconfinded 첫 번째 중단 지점에 도달할 때까지 현재 스레드에 있는 코루틴을 실행한다. 코루틴은 일시 중지된 후에, 일시 중단 연산에서 사용된 기존 스레드에서 다시 시작된다. 단일 스레드 컨텍스트 항상 코루틴이 특정 스레드 안에서 실행된다는 것을 보장해주는 것으로 newSingleThreadContext()를 사용한 것을 의미한다. 스레드 풀 newFixedThreadPoolContext()를 의미한 것으로 스레..
Java의 Future이란 Fruture - Blocking 방식의 작업 완료 통보 Future 객체는 작업이 완료될 때까지 기다렸다가 최종 결과를 얻는 데 사용된다. 이를 지연완료 (pending completion) 객체라고 한다. ExecutorService service = Executors.newSingleThreadExecutor(); Runnable task = new Runnable() { @Override public void run() { // blah } }; Future future = service.submit(task); try { future.get(); } catch (Exception e) { // handling } future.get() 작업이 정상적으로 완료되면 Future의 get()메소드는 ..
RecyclerView 의 Payload 오늘은 RecyclerView의 Payload에 대해서 글을 작성해볼게요. 기본적으로 다들 RecyclerView를 사용해보셨을거에요. 그러면서 보통은 notifyDataSetChanged() 로 전체 갱신 때려버리는 경우가 많은데 성능 상으로 좋은 방법은 아니죠. 특정 position만 갱신할 때에는 notifyItemChanged(position) OR notifyRangeChanged(positionStart, itemCount)를 사용해야합니다. onBindViewHolder에서 생성된 뷰홀더를 재사용하여 position에 맞게 바인딩 처리를 하고 있는건 모두 알고 계실거에요. 그런데 모든 View를 업데이트 하지 않고 특정 View만 애니메이션 처리 및 text만 변경하는 작업을 하고 싶을때 조..
코루틴 상태는 한 방향으로 이동 코루틴의 상태는 한 방향으로만 이동한다. 이전 상태로 되돌아 가지 않는다는 의미이다. fun main(args: Array) = runBlocking { val time = measureTimeMills { val job = GlobalScope.launch { delay(2000) } job.join() job.start() job.join() } println("Took $time ms") } 총 실행에는 약 2초가 걸렸으므로 잡이 한 번만 실행됬음을 보여준다. 잡이 완료 상태에 도달하였기 때문에 start()를 호출해도 아무런 변화가 없다.
코루틴 1탄 코루틴에 대해서 혼자서는 많이 공부하긴 했는데 한번도 블로그에 올린적은 없네요. 나중에 한번 정리해서 올리도록 하겠습니다. 오늘은 코루틴을 제가 오늘 본 내용에 대해서 포스팅 할게요. 일단 코루틴 디스패처에는 이름을 붙일 수 있습니다! val dispatcher = newSingleThreadContext(name = "ServiceCall") val task = GlobalScope.launch(dispatcher) { printCurrentThead() } task.join() fun printCurrentThread() { println("Running in thread [${Thread.currentThread().name}]") } 이렇게 하게 되면 결국 프린트는 "Running in threa..