if (study)/Java & Kotlin

특정 코드를 여러 타입에 대해 재사용 하고 싶을 때, 정확히 어떤 타입이 들어오게 될 지 미리 알 수 없을 때 제네릭 타입을 사용한다. 코틀린에서 모든 타입을 받기 위해 사용하는 Any, *가 어떻게 다른건지 글로 정리해두려 한다. Any class Any는 코틀린에서 모든 타입이 상속받는 최상위 타입이다. 자바로 디컴파일 해보면 Object 타입으로 변환되며, 내부엔 equals(), hashCode(), toString()같은 메서드가 정의되어 있다. 제네릭 타입으로 Any를 사용하면 어떤 객체를 집어넣든 업캐스팅이 적용돼서 모든 타입이 들어갈 수 있게 된다. 예제를 보면 arrayList가 Int, String, Float 모든 타입을 원소로 받을 수 있다. fun main() { val array..

생각날 때마다 하나씩 업데이트할 예정. Java Array → List String[] array = new String[0]; List list = Arrays.asList(array); List → Array List arrayList = new ArrayList(); String[] array = arrayList.toArray(new String[0]); List → ArrayList, LinkedList List list = Arrays.asList(array); List arrayList = new ArrayList(list); List linkedList = new LinkedList(list); Print Array String.join()은 array, list 둘 다 인자로 받을 수 있..


자바의 concurrency API에서 제공하는 Atomic Type에 대해 정리해보려고 한다. Atomic Type을 사용하면 멀티 쓰레드 환경에서 최신 데이터임이 보장되는 변수를 선언할 수 있다. Atomic Access API를 소개하기 전 먼저 Atomicity(원자성)의 개념을 알아보자. Atomic은 한글로 번역하면 '원자'라는 의미를 가지고 있다. 원자는 '더 쪼갤 수 없는 가장 작은 단위'를 뜻한다. 화학에서나 봤던 원자의 개념이 프로그래밍에서도 적용되고 있다. Oracle 자바 레퍼런스에 나와있는 Atomic Access의 정의는 다음과 같다. In programming, an atomic action is one that effectively happens all at once. An ..

안드로이드 시스템은 UI가 오랫동안 정지 상태에서 벗어나지 못하면 앱을 강제로 종료시키는 ANR(Android not responding) 정책을 가지고 있다. 네트워크 통신, 로컬 DB 사용, 파싱 등 비용이 큰 작업이 지속적으로 이루어지더라도 사용자에게 앱이 부드럽게 동작하는 경험을 제공하려면 쓰레드와 동기/비동기에 대한 이해가 꼭 필요하다. 동일한 자원을 공유하는 여러 개의 쓰레드가 번갈아가며 동작할 경우, 어떤 Task가 먼저 실행될지 알 수 없기 때문에 개발자가 의도하지 않는 동작이 발생할 수 있다. 따라서 Thread, Runnable 객체를 마구잡이로 생성하며 멀티쓰레드 프로그래밍을 아무 생각없이(?) 하다보면 필연적으로 동시성 문제를 겪게 된다. 앞으로 멀티쓰레드 처리에 대해 공부한 내용을..

나중에 다시 정리해서 올릴거긴 하지만... 기본 개념을 공부하면서 간단하게 정리한 것부터 업로드한다! 함수 vs 서브루틴 함수는 call/return, 코루틴은 suspend/resume 둘 다 블록 내부에 정의된 로직을 실행하고 완료되어야 다음으로 넘어가는 구조. 함수는 한번 호출하면 다음 코드의 동작이 중지, 함수 내부 로직을 모두 수행할 때 까지 실행이 중지되지 않는다. 서브루틴은 로직 중간 지점에서도 시작이나 종료가 이루어질 수 있다. 실행을 일시중지하고 다른 코루틴으로 이동하거나, 일시중지된 지점에서 재시작 할 수도 있다. 코루틴 코루틴은 서브루틴의 확정된 개념, 일종의 경량 쓰레드(저비용 쓰레드) 코루틴은 쓰레드의 대안이 아니라, 기존의 쓰레드를 더 작게 쪼개쓰는 개념 코루틴은 크게 stack..