[ Intro.. ] android kotlin 코드 예시를 찾아보면 이런 구조의 Companion object를 간혹 발견할 수 있다. 그냥 oncreate 위에 val gap = " " 로 구성해도 같은 결과일 것 같은데, 왜 Companion object에 사용할까?? 답부터 말하면, 1. 메모리에 올라가는 타이밍이 빨라짐. 2. Companion object 는 "객체" 로 관리됨 (자바의 Static과 비교됨). (저번 포스팅에서는 Companion Object와 비교되는 Java의 Static과 JVM에 대해 공부했으니 참고해주세요! https://pudroid.tistory.com/8) 3. 싱글톤으로 관리됨. 4. 따라서 공통 데이터 관리가 가능하고, 상황에 따라 메모리 관리 효율적. 이번..
[ Intro.. ] android kotlin 코드 예시를 찾아보면 이런 구조의 Companion object를 간혹 발견할 수 있다. 이녀석이 무엇일까 고민하던 중 JAVA Static과 비교는 글이 되게 많아 간단히 다뤄보려한다. 이번 포스팅에서는 1. Kotlin Companion Object 와 비교되는 Java의 Static 과 특징 2. JVM에 의한 메모리 초기화 에 대해 다룬다. (사용법은 다루지 않는다!) [ Java의 Static ] Static 키워드란? "특정 멤버(변수, 메소드)를 클래스 수준으로 선언하고 공유하는데 써먹는 키워드" 이것만 봐서는 무슨 말인지 이해가 안될것이다. Static 사용 예시 예를 들어서 설명해보겠다. Static를 쓰는 예시는 다음과 같다. 위 예시와 ..
[ Intro.. ] ViewModel 내부에서 Context를 써먹을 상황이 있었다. (DB, SharedPrefernces.. 등) 저렇게 변수를 만들고 ViewModel 에서 Activity의 Context를 참조한 후 context 값을 넣어 활용하려 했으나, 갑작스레 형광팬이 그어졌다..!!!! 읽어보니 메모리 누수가 발생한다는 경고문 이였다..! 최근 진행 프로젝트와 관련하여 메모리 누수로 인해, 앱이 무거워지고 느려지며 버벅이는 현상을 체험하고있던 나는 이게 뭔지 걱정이 되었다..ㅜㅜ 메모리 누수 방지를 위해 Context가 무엇인지 이번포스팅에서 설명하고, 위 문제를 극복하는 방법을 다음 포스팅에서 정리해보려 한다!! [ Context 란? ] 공식 문서를 정리해보면 다음과 같다. 1. 어..
Intro.. 저번 포스팅에 이어 Fragment Lifecycle을 다뤄보려 한다. 프레그먼트란 무엇인지, lifecycle, 대응사항(중요) 순으로 작성해보겠다! Fragment 란? 이름 뜻 그대로 조각이다. Activity 위에서만 동작하는 화면이라 생각하면 편하다. 대신, Activity와 마찬가지로 코드, 레이아웃 xml을 작성할 수 있고, 한 Activity 위에 하나 이상의 Fragment 조각이 존재할 수 있다. 뭔가 들어보면 Activity가 할 수 있는 기능인데 굳이 필요한가?? 라고 생각할 수 있지만, 거의 대부분의 프로젝트에서 Fragment를 써먹는걸 보면 필요하니까 쓰는것같다.. 이유가 뭘까?? 첫번째로, 가볍기 때문이다. Activity의 경우 Fragment에 비해 무겁고,..
Intro.. 간단한 기능들이 돌아가게 하는 코드를 어느정도 짜봤다면, 그리고 어느정도 안드로이드와 친해졌다면, 이제는 MVVM과 같은 아키택쳐와 메모리 누수 등을 신경쓰는 부분도 다뤄야한다. 왜일까?? MVC, MVP, MVVM, CA 와 같은 아키택쳐로 코드를 짜면 일관적이고 수정이 용이하며 정리되고 직관적인 코드를 짤수있음 (한 엑티비티에 코드가 수백줄 있고 구조를 본인도 알아보기 힘들다면 아키택쳐 공부 강추..) 메모리 누수를 신경쓰면, 불필요한 자원 낭비를 막아 앱이 느려지고 꺼지고 무거워지는 문제점을 해결 할 수 있다. 점점 앱의 크기가 커지거나 다루는 데이터가 많아질수록 이 부분의 필요를 절실히 느낄것이다. 아무튼!! 이런 부분들에 접근하고 능숙해진다면 이 모바일 시장을 헤쳐나갈 수 있다고 ..
intro.. 저를 비롯한 많은 모바일 개발자 꿈나무들은 여러 Activity와 Fragment를 만들고 View 를 띄우고, 데이터를 주고받는 등 다양하게 활용하고 있습니다. 좋은 코드 들고와 클론 코딩을 하던 중, BaseFragment 에 Fragment Lifecycle 단계에 맞춰 다양한 오버라이드 (onCreated 등등..) 함수가 구현되어 있는것을 발견! 그런데 어떤 생명주기 단계에서는 data를 초기화하고, 어디서는 listener를 초기화하고, 어디서는 livedata 옵져버를 초기화하고.. 또 onDestory 에선 viewBinding을 null로 바꿔주고.. 가볍게만 알고있던 Fragment Lifecycle 이였는데,, 왜 각각의 위치에서 데이터, 리스너 등등을 초기화하는지.. ..
이번 포스팅에는 OOP(object-oriented programming) 즉, 객체 지향 프로그래밍의 객체라는 존재로 인하여 탄생한 "청소부" Garbage Collecter 에 대해 다뤄보겠다. GC란? Garbage Collecter 메모리 영역중 heap 영역에서 사용하지 않은 객체들을 제거해주는 청소부. (힙 메모리 영역에서 사용되지 않는 객체를 지워주는 프로그램) [자바와 코틀린의 객체 선언 방식] JAVA : Person person = new Person(" ") Kotlin : var person = Person(" ") 객체지향 언어들 중 자바는 위와 같이 new라는 키워드 등으로 생성한 객체를 다룬다. 자바 코드는 컴파일 후 메모리에 올라가게 되고 메모리의 여러 영역중에서도 Heap ..
Intro. 이번 글은 JVM, DVM, ART에 대해 얕은 지식을 공유해보려 한다. 과거 안드로이드를 공부할 때 이론이나 운영체제 공부보단, 프래임워크를 먼저 접해보고 기능 구현을 먼저 했던 터라 이론적인 내용이 너무 부족하였다. 때문에 이것저것 공부하던 도중 JVM과 Dalvik, ART가 튀어나왔다. 뭐 실행을 도와주는 녀석들인것같은데 조금 깊게 볼 필요가 있을것같았다. JVM Java virtual Machine 가상머신 JVM은 자바 가상 머신으로, 자바 컴파일러를 통해 생성된 .class 파일(자바 바이트코드)을 JVM 내부에 있는 JIT(just in time) 컴파일러를 통해 기계어로 바꿔주는 역할을 담당한다. 즉, 자바 코드를 실행시켜주는 녀석이고, JVM으로 인해 JAVA는 운영체제에서..