목록전체 글 (41)
훌륭한 개발자가 되기 위하여

네트워크 권한 설정네트워크 작업을 실행하기 위해 매니패스트 파일에 다음 두개의 권한을 설정해야 한다.순간적인 상태 가져오기1. ConnectivityManager현재 네트워크 상태에 관한 정보 (시스템의 연결 상태)를 알려줌val connectivityManager = getSystemService(ConnectivityManager::class.java) 2. Network현재 활성화된 네트워크의 객체Network 객체를 키로 사용하여 네트워크 정보를 수집하거나 네트워크에서 소켓을 결합할 수 있음. 만약 네트워크 연결이 끊어지면 Network 객체의 사용이 중지되고 다시 연결되더라도 새 Network 객체는 새 네트워크를 나타냄val currentNetwork = connectivityManager.g..

Jetpack Compose의 3단계Composition(구성) : Composable 함수를 실행하여 UI 트리를 생성하고, 상태를 저장 및 관리한다.@Composable 함수가 실행되어 UI 트리를 생성상태를 관리하기 위해 여러 메모리 슬롯을 할당하며, remember와 같은 메커니즘을 통해 상태를 저장하고, 상태 변경 시 기존 값을 활용하여 해당 부분만 Recomposition함Layout(레이아웃) : 트리를 작동하고 UI의 각 부분을 측정하여 화면에 배치한다.생성된 UI 트리를 기반으로 각 요소를 측정하고 부모-자식 관계에 따라 화면에 배치이 단계에서 Component의 크기와 위치가 결정Drawing(그리기) : UI 트리가 작동하고 모든 요소를 랜더링한다.Recomposition은 매개변수나..

공유 상태를 사용하는 코루틴의 문제와 해결책가변 변수를 사용할 때의 문제점스레드 간에 데이터를 전달하거나 자원을 공유하는 경우에 가변 변수를 통해 공유하고 업데이트 하는 경우 여러 스레드에서 가변 변수에 동시에 접근해 값을 변경하며 데이터 손실이나 불일치로 버그가 발생할 수 있다. → 공유 상태를 사용할 때의 데이터 동기화 문제JVM의 메모리 공간이 하드웨어 메모리 구조와 연결되는 방식JVM은 스레드마다 스택 영역이라 불리는 메모리 공간을 갖고 있고, 이 스택 영역에는 원시 타입의 데이터나 힙 영역에 저장된 객체에 대한 참조가 저장된다.힙 영역은 JVM에 올라간 스레드들에서 공통으로 사용되는 메모리 공간으로 복잡한 데이터(객체, 배열 등)가 저장된다.컴퓨터는 CPU 레지스터, CPU 캐시 메모리, 메인 ..

루틴 : 특정한 일을 하기 위한 일련의 처리 과정 (함수 or 매서드)서브루틴 : 함수 내에서 함수가 호출될 경우 호출된 함수fun routine() { routineA() // routineA는 routine의 서브루틴 routineB() // routineB는 routine의 서브루틴}서브루틴은 한 번 실행되면 끝까지 실행된다.루틴에 의해 서브루틴이 호출되면 루틴을 실행하던 스레드는 서브루틴을 실행하는데 사용되어 서브루틴의 실행이 완료될 때까지 다른 작업을 할 수 없다. 코루틴 : 함께 실행되는 루틴으로 서로 간에 스레드 사용을 양보하며 함께 실행된다.fun main() = runBlocking { launch { while (true) { println("자..

일시 중단 함수일시 중단 함수와 코루틴일시 중단 함수란 suspend fun 키워드로 선언되는 함수로 함수 내에 일시 중단 지점 을 포함할 수 있는 함수이다.일시 중단 함수는 코루틴의 일시 중단 지점이 포함된 코드를 재사용할 수 있는 코드의 집합으로 만드는데 사용된다.일시 중단 지점이 포함될 수 있기 때문에 코루틴에서만 호출 가능하다.일시 중단 함수의 오해일시 중단 함수는 코루틴이 아니다. 👉 단순히 일시 중단 지점을 포함할 수 있는 함수일 뿐이다.일시 중단 함수를 별도의 코루틴에서 실행하려면 일시 중단 함수 호출부를 코루틴 빌더 함수로 감싸야 한다.fun main() = runBlocking { val startTime = System.currentTimeMillis() val job1 =..

예외 처리예외 전파코루틴 실행 도중 예외가 발생하면, 예외가 발생한 코루틴이 취소되고 예외가 부모 코루틴으로 전파예외를 전파 받은 코루틴도 예외를 적절히 처리하지 않는다면 취소되고, 그 상위의 코루틴으로 예외가 전파된다.코루틴이 예외를 전파 받아 취소되면, 취소가 해당 코루틴의 하위에 있는 자식 코루틴들에 전파된다.예외 전파 제한하기코루틴의 구조화를 깨서 예외 전파를 제한하기코루틴의 구조화를 깨면 예외 전파를 제한할 수 있다.단순히 Job 객체를 새로 만들어 구조화를 깨고 싶은 코루틴에 연결하면 구조화가 깨진다.👉 코루틴의 구조화가 깨지면, 예외 전파 뿐만 아니라 취소 전파도 제한된다.SupervisorJob을 사용한 예외 전파 제한SupervisorJob 객체는 자식 코루틴으로부터 예외를 전파 받지 ..