티스토리 뷰

튜터님과의 모의면접 #1

 

안드로이드 4대 컴포넌트는 무엇인가요?

액티비티는 사용자와의 상호작용을 담당하는 유저 인터페이스에 해당하며,

앱 실행 시에는 설정해둔 메인 액티비티가 호출이 되며 앱이 시작됩니다.

생명 주기 메소드를 재정의하여 리소스를 효율적으로 관리하고,

앱 상태나 데이터를 적절하게 유지할 수 있습니다.

 

서비스는 백그라운드에서 실행되는 컴포넌트로 UI 없이

오랜 시간 동안 처리해야되는 작업이나, 애플리케이션이 종료되어도

계속 실행되어야 하는 작업을 처리하는 데 사용됩니다.

 

리시버는 안드로이드 시스템이나 다른 앱으로부터 전송되는

브로드캐스트 메시지를 수신하고 이를 처리하는 역할을 하는 컴포넌트 입니다.

디바이스의 변경사항을 감지해 알리거나 SMS를 수신하는 등의 기능을 합니다.

 

프로바이더는 앱 사이에서 파일 및 데이터를 공유하는 역할을 합니다.

프로바이더는 데이터를 캡슐화하여 다른 앱이 해당 데이터에 접근할 수

있도록 하며 표준화된 인터페이스를 통해 데이터를 읽고 쓸 수 있게합니다.

 

 

Activity 생명 주기는 어떻게 구성되어 있나요?

액티비티의 인스턴스를 생성되면 onCreate를 호출해 액티비티의

기본설정과 UI를 초기화한 뒤 onStart와 onResume을 호출해

화면의 요소를 나타내고 사용자와의 상호작용을 시작합니다.

 

액티비티를 화면에서 제거하면 onStop을 호출해 리소스를 해제하고,

그 다음으로 onDestroy를 호출해 액티비티를 메모리에서 제거합니다.

 

액티비티를 종료하지 않은 상태에서 다른 액티비티를 실행시키면

onPause를 호출하고 다시 해당 액티비티를 실행시킬 때 onResume을 호출합니다.

 

만약 더 길게 종료했다 실행시키면 onStop, onRestart, onStart순으로

메서드가 호출되어 onResume부터 생명주기를 이어나갑니다.

 

 

RecyclerView의 특징을 ListView와 비교하여 설명할 수 있나요?

RecylcerView와 ListView는 안드로이드에서 목록을 표시하는 UI 구성요소입니다.

리스트뷰는 스크롤 시 전체 목록을 다시 그리는 방식이기에 성능이 좋지 않고,

기본적으로 수직 방향의 리스트만 지원하기에 레이아웃 유연성이 떨어집니다.

 

리싸이클러뷰는 이런 리스트뷰의 단점을 개선한 위젯입니다.

리싸이클러뷰의 주요 클래스에는 어댑터, 레이아웃 매니저, 뷰홀더가 존재합니다.

어댑터는 리싸이클러뷰의 데이터를 관리하고 뷰홀더에 데이터를 바인딩합니다.

 

뷰홀더는 각 아이템 UI 요소의 참조를 보관하는 역할을 하고,

어댑터는 리사이클러뷰의 데이터를 관리하고 뷰홀더에 바인딩하는 역할을 합니다.

 

뷰홀더에서 보관한 참조는 아이템에 데이터를 바인딩 할 때 사용되며

findViewById의 호출을 최소화함으로써 성능을 향상시킵니다.

 

레이아웃 매니저는 아이템의 다양한 레이아웃 구성과 스크롤 방식을 지원합니다.

리싸이클러뷰는 스크롤 시 화면에 보이지 않는 아이템의 뷰를 재사용하는 방식으로 성능을 개선하였습니다.

 

 

추상 클래스와 인터페이스의 차이는 무엇인가요?

추상 클래스의 변수는 static 변수와 non-static 변수를 가질 수 있으며

추상 클래스는 접근 제어자를 사용하는 것이 가능하지만

 

인터페이스의 변수는 무조건 public static final로 선언되며

인터페이스의 접근 제어자는 기본적으로 public이어야 합니다.

 

추상 클래스는 추상 메서드와 구현된 메서드를 모두 가질 수 있고,

인터페이스는 기본적으로 추상 메서드만 포함합니다.

 

추상 클래스는 단일 상속을 지원하고 인터페이스는 다중 상속을 지원합니다.

 

 

Retrofit이란 무엇인지 장점과 함께 설명할 수 있나요?

Retorfit은 Android에서 REST API 통신을 구현하기 위해 쓰는 라이브러리로

인터페이스를 사용해 API 호출을 정의하므로 간결하게 코드를 작성할 수 있습니다.

 

OKHttp를 기반으로 동작하기에 안정성을 지니며,

인터셉터를 사용해 요청과 응답의 확장의 및 수정이 가능해 확장성이 뛰어납니다.

 

또한 다양한 데이터 형식에 대한 데이터 변환 컨버터를 제공하고,

코루틴과 RxJava와 같은 비동기 프로그래밍 라이브러리와 연동이 가능합니다.

 

 

프로젝트에서 본인이 맡은 부분에 대해 설명해보세요.

저는 프로젝트에서 파이버베이스를 이용해 이메일과 비밀번호를

활용하여 회원가입을 수행하는 부분을 구현했습니다.

 

회원가입 로직을 액티비티 하나에 몰아넣다 보니 코드가

너무 길어져서 코드 분할의 필요성을 느꼈습니다.

 

파이어베이스의 CRUD 함수들을 분할하기 위해 레파지토리 패턴을 적용하였고,

입력값들의 형식을 검증하고 밸리데이션을 변경하는 등의 비즈니스 로직과

입력 필드의 상태를 변경하거나, 에러 및 밸리데이션 메시지를 표시하는 뷰 로직을

분할하기 위해 MVVM 패턴을 적용하였습니다.

 

회원가입 상태에 따라 UI를 업데이트는 하는 로직을 직관적으로

구현하기 위해 UIState를 활용하였습니다.

이를 통해 상태 기반으로 UI를 관리할 수 있었습니다.

 

회원가입을 하고나서 비밀번호를 재설정하거나 아이디를 찾을 일이 생길텐데

그 때 유효한 이메일로 회원가입을 하지 않았다면 두 작업이 모두 불가하기 때문에

파이어베이스의 템플릿을 이용해 회원가입 시에 이메일 인증을 하도록 진행했습니다.

 

또한 회원가입을 수행하면서 파이어베이스 CRUD 작업이 실패할 때를 고려해

비동기 함수로 짰던 파이어베이스 CRUD 함수를 콜백함수로 변경하고

에러시에 적절한 로그를 찍고 토스트 메시지를 띄우는 로직을 추가하였습니다.

 

 

앱에 무한스크롤 기능을 구현하는 방법은 무엇인가요?

리싸이클러뷰에 OnScorllListener를 추가하여 사용자가 스크롤 했을 때

목록의 끝에 도달했는지 확인하고 추가 데이터를 로드하는 식으로 무한 스크롤을 구현할 수 있습니다.

 

무한 스크롤 구현하는 방법을 구체적으로 설명해보겠습니다.

검색 함수를 구현할 때는 데이터의 로딩이 완료되면 어댑터에

추가 데이터를 업데이트하는 로직을 포함해야 합니다.

 

스크롤 리스너에서는 현재 화면에서 표시하고 있는 아이템 개수와

어댑터가 포함하고 있는 아이템 개수를 변수로 선언합니다.

 

그 다음, 만약 데이터를 불러오는 중이고 현재 페이지에서 화면에 첫번째로

보이는 아이템의 인덱스값과 현재 화면에 표시되어있는 아이템 개수를 더한 값이

어댑터가 포함하고 있는 아이템 개수보다 크다면 즉

 

사용자가 리싸이클러뷰의 끝에 도달했다면 페이지 카운트를 증가 후

검색을 수행하는 함수를 호출하여 새로운 페이지의 데이터를 요청하는 로직을 구현합니다.

 

로딩 상태를 나타내는 변수는 페이지 데이터의 로딩이 완료되었을 때

false값을 할당해 페이지 데이터를 중복해서 호출하는 상황을 방지합니다.

'내일배움캠프 > Android 모의면접' 카테고리의 다른 글

면접카타 7주차 정리  (0) 2024.10.27
면접카타 6주차 정리  (1) 2024.10.27
면접카타 5주차 정리  (2) 2024.10.27
면접카타 4주차 정리  (0) 2024.10.27
면접카타 3주차 정리  (1) 2024.10.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함