CS 공부를 하다 보면 동시성과 병렬성에 대한 얘기를 심심치 않게 볼 수 있다. 하지만 "동시"와 "병렬"이 비슷한 결을 가지고 있어서인지 두 개념을 혼동하는 경우를 종종 볼 수 있다. 그래서 오늘 포스팅은 비슷하지만 다른 두 개념을 제대로 이해하고자 동시성, 병렬성 각각에 대한 이해와 둘의 차이, 관계에 대해 적어보고자 한다. ✔️ 동시성(1) 정의물리학의 상대성이론에서는 "동시성"의 정의에 대해,물리학에서의 동시성 > 어떤 특정 좌표계에서 어던 두 개의 사건이 같은 시간에 일어나면 그 두 사건이 동시에 일어났다이렇게 정의하고 있다. 하지만 프로그래밍에서의 동시성은 조금 다른 의미로 사용되며, 싱글/멀티코어 모두에서 구현할 수 있는 개념이다.프로그래밍에서의 동시성 > 여러 작업들이 동시에 실행되는 것처..
멀티모듈에다 여러 써드파티 라이브러리들까지 뭉탱이로 넣은 프로젝트 설정은 너무 힘들다.. 오늘만 열개 정도는 해결한 것 같은데, 난 보통 이런 오류를 마주할 때마다 무지성 수정을 하는 경우가 많다. 특히 하루에 열댓개씩 터져나오는 경우에는 스트레스 때문에 더더욱.. 정확히 요점을 짚어내기 보다는 조금 읽고 이 부분이 문젠가? 수정 -> 아니네 여긴가? 수정 -> 반복.. 이런식이다. 하지만 아무리 갑갑해도 에러 메시지를 꼼꼼히 읽고 가려운 부분을 정확하게 긁어줘야 금방 해결할 수 있다. 아래 에러 메시지는 그 중에서 제일 해결이 오래 걸린 오류이다. A problem occurred configuring root project 'MyApp'. > Could not resolve all files for ..
* Exception is: org.gradle.api.CircularReferenceException: Circular dependency between the following tasks: :app:processDebugResources \--- :presentation:processDebugResources \--- :app:processDebugResources (*) 클린 아키텍처를 적용한 멀티모듈 프로젝트에서 발생한 에러 메시지이다. 계층 간 분리를 위해 모듈을 나눈 뒤 고수준에서 저수준으로 의존성을 추가해주었고, 안드로이드 진입점과 의존성 주입을 위해 app 모듈이 data/domain/presentation 계층을 모두 참조하도록 설정했다. 하지만 프로젝트 설정 과정에서 presentati..
0. ktxAndroid Jetpack과 기타 Android 라이브러리에 포함된 Kotlin 확장 프로그램 세트이다. Jetpack, Android , 기타 API 등과 Kotlin을 사용하기 위해 사용한다. 1. by viewModels() 코틀린의 by는 위임(deligate) 패턴을 구현하는데에 사용되는 키워드이다. 그로 인해 ViewModelProvider를 사용하지 않아도 by viewModels 함수를 사용하여 viewModel을 지연 생성할 수 있다. 2. 종속성 추가 viewmodel 관련 ktx 종속성을 추가했는데도 by viewModels 함수가 제공되지 않아 당황한 사람들이 있을 것이다. viewmodel의 초기화를 위한 함수들은 Activity/Fragment에 포함되어 있어 그런 ..
컴퓨터와 관련된 직종에 종사하는 사람들은 usb를 사용할 일이 많을 것이다. 아마 대다수의 사람들이 usb 허브와 usb를 매일 사용하면서도 2.0과 3.0의 차이에 대해선 자세히 모를 것 같다. 나 또한 그랬으나, 버전이 다른것에는 이유가 있을 것이라 생각하여 찾아서 공부한 뒤 포스팅으로 남긴다. 1. 전송 속도 Usb 2.0: 최대 480Mbps Usb 3.0: 최대 5Gbps Usb 3.0을 사용할 수 있다면 2.0은 쳐다보지 않는 것이 좋을 것 같다. 2. 전력량 Usb 2.0: 최대 500mA Usb 3.0: 최대 900mA Usb 3.0이 2.0에 비해 거의 2배 가량 많은 전력을 제공하기 때문에 Usb 허브와 같은 여러 장치를 연결하는 장비의 경우에 3.0을 사용해야 전력 부족으로 인한 신호..
안드로이드 개발자라면 MVVM이 대세라는 말들과 그에 대한 여러 정보를 어렵지 않게 많이 접해봤을 것이다. 많은 기업들이 MVVM 패턴을 사용하고 있고, 여러 채용 공고들에도 아키텍처에 대한 이해나 MVVM 실무 경험 등이 푸함되어 있기 때문이다. 그래서 오히려 무지성으로 ViewModel에 대한 이해 없이 겉핥기식 MVVM 패턴을 사용하는 사람도 많아진 것 같다. 0. ViewModel이 왜 두가지로 나뉘게 되었는가 구글이 Jetpack을 내놓기 이전부터 개발자들은 MVVM 패턴을 적용하여 개발을 하고 있었다. 그러다 구글이 Jetpack을 내놓으면서 그 당시 개발자들에겐 낯익은 ViewModel도 포함되어 있어 다들 기존의 MVVM 구조에서 사용하던 ViewModel을 구글에서 다듬어 내놨으리라 기대..
안드로이드에서의 이미지 처리는 꽤나 중요하고 골치아픈 영역이다. 이미지 로딩, 리소스 해제, 캐싱 등 고려해야할 여러 요소들이 많고, 이미지는 보통 한 두개가 들어가기보다 목록형으로 나열되는 경우가 많다보니 성능에 큰 영향을 미치기 때문이다. 이 포스팅에서는 다루지 않지만, 서버에서 이미지를 로드해야하는 경우에도 굉장히 좋은 퍼포먼스를 준다고 하는데 추후에 실무에서 사용하게 된다면 그때 추가로 작성할 생각이다. 1. Glide란 무엇인가 Glide는 Google에서 만든 이미지 로딩 라이브러리이다. (인수했으니까 아무튼 구글꺼) 처음 경험하는 사람도 쉽게 사용할 수 있을 정도로 직관적이고 효율적이라는 것이 큰 장점이다. 여기서, 어떤 이미지를, 어디에, 사이즈는 얼마로, 캐싱은 어떻게, 이런식으로 설정할..
오늘은 새해를 맞아서 CS 공부를 하고자 했던 내 다짐을 실천하고자 인프런에서 CS 강의를 샀다. 퇴근을 늦게해서 이제 첫 화를 들었는데, Json에 관한 설명이 나왔다. 웹/JS 쪽으로는 무지해서 레트로핏 쓸때만 깔짝이던 Json에 대한 설명이 나와서 이해하고 쓰고자 열심히 들었다. 1. Json이란? Json은 JavaScripit Object Notation의 약자로, 풀어 말하면 자바 스크립트 객체 표기법이라고 부를 수 있다. 이름의 뜻과 같이 Json은 자바스크립트 문법을 기반으로 하는 순수 데이터 포맷이며, key 값들과 그에 따른 value값들을 가지고 있다. (자바스크립트를 100% 따르지는 않는다) { "Animals" : [ {"Name" : "사자", "Kind" : "육식"}, {"..
1. Singleton 패턴이란? 객체의 인스턴스를 최초 1번만 생성하고 이후에는 기존 인스턴스를 호출해서 사용하는 패턴을 말한다. 우린 일반적으로 인스턴스를 생성할 때 new 연산자를 사용하는데, 이 때 메모리에 객체의 인스턴스를 할당하게 된다. 물론 최초 1번의 할당까지는 아무런 문제가 되지 않는다. 하지만 여러 곳에서 필요할 때마다 인스턴스를 생성하고 호출한다면, 이는 메모리를 엄청나게 낭비하는 '비효율적인' 행위가 될 것이다. 따라서 객체가 유일해야할 경우에 싱글톤 패턴을 사용하여 기존에 생성된 인스턴스를 호출해서 사용한다. 2. 언제 사용하는 것이 적절할까? 싱글톤을 적용하지 않고 필요할 때마다 객체를 생성해서 사용한다면 매 생성마다 메모리를 할당받게 되고, 이는 성능 저하를 일으킨다. 하지만 ..
0. 시작하기 전에 RxJava의 연산자를 제대로 이해하기 위해서는 마블 다이어그램에 대해 알아야 한다. 아래 마블 다이어그램을 한 번 보자. 위 마블 다이어그램에 대해 완벽하게 이해하고 있다면 이 포스팅을 읽지 않아도 된다. 만약 그렇지 않다면, 이 포스팅을 읽고 난 뒤에는 완벽하게 이해할 수 있을 것이다. 1. 연산자 소개 (1) subscribeOn() subscribeOn 연산자는 observableSource가 subscribe 되었을 때, 데이터를 다음 스트림으로 전달하는 액션을 수행하는 스케줄러를 지정한다. 간단하게 말해서, subscribeOn 연산자는 "Observable이 동작을 시작할 스레드"를 지정한다. 추가적으로 subscribeOn 연산자를 사용할 때 알아둬야 할 사항 몇가지에 ..