[ 사족 및 소개 ]
21년도에 봤던 과제 면접 회고.
무려 2년뒤에 올림.
아이패드를 처분하면서 굿노트에 작성해뒀던걸 pdf로 옴기면서 다시 보게되니 너무 재밌음. ㅋㅋㅋㅋ
[ 과제 리뷰 내용 ]
gradle 에는 사용하는 라이브러리만 넣기
- 사용하지 않는 라이브러리를 넣으면 앱 빌드 시간이 늘어나고 앱이 무거워진다. (최초 빌드 시간만)
- 사용하는 라이브러리의 용도를 분명하게 파악해야 한다.
lazy init vs null init
- 파라미터가 있더라도 파라미터가 확실하게 초기화가 먼저 된다면 null 초기화보다는 lazy init을 사용한다.
- null을 최대한 안쓰기 위해서
lazy init을 해야할 멤버와 아닌 멤버를 명확히 구분한다.
- 항상 초기화되는 멤버는 lazy init 할 필요가 없다.
뷰바인딩 vs 데이터바인딩
- 뷰바인딩이 더 가볍다. 데이터바인딩의 모든 기능(viewmodel + live data + xml 표현식)을 사용하지 않는다면 뷰바인딩을 사용한다.
- 컴파일 된 데이터 바인딩 매핑된 클래스를 보면 데이터바인딩과 뷰바인딩이 다르다.
- 데이터바인딩보다 뷰바인딩이 빌드 속도가 더 빠르다
Observe
- 옵저빙 콜백이 최초로 올라오는 시점은 onStart 이다. onCreate에서 옵저빙해도 onStart 전까지 콜백되지 않아 안전하다.
(onCreate에서 초기화 순서를 뒤죽박죽 했음에도 잘 돌아갔던 이유)
파라미터로 뷰모델을 넘기는 것은 신중하게
- 뷰모델을 넘겨야할만큼의 데이터가 필요한건지 고민하기.
(어차피 레퍼런스를 넘기는거라 메모리를 많이 사용하지 않아 상관없는게 아닌가? 라고 그때는 생각했는데, 사용하는 데이터만 명확하게 전달해야 코드 읽을때 이해도도 높고, 사용하지 않는데 결합도만 높아지기 때문에 의존성을 낮추기 위해서라도 신중해야한다.)
enum 클래스 활용하기
- 의미없는 primitive 데이터로 넘기지 않고 enum 클래스를 활용해서 타입을 정의해준 뒤 사용하면 코드 읽기가 수월하다.
inner class vs nested class
- nested class : 중첩된 클래스. outer class와 관련 없는 별개
자바 -> static class / 코틀린 -> class (default)
nested class는 outer class를 참조할 수 없다. nested class는 인스턴트화 하지 않아도 바로 메모리에 할당되지만 outer class는 인스턴스화 하기 전에는 존재하지 않기 때문에 nested class가 참조할 수 없다.
- inner class : 클래스 안에 있는 클래스
자바 -> class (default) / 코틀린 -> inner class
outer class의 참조를 가지고 있다.
inner class를 사용하면 문제가 될 수 있는 점
- inner 클래스는 outer class의 참조를 갖기 때문에 inner class를 인스턴스화 하려면 outer class의 인스턴스가 필요하다.
recycler view adapter의 holder 클래스가 inner class 라면 outer class를 참조할 수 있지만, 리스트의 아이템 개수만큼 holder 클래스가 인스턴스화 될때마다 쓰지않는 outer class가 계속 만들어져서 메모리를 낭비한다.
- inner 클래스는 직렬화 할 수 없다. inner class는 outer class 의 참조가 필요하기 때문에 직렬화 할 수 없다.
Base Activity는 open vs abstract ?
Base class 는 인스턴스화 하지않고 상속만을 목적으로 만드므로 abstract class로 만드는 것이 더 안전하고 목적에 부합한다.
번외) 코틀린의 클래스의 기본이 상속불가인 이유.
상속이 의도된 클래스가 아니라면 상속을 금지해야 한다. 클래스의 의도, 목적과 다르게 상속해서 사용하면, 클래스가 추후 변경될때 클래스를 상속한 하위 클래스의 동작이 예상하지 못하는 방향으로 바뀔 수 있다.
타임스탬프로 정렬하기
- 안드로이드 내부 DB의 테이블에 저장해둔 데이터를 추가된 순서대로 정렬해서 가져오는 기능이 있었는데, 데이터를 넣을때 번호를 매겨서 넣었더니 번호가 중복되어 제대로 정렬이 되지 않는 문제가 있었다...
너무 당연하지만 그때 나는 몰랐었다.... ㅎㅎㅎ
network response 데이터는 언제나 다 올거라고 확신할 수 없다.
- network response entity의 타입이 not null 이더라도 null이 담길 수 있다. 그러므로 nullable 타입을 사용한다. -> json 직렬화 라이브러리에 따라 다른데, GSON이 그렇다.
- network response entity를 그대로 사용하지 않고, model mapper를 사용할 수 있다.
[ 포스팅 후기 ]
요때는 아키텍처도 몰랐고 아무것도 몰랐었는데, 과제를 하는 것도 도움이 되었지만 과제 리뷰도 큰 도움이 되었었다.
과제 리뷰를 열심히 해주시는 분들께 큰 감사를 드리며, 과제를 열심히 해오는 지원자를 위해서라도 면접은 봐주셨으면 좋겠다~~~
'Android' 카테고리의 다른 글
[Glide] 이미지 로딩 시 자동으로 이루어지는 다운 샘플링 (0) | 2022.08.10 |
---|---|
인텐트 필터 작성하고 테스트해보기 (0) | 2021.11.27 |
Android Task (0) | 2021.11.14 |
Android MVP 아키텍처 (0) | 2021.10.30 |
Activity의 생명주기, Life Cycle (0) | 2020.04.02 |