Android

안드로이드 기본 지식 (면접 대비)

Bin- 2021. 1. 7. 02:49

안드로이드의 주요 컴포넌트

  • Activity

    사용자에게 UI가 있는 화면을 제공하는 앱 컴포넌트입니다. 앱과 사용자의 상호작용을 위한 진입점 역할을 합니다. 일반적으로 화면을 가득 채우지만, 화면보다 작게 다른 화면 위에 떠 있을 수 있습니다. 사용을 위해서는 앱의 manifest에 등록하고 수명 주기를 적절히 관리해야 합니다.

  • Service

    백그라운드에서 오래 실행되는 작업을 수행할 수 있는 앱 컴포넌트입니다. 사용자 인터페이스를 제공하지 않습니다. 다른 컴포넌트에서 서비스를 시작할 수 있으며, 사용자가 다른 앱으로 전환하더라도 백그라운드에서 계속 실행됩니다. 또한 컴포넌트에 서비스를 바인딩하여 서비스와 상호작용을 할 수 있습니다.
    포그라운드, 백그라운드, 바인드된 서비스가 있습니다.

  • Broadcast Receiver

    안드로이드 앱은 시스템 및 기타 앱에서 브로드캐스트 메시지를 받거나 보낼 수 있습니다. 예를 들어 시스템은 시스템 부팅 또는 기기 충전 시작과 같은 다양한 시스템 이벤트가 발생할 때 브로드캐스트를 전송합니다.

    Intent filter를 통해 수신하고자 하는 브로드캐스트 유형을 정의하면, 해당 브로드캐스트가 발생할 때 등록된 BroadcastReceiver에서 브로드캐스트를 수신합니다.
    manifest에 등록하는 정적 리시버, Context로 등록하는 동적 리시버가 있습니다.

  • Content Provider

    앱이 저장한 데이터를 다른 앱이 사용할 수 있도록 제공하는 컴포넌트입니다. ContentProvider는 데이터베이스와 유사하게 query, insert, update, delete 등의 API를 제공합니다. ContextContentResolver 를 통해 콘텐츠 제공자 내의 데이터에 액세스할 수 있습니다.

Context

Context는 애플리캐이션 환경에 대한 전역 정보를 접근하기 위한 인터페이스입니다. 추상 클래스이며 실제 구현은 안드로이드 시스템에 의해서 제공됩니다. Context 를 통해 어플리케이션에 특화된 리소스나 클래스에 접근할 수 있습니다. 또한 다른 컴포넌트의 실행, 호출 등의 동작을 수행 할 수 있습니다. Context에 대한 잘못된 참조는 메모리 누수를 발생시킬 수 있습니다.

  • Application context는 앱의 라이프사이클과 연관된 싱글턴 인스턴스입니다.
  • Activity context는 Activity의 라이프사이클과 연관된 context 입니다.

Intent

Intent 는 앱 컴포넌트 간에 작업 수행을 위한 정보를 전달하는 역할을 합니다. 컴포넌트 간의 호출 및 메시지를 전달할 때 사용합니다.

  • 명시적 Intent는 호출될 컴포넌트를 지정하여 호출 대상이 명확한 경우를 말합니다.
  • 암시적 Intent는 Action과 Data가 지정되었지만, 호출 대상이 달라질 수 있는 경우를 말합니다. 해당 인텐트를 처리하는 여러 앱들 중에서 선택할 수 있습니다.

Kotlin

코틀린은 IntelliJ IDEA의 개발사 JetBrains에서 2011년에 최초로 공개한 프로그래밍 언어입니다. Server-side, Android 개발 등 다양한 곳에서 활용되고 있습니다. 주요 특징은 아래와 같습니다.

  • 멀티플랫폼

    Kotlin/JVM은 Java가 구동되는 모든 환경에서 동작이 가능합니다. 컴파일 시 Java 클래스로 빌드되며 JVM에서 동작하기 때문입니다. 코틀린 컴파일러는 기본적으로 Java 6 과 호환되는 바이트코드를 생성합니다.

  • 상호운용성

    자바와 완벽하게 호환이 되며, 자바로 구현된 기존 라이브러리도 활용할 수 있습니다. 코틀린이 자바의 코드를 호출하고, 자바에서 코틀린을 호출하는 것 또한 가능합니다. 단순히 호출만 가능한 것이 아니라 클래스를 상속하거나 인터페이스를 구현하는 것도 가능합니다.

  • 정적 타입 지원

    컴파일 시에 변수의 타입이 결정되며, 문맥으로부터 타입 추론을 할 수 있습니다. 따라서 런타임에 타입 오류가 발생할 확률이 줄어듭니다. 또한 IDE에서 자동 완성 기능을 지원할 수 있습니다.

  • 객체지향 및 함수형 프로그래밍 패러다임 제공

    코틀린은 자바처럼 객체 지향 프로그래밍을 기본적으로 지원하며, 함수형 프로그래밍 방식도 지원합니다.

    함수형 프로그래밍에서는

    1) 함수를 변수에 할당할 수 있으며 
    2) 함수를 파라미터로 넘기는 것이 가능하고
    3) 함수를 리턴 할 수 있습니다.

    즉, 함수가 일급 객체의 특성을 갖고 있습니다.
    또한 같은 인자에 대해 항상 같은 결과를 반환하는 순수함수의 특성 에 착안해서 Side-effect 를 줄이고 간결하며 재사용성이 높은 코드를 작성할 수 있는 장점이 있습니다.
    대표적으로 Lambda와 High-order function을 지원합니다.

  • 널 안정성

    코틀린에서는 타입을 지정할 때 반드시 명시적으로 null 허용 여부를 표기해야 합니다. null 참조를 허용하는 변수의 타입의 바로 뒤에는 ?이 붙습니다, 또한 안전한 호출 연산자인 ?.을 사용할 수 있습니다.
    널 값 허용여부를 컴파일 단계에서 검사하므로 런타임에서 발생하는 NullPointerException을 줄일 수 있습니다.