Medium 에서 새로 포스팅을 시작하려 합니다. '나만 보는 개발 로그' 가 아닌 모두가 볼 수 있는 기록을 공유하고 싶어졌습니다. 기존에는 단순 아카이빙용으로 티스토리를 활용하였습니다.(아닌 글들도 존재하지만 소수였지요 😅) 이제는 저의 정리 형태를 바꾸어 보려고 합니다. 노션을 아카이빙용으로, medium 을 공유하는 글을 올리는 용도로 활용하고자 합니다. 공유하는 글을 작성하고자 노력함으로써 공부하는 기술에 대한 개요 뿐만 아닌 동작 원리에 대해 이해하고자 합니다. 또한 단순히 어떤 기술의 사용법을 공유하는 것이 아닌 +@ 의 특성을 가지는 글을 작성하고자 합니다. 이를 위해서 기존의 글을 수정, 삭제하는 것보다는 새로운 곳에서 다시 시작하는것이 괜찮겠다고 판단했습니다. 이젠 아래에서 양질의 글을..
DataBinding, Binding 객체 생성나는 DatabindingUtil 클래스로 bindng 객체를 생성해서 사용하고 있었다. 하지만 다른 사람들이 작성한 databinding 코드들을 보면 여러 방법으로 binding 객체를 생성해주는 것을 보고 내가 제대로 쓰고 있는 것에 대한 의문이 들었다.inflate(), bind() 의 차이도 궁금하던 차였고 ..이러한 의문들을 해결하기 위해 대표적인 Activity, Fragment 에서의 사용법을 분석해보았다.ActivityActivityMainBinding.inflate(inflater: LayoutInflator)override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedI..
String API, isBlank() vs isEmpty()우린 Android 에서 java 언어로 String 의 null or empty check 를 TextUtils.isEmpty() 로 하곤 했을 것이다.코틀린에서는 String 클래스 내 API 로 isBlank() 와 isEmpty() 두 가지를 제공한다.사용 시 자주 헷갈리는 두 API 차이를 분석해보자.isBlank()fun CharSequence.isBlank(): Boolean문자열이 비어 있거나 공백 문자만으로 구성되어 있으면 true 를 리턴한다.Kotlin, isBlankisEmpty()fun CharSequence.isEmpty(): Boolean문자열이 비어있으면 true 를 리턴한다.Kotlin, isEmpty 두 API ..
getLocationOnScreen vs getLocationInWindow()두 메소드 모두 뷰의 좌표값을 얻기 위해 종종 쓰는 메소드이다.둘의 차이를 비교하기 전에 Android Developers 에서의 정의를 살펴보자.public void getLoactionInWindow(int[] outLocation)@param outLocation int : 좌표를 보유할 두 정수 배열window 에서 view 의 좌표를 계산한다. 메소드가 리턴 된 후, 배열에는 x 밑 y 위치가 순서대로 포함된다.public void getLocationOnScreen(int[] outLocation)@param outLocation int : 좌표를 보유할 두 정수 배열screen 에서 view 의 좌표를 계산한다. ..
Architecture Components 사용 시의 5가지 일반적인 실수주의 : 이 글은 원문이 존재하는 글로, 본인은 그저 번역 / 의역한 것일뿐임을 알림.원문 : https://proandroiddev.com/5-common-mistakes-when-using-architecture-components-403e9899f4cb다소 심각한 결과를 초래하는 것들 - 만약 당신이 이러한 실수들을 저지르지 않더라도, 언젠가 같은 문제에 직면하는 것을 피하기 위해 명심할 가치가 있다. 이 글을 아래의 내용들을 설명한다.Leaking LiveData observers in FragmentsReloading data after every rotationLeaking ViewModelsExposing LiveDat..
String.contains() with empty String, return truejava 에서 String.contains() 를 사용할 때 내가 발생했던 이슈에 대해 다뤄보려한다.아래의 코드를 보자.String myString1="foo"; String myString2=""; if(myString1.contains(myString2)){ System.out.println("Am here"); } else { System.out.println("Am not here"); }foo 가 "" ( empty string ) 을 포함하냐는 것인데, 언뜻 보면 false 로 "Am not here" 가 실행될 것 같지만컴파일 해보면 "Am here" 가 출력된다.그 이유를 찾아보니 모든 문자열의 시작과 끝..
Message.obtain() vs Handler.obtainMessage()Handler 에 대해 찾다가 Message 객체를 얻어오는 두 메소드를 알게 되었다.두 메소드의 차이를 보려고 Android Developers 문서를 보았는데 둘 다 Global Message Pool 의 인스턴스를 반환한다고 명시되어 있었다.무언가 다른 점이 있을것 같아 찾아본 내용들에 대해서 정리하고자 한다.Message.obtain()Android Developers 에서 찾아보면 이렇게 정의되어있다.obtainstatic fun obtain(): Message!Return a new Message instance from the global pool. Allows us to avoid allocating new obj..
Handler ( sendMessage, post ) / runOnUiThreadHandler ( sendMessage, post )runOnUiThreadReferences안드로이드에서 Thread 를 Main Thread 로 이관하는 작업 도중 문득 Handler ( sendMessage, post ) / runOnUiThread 의 차이점이 궁금해져서 찾아보았다.각각의 사용법에 대해서는 잘 정리해놓은 글들이 많이 있고 내용이 길어질 수 있으니 사용법 관련해서는 적지 않았다.Handler ( sendMessage, post )sendMessage()public final boolean sendMessage(Message msg) { return sendMessageDelayed(msg, 0); }Ha..
DI : Dependency Injection ( 의존성 주입 )What is DI ?ReferencesWhat is DI ?의존성 주입을 이해하기 위해 의존성의 개념부터 짚고 가겠다.Dependency ( 의존성 ) ?SOLID 에서 Dependency Inversion Principle ( DIP, 의존 관계 역전 원칙 ) 을 이해하고 있다면 의존성을 이해하기 쉽다. DIP 에 대해서는 추후 포스팅 할 예정이다.DIP 는 이렇게 정의하고 있다.고차원의 모듈은 저차원의 모듈에 의존하면 안 된다. 이 두 모듈 모두 다른 추상화 된 것에 의존해야 한다.추상화 된 것은 구체적인 것에 의존하면 안 된다. 구체적인 것이 추상화 된 것에 의존해야 한다.고수준 모듈 : 어떤 의미가 있는 단일 기능을 제공하는 모듈저..
JDK 6 이후, Timezone.setDefault() Timezone.setDefault(Timzone timezone) 은 메소드 명에서 유추할 수 있듯이 기본 Timezone 값을 설정하는 메소드이다.Timezone.getDefault() // 기본 Timezone 값 가져오기먼저 핵심부터 이야기하면, JDK 6 이전에는 defaultTimzone 이 스레드 로컬 변수에 저장되었다.하지만 JDK 6 이후로는 defaultTimezone 이 VM 전체를 변경한다고 한다.내 경우에는 JDK 6 이전의 형태로만 알고 있었기 때문에, Timezone 설정을 아래와 같이, 별도의 시간 관련 메소드 내에서 Timezone.setDefault(Timzone timezone) 을 사용하여 Timezone 설정을..