ABOUT ME

작은 디테일에 집착하는 개발자

Today
-
Yesterday
-
Total
-
  • [CS] 신입 개발자 기술면접 질문 - 안드로이드 편 (feat. 진행 중 ing)
    IT Study/컴퓨터 기초 2024. 1. 15. 20:37
    728x90

    안드로이드 OS에 대해 설명해주세요.

    안드로이드 OS는 구글이 개발한 오픈 소스 기반의 모바일 운영체제입니다.
    스마트폰 뿐만 아니라, TV나 자동차와 같은 다양한 플랫폼에서 동작할 수 있다는 특징을 가지고 있습니다.

     

    자바와 코틀린의 차이에 대해 설명해주세요.

    코틀린은 null 안정성을 제공합니다.
    코틀린에서는 변수를 선언할 때, null을 가질 수 있는지 여부를 명시해야 하는데,

    이를 통해 Java에서 자주 일어나는 Null pointer exception과 같은 에러를 피할 수 있습니다.

    또 코틀린은 간결하고 표현력이 높은 문법을 가지고 있습니다.
    타입 추론을 통해 변수의 데이터 타입을 명시하지 않거나
    데이터 클래스를 통해 게터/세터/이퀄/해시코드와 같은 메서드를 자동으로 만들어줍니다.

    또한 코틀린에는 확장함수라는 기능이 있어, 기존의 클래스에 새로운 함수를 추가할 수 있습니다.

     

    안드로이드 sdk에 대해 설명해주세요.

    안드로이드 sdk는 안드로이드 어플리케이션 개발을 편하게 하기 위한 도구 모음들입니다.
    안드로이드라는 플랫폼에 대해 API 라이브러리, 개발/디버깅 도구, 문서 등을 포함하고 있습니다.

     

    안드로이드 생명주기(라이프사이클)에 대해 설명해주세요.

    안드로이드의 생명주기는 사용자의 액션에 따라 변화될 수 있습니다.
    비활성화 상태부터 활성화 상태, 일시정지, 중지, 종료 상태로 구성될 수 있습니다.

     

    안드로이드 4대 구성 요소에 대해 설명해주세요.

    안드로이드는 액티비티, 서비스, 브로드캐스트 리시버, 콘텐츠 프로바이더로 구성됩니다.

    액티비티는 앱을 사용할 때 볼 수 있는 화면을 나타내며,
    서비스는 화면에 보이지 않는 백그라운드 작업을 처리하는 부분입니다.
    브로드캐스트 리시버는 시스템 단에서 방생하는 이벤트를  앱에서 받아 처리하며,
    콘텐츠 제공자는 앱 간의 데이터 공유를 관리하는 역할을 수행합니다.

     

    안드로이드에서 액티비티와 프래그먼트의 차이에 대해 알려주세요.

    액티비티와 프래그먼트는 모두 UI를 구성하는 중요한 요소입니다.

    액티비티는 앱에서 사용자가 볼 수 있는 한 화면을 나타내는 컴포넌트로, 사용자와 상호작용을 담당합니다.
    각 액티비티는 독립적으로 동작하며, 다른 액티비티로 전활할 때에는 인텐트를 통해 전환할 수 있습니다.

    하지만 프래그먼트는 하나의 액티비티 안에서 재사용이 가능한 UI 조각을 의미합니다.
    프래그먼트는 독립적으로 동작할 수 없고 항상 액티비티 내에 호스팅되어야 합니다.

    따라서 여러 개의 프래그먼트를 하나의 액티비티에 담아, 멀티탭과 같은 화면들을 구현할 수 있습니다.

     

    Manifest는 무엇인가요?

    매니페스트는 앱의 필수적인 정보를 담는 파일인데요, 패키지명이나 앱의 구성요소, 권한 등의 정보를 담고 있습니다.

     

    Intent에 대해 설명해주세요.

    Intent는 컴포넌트 간에 작업을 수행하도록 요청하는 메시지 객체입니다.

    대표적으로는 명시적, 암시적 인텐트가 있습니다.

    명시적 Intent는 명확하게 시작할 컴포넌트나 액티비티를 지정하는 것,
    암시적 Intent는 특정 액션을 수행할 수 있는 컴포넌트를 찾아서 실행하는 것을 의미합니다.

    (암시적 Intent 예 : 특정 url을 실행하라는 액션 요청 시, 웹브라우저 기능을 가진 다수의 앱이 호출될 수 있다.)

     

    안드로이드에서 서비스란 무엇인가요?

    서비스는 화면에서 보이지 않지만, 백그라운드에서 실행되는 앱의 구성 요소입니다.
    오래 실행될 수 있다는 특징을 가지는데요. 앱이 비활성화 상태일지라도 계속 실행할 수 있습니다.

    크게 포그라운드(알림 표시) 서비스, 백그라운드(보이지 않는) 서비스, 바인드 서비스로 나뉠 수 있습니다.

     

    브로드캐스트 리시버가 무엇인가요?

    브로드캐스트 리시버는 안드로이드 OS에서 발생하는 이벤트와 정보를 앱이 수신할 수 있도록 하는 구성 요소입니다.
    배터리가 부족하거나 화면의 꺼지거나, 사진을 캡처하는 등의 이벤트를 감지하고 반응할 수 있습니다.

     

    액티비티의 생명주기(라이프사이클)에 대해 설명해주세요.

    액티비티의 생명주기는 액티비티가 생성되어 종료될 떄까지 거치는 여러 상태, 메서드 호출을 의미합니다.

    액티비티의 생명주기에는 onCreate, onStart, onResume, onPause, onStop, onDestory와 같은 메서드가 있습니다.
    이 메서드들은 액티비티가 처음 생성되고, 사용자에 보여지며, 상호작용하고,
    중단되고, 다시 재개되고, 종료될 때 시스템에 의해 호출되어 적절한 작업을 수행합니다.

     

    onCreate와 onStart의 차이를 설명해주세요.

    onCreate는 액티비티가 처음 시작될 때 한 번만 실행되는 곳입니다.
    UI 레이아웃을 설정하거나 데이터 바인딩과 같이 데이터를 준비하는 작업을 수행합니다.

    반면, onStart는 액티비티가 사용자에게 보여질 때마다 실행되는 곳입니다.
    액티비티가 다시 시작될 때에도 onStart가 실행되며, 필요한 UI 업데이트 등을 수행합니다.

     

    AsyncTask가 무엇인가요?

    AsyncTask는 안드로이드에서 백그라운드 작업을 수행하고,
    그 결과를 UI에 업데이트하는 데 사용되는 클래스로 알고 있습니다.

    그러나 현재 Deprecated되어, 코루틴과 같은 대안을 사용하는 것으로 알고 있습니다.

     

    Retrofit에 대해 설명해주세요.

    Retrofit은 네트워크 통신을 위한 라이브러리입니다.

    Retrofit은 RESTful API와 통신하기 위한 라이브러리로, OkHttp를 기반으로 동작합니다. 
    JSON 형태의 웹 응답을 자동으로 자바 객체로 변환해주는 기능 등을 제공합니다.

     

    OkHttp에 대해 설명해주세요.

    OkHttp은 네트워크 통신을 위한 라이브러리입니다.

    OkHttp는 안드로이드에서 웹 서버와 통신을 돕는 HTTP 클라이언트 라이브러리입니다.

    네트워크 연결 작업을 처리하고, HTTP 캐싱을 지원하며,
    데이터 압축과 같은 기능을 제공함으로써 효율적으로 네트워크 통신을 가능하게 합니다.

     

    디자인 패턴에 대해 아시나요?

    네, 디자인 패턴은 소프트웨어 개발에 자주 발생하는 문제를 해결하기 위해 재사용 가능한 설계를 의미합니다.

    대표적으로 MVC, MVP, MVVM이 있습니다.

    MVC는 모델 뷰 컨트롤러로 이루어진 디자인 패턴으로,
    데이터 처리를 담당하는 모델, UI를 담당하는 뷰, 이들을 연결하는 컨트롤러로 구성됩니다.

    MVP는 MVC를 개선한 패턴으로, 뷰와 모델 사이에 프레젠터를 두어
    이 둘의 직접 연결을 끊고, 뷰의 이벤트를 핸들링하는 역할을 합니다.

    MVVM은 뷰와 모델 사이에 뷰 모델이 있는 구조로, 데이터 바인딩을 통해 뷰와 뷰모델이 자동으로 업데이트 되는 방식입니다.
    뷰 모델이 중간에서 데이터를 변환하거나 처리하는 것을 담당함으로써, 뷰와 모델 사이의 의존성을 낮출 수 있습니다.

     

    MVVM 아키텍처를 사용한 이유, 본인이 느낀 장점에 대해 말해주세요.

    .

     

    프래그먼트의 생명주기(라이프사이클)에 대해 설명해주세요.

    프래그먼트의 생명주기는 액티비티와 유사하지만 약간의 차이가 있습니다.
    프래그먼트가 생성되고 나타날 때에는 onAttack, onCreate, onCreateView, onActivityCreated 메서드가 호출되며,
    반면 프래그먼트가 화면에서 사라질 때에는 onDestoryView, onDestory, onDetach 메서드가 차례로 호출됩니다.

     

    ListView와 RecyclerView의 차이를 알려주세요.

    리스트 뷰와 리사이클러 뷰는 모두 안드로이드에서 데이터 목록을 표시할 때 사용되는 뷰입니다.

    리스트 뷰는 스크로 시, 화면에 보이던 아이템 뷰를 삭제하고 새롭게 보일 아이템 뷰 객체를 새로 생성합니다.
    이를 수차례 반복하다보면, 수백수천개의 아이템 뷰가 생성/삭제가 반복되며 메모리 낭비가 심합니다.

    반면, 리사이클러 뷰는 뷰홀더 패턴이 기본적으로 적용되는데,
    화면에 보이던 아이템 뷰를 삭제하지 않고, 이전에 생성했던 아이템 뷰를 재사용할 수 있습니다.

     

    ListView와 RecyclerView 중 어떤 것을 선호하나요?

    저는 RecyclerView를 선호합니다.
    이유는 다양한 레이아웃을 쉽게 구현할 수 있고, 여러 유형의 아이템 뷰를 효율적으로 처리하며,
    기본 제공하는 뷰 홀더 패턴을 통해 성능을 향상시킬 수 있기 때문입니다.
    또한, 아직 사용해보지 않았지만 기본적으로 아이템 애니메이션 기능을 제공하고 있는 것으로 알고 있습니다.
    이는 사용자의 경험을 향상시키는 데 도움이 된다고 생각하기 때문에, 리사이클러 뷰를 더 선호합니다.

     

    Process와 Thread 차이에 대해 설명해주세요.

    모두 프로그램 실행과 관련된 단어들입니다.

    프로세스는 OS에서 독립적으로 실행되는 프로그램 단위를 말합니다.
    이러한 독립성으로 인해 다른 프로세스에 영향을 끼치지 않는다는 장점이 있는 반면, 프로세스 간의 통신은 복잡합니다.

    스레드는 프로세스 내에서 실행되는 하나의 작업 흐름을 의미합니다.
    스레드들은 같은 메모리 영역을 공유하며 실행되기 때문에, 통신이 간단하고 생성/삭제가 용이하다는 반면,
    한 스레드에 문제가 일어나면 다른 스레드에 영향을 끼칠 수 있습니다.

     

    코틀린에서 null을 처리하는 방법에 대해 아는 대로 설명해주세요.

    변수나 반환 타입에 ?를 붙여, nullable을 선언할 수 있습니다.
    안전 호출 연산자(?.)를 통해 null이 아닌 경우에만 접근을 시도하며, null인 경우 null을 반환합니다.
    엘비스 연산자(?:)를 통해 null인 경우 우측의 기본 값을 반환합니다.
    안전한 캐스트(as?)를 통해 캐스트 실패 시 null을 반환합니다.

    !! non-null을 통해 null이 아님을 명시합니다.
    그러나 이때 null인 경우, null pointer exception을 발생시킬 수 있으므로 주의해야 합니다.

     

Designed by Tistory.