전체 글
-
Fragment에서 ViewBinding 사용 시 발생할 수 있는 메모리릭Android 2020. 11. 13. 12:03
Fragment에서 두 가지 생명주기 Fragment는 Activity와 다르게 조금은 다른 생명주기를 가지고 있습니다. Fragment의 고유한 생명주기를 가지고 있으면서도 자세히 보면, View와 관련된 생명주기도 가지고 있죠. 위의 이미지를 보시면 onCreateView와 onDestroyView를 가지고 있는 것을 확인할 수 있습니다. onCreate와 onCreateView라는 두가지 생명주기를 가지는데 이 둘의 차이가 무엇일까요? onCreate는 Fragment가 생성될 때, 즉 화면이 아직 보이지 않는 상태에서 실행되는 것이고, onCreateView는 화면을 구성할 때 호출되는 부분입니다. 그래서 직접적으로 화면과 관련된 생명주기는 onCreateView와 onDestroyView가 되는..
-
Gradle의 Task 사용법Gradle 2020. 11. 12. 10:18
개요 최근 Udacity의 Gradle For Android and Java 강의를 보고 있습니다. Android의 공식 빌드 도구인 Gradle을 조금 더 잘 이해하고 싶었기 때문인데요. 단순히 빌드 버튼만 눌러서 동작하던 것들이 어떤 원리로 동작하는지 알아가는 과정은 재밌는 것 같습니다. 어쨌거나 공부한 내용을 정리하기 위한 목적으로 Task에 대해서 정리해봅니다. Task란? Task는 Gradle이 제공하는 Domain Model의 가장 중요한 개념 중 하나입니다. Task는 독자적으로 코드를 실행하는 작은 단위입니다. 또는 다른 Task가 먼저 선행돼야 실행되는 것과 같은 의존성을 가지기도 합니다. 함수와 같이 Task는 Input이 있으면 Output이 있고, 또 snapshot과 같은 내부적..
-
변수의 동시성 제어에 관한 이슈 및 해결Android 2020. 10. 27. 11:01
개요 코드를 작성하다보면 여러가지 고려할 사항이 있는데요. 그 중 하나가 동시성에 관한 문제입니다. 특히 멀티 스레드 환경에서는 더욱 주의해야하는 문제인 동시성이란 무엇일까요? 동기화와 동시성 문제 멀티 스레드 환경에서는 데이터에 대한 동시 데이터 접근 문제가 발생할 수 있습니다. 하나의 데이터에 대해 특정 스레드가 쓰는 동작을 한다면 다른 스레드가 읽는 등의 동작을 할 수 있는 것이죠. 이러한 현상의 원리는 프로세스와 스레드의 구조와 관련이 있습니다. 프로세스들 간에는 이미 OS가 별도의 프로그램으로 동작하도록 알아서 처리하고 있습니다. 프로세스는 메모리에서 고유한 주소값을 가지고 있고, 다른 프로세스가 가지고 있는 주소를 침범할 수 없습니다. 반면, 스레드는 프로세스 안에 여러개가 존재합니다. 그리고..
-
Java GC와 Object간 ReferenceJava 2020. 10. 18. 16:04
개요 날씨가 조금씩 쌀쌀해지는 가을이네요. 다들 환절기 감기에 조심하시기 바랍니다. 최근 위플래닛에서 프로젝트를 진행하면서 하나 배운 것이 있습니다. WeakReference란 객체인데요. 처음 접하는 개념이라 이해하기 매우 어려웠지만, GC에 대해서 이해한다면 어렵지 않게 또 배울 수 있는 것이 이 Reference입니다. 아무래도 Android 개발을 하다보면 이제는 Kotlin을 주로 사용하지만, 그래도 GC에 대한 이해는 매우 중요하다고 생각합니다. 그럼 시작하겠습니다. GC의 원리 Java에서 객체를 생성하게되면 JVM의 Heap area에서 생성이 됩니다. 그리고 이 객체를 Stack에 있는 변수들이 참조하게 되죠. 이 Heap 영역의 오브젝트들은 Stack에 있는 변수들이 참조할 수 있는지 ..
-
Gson을 통해 API Response를 Enum으로 매핑하기Android 2020. 9. 25. 19:02
글을 시작하기 전에 안녕하세요, 블로그에는 굉장히 오랜만에 글을 게시하는 것 같네요. 최근 얼마전 안드로이드 개발자로 인턴을 시작하면서 시간이 많이 나지 않아 블로그에 신경을 많이 못썼던 것 같습니다. 그래도 역시 경험을 정리하는데는 블로그만한 것이 없는 것 같네요. 업무를 하면서 직면한 문제들과 해결한 경험에 대해 지속해서 포스팅 할 계획입니다. 그럼 오늘부터 시작해볼까요? Adapter에 지나치게 많은 코드 (보안을 위해 코드는 비슷하게 작성하되, 일부 수정했습니다.) class ViewHolder extends RecyclerView.ViewHolder { public void bind() { binding.setPoint(point); binding.createdAt.setText(changeTo..
-
반응형 UI 설계를 위한 덕목 - 가변 영역, 고정 영역 구분일상, 생활 기록 2020. 9. 5. 11:40
UI 구성 중 자주 마주치는 문제들 디자인을 넘겨준대로 레이아웃을 설계하다보면 디자인대로 화면이 나오지 않는 경우가 많습니다. 기본적으로 ContraintLayout이나 RelativeLayout 등 반응형 디자인을 위한 상대적인 비율을 설정할 수는 있으나, 마진값과 텍스트 크기 등 디자인에서 기본적으로 주어지는 값만큼 넣었을 때, 화면을 초과하거나 맞지 않는 경우가 발생합니다. 디프만 8기에서 진행중인 'MIMO' 에서도 이런 문제가 동일하게 발생했는데요. 한 화면에 리소스들이 워낙 많았고, 또 고정적으로 줘야되는 마진 값이 많아 주어진 디자인 그대로 작성했을 때, 화면이 작은 기기에서는 화면을 넘어가버리는 일이 발생하죠. 그럼 이럴 때 어떻게 해야할까요? 스크롤 뷰를 통한 스크롤링으로 해결 간단히 생..
-
무엇을 참조하고 있는지 정확히 파악하자일상, 생활 기록 2020. 8. 8. 01:44
개요 참조라는 개념은 프로그래밍 전반적으로 쓰이는 단어입니다. 예를 들면 변수가 특정 객체를 가르키고 있을 수도 있고, 또는 변수가 또 다른 변수(리스트와 같은)를 가르키고 있을 수도 있죠. 이 참조라는 개념이 정확하게 정립이 되지 않으면 디버깅하는데 많은 어려움을 겪을 수 있습니다. 널포인터익셉션과 같은 버그나 여러 잡다한 버그들이 이 참조라는 부분에서 실수가 나기 때문이죠. 그래서 변수나 객체를 선언할 때 참조를 반드시 신경써야겠습니다. 최근 Behind라는 숭실대학교 IT 동아리인 유어슈에서 진행중인 프로젝트가 있습니다. 대학 강의 별로 커뮤니티, 게시판을 만들어서 강의별 여론을 활성화하자는 목적을 가진 앱이죠. 저는 이 앱을 제작하던 중 참조와 관련한 사소한 버그를 만납니다. 하지만 뭐가 문제인지..
-
코틀린 수신 객체 지정 람다 : with와 applyKotlin 2020. 8. 7. 15:48
이 글은 'Kotlin in Action' 을 보고 공부한 내용을 정리하고자 작성한 글입니다. 더 자세한 내용은 해당 책을 참고하시기 바랍니다. 개요 코틀린을 사용하다보면 처음 접하는 생소한 메소드나 예약어가 있습니다. 오늘 소개하려는 with와 apply도 그 중 하나죠. 안드로이드 프레임워크에서도 많이 사용되는 메소드다보니 이 메소드들을 볼 수 있는 기회는 많았으나 따로 찾아봐도 어떻게 사용해야하는지 잘 와닿지 않았습니다. 또, 이 두 메소드를 잘 사용하면 진짜 코틀린답게 코드를 짜는 것처럼 보인다고 해야하나..뭔가 코드 작성을 잘 하는 것처럼 보이기도 했습니다. 어쨌든 이번에 Kotlin in Action을 공부하면서 좋은 내용이 있어 정리하고자 합니다. 여기서 말하는 수신 객체 지정 람다가 개인적..