기술면접 준비

남윤희·2023년 10월 30일
0

kotlin

목록 보기
21/25

난이도 하

-문법

  1. Kotlin이 정적 타입 언어라고 하는데 이유가 무엇일까요?

컴파일 - 빌드 - 런 순서

컴파일 - 코드를 컴퓨터 언어로 바꾸는 작업

빌드 - 컴파일 된 코드를 실제 실행할 수 있게 만드는 빌드

  • 정적인 언어는 한번 선언 해주면 변경하지 않는 타입이어서 실제로 사용 시에 빌드 하기 전에 미리 사용자가 대부분의 수정부분을 알 수 있어 편리성과 안정성이 뛰어나다.
  1. 함수형 프로그래밍과 객체지향 프로그래밍의 차이
  • 함수형프로그래밍은 상태를 제어하기 보다는 빠른 처리속도에 초점을 둔 프로그래밍
    함수 자체가 1급 객체가 된다. 어떤 데이터값의 변경이 필요한 경우, 원본은 유지하고 복사버전을 만들어서 작업한다.

  • 반면에 객체지향 프로그래밍은
    클래스화 시켜서 반복되고, 누락될 수 있는 속성값을 폴더형식으로 지정화하여, 편리성과 정확도를 높인다. 또한 공통된 속성값을 상속하여 유지보수의 편리함도 보장한다. 캡슐화를 통해 오류가능성을 낮춰 안전한 사용을 가능하게 하며 객체들끼리의 상호작용하여 비교적 코드 가독성이 좋다.

-앱개발

1. 안드로이드 activity 생명주기 순서를 설명하세요

  • onCreate() ->액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용됨.
  • onStart() ->액티비티가 사용자에게 보여지기 바로 직전에 호출됨.
  • onResume() ->액티비티가 사용자와 상호작용하기 바로 전에 호출됨.
  • onPaurse() -> 다른 액티비티가 보여질 때 호출됨. 데이터 저장, 스레드 중지 등의 처리를 하기에 적당한 메소드.
  • onStop(),onRestart(액티비티가 멈췄다가 다시 시작되기 바로 전에 호출됨.) ->액티비티가 더이상 사용자에게 보여지지 않을 때 호출됨. 메모리가 부족할 경우에는 onStop() 메소드가 호출되지 않을 수도 있음.
  • onDestroy() ->액티비티가 소멸될 때 호출됨. finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출됨

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


각각의 구성요소는 인텐트를 통해서 상호 통신을 한다.

  • 액티비티(Activity), = UI화면을 담당(View) 안드로이드 어플리케이션은 반드시 하나 이상의 Activity를 가지고 있어야 하고 가장 많이 쓰이는 컴포넌트 이기 때문에 굉장히 중요하다. AppCompatActivity클래스를 상속 받고 있어야 액티비티로 이용 가능. 액티비티에서 규들을 관리하고 다른 액티비티나 뷰를 호출하는 등의 동작 수행.

    • 액티비티의 특징
      • 액티비티는 어플리케이션에서 반드시 하나는 존재해야함.
      • 두개의 액티비티를 동시에 보여줄 순 없음.
      • 액티비티 내에서는 프래그먼트를 통해 분할화면가능.
      • 액티비티 이동시에는 플래그를 주거나 이전 액티비티를 종료하지 않을 경우, 스택 구조로 쌓이게 됨.
  • 서비스(Service), = 화면과 상호작용 없이 백그라운드에서 실행되는 프로세스

    • 서비스의 특징
      • UI가 없음.
      • 한번 시작된 서비스는 애플리케이션이 종료돼도 백그라운드에서 수행중
      • 네트워크를 통해서 데이터를 받아올 수 있음
      • Service클래스를 상속받음
      • 주로 노래 재생, 네트워크 작업,위치 추적, 데이터 동기화 등을 수행
      • onCreate(), onStartCommand(), onBind(), onDestroy()의 생명주기를 가짐.
      • 오래 실행가능하여 메모리제한과 프로세스 우선순위에 영향을 받고, 별도의 스레드를 관리해서 백그라운드 스레드에서 처리하는 것이 좋음.
  • 콘텐트제공자(ContentProvider), = 앱 상에서 데이터를 공유하는 통로 역할, 파일입출력, SQLiteDB, Web등을 통해서 데이터를 관리.

    • ContentProvider의 특징
      • 생명주기를 가지고 있지 않음
      • ContentProvider를 통해 다른 어플리케이션의 데이터도 읽고 쓸 수 있음.
      • uri기반 접근방법으로 다른 앱은 어떤 데이터를 요청하거나 공유할지 지정 할 수 있음.
      • 예를 들면 다른 앱에서 연락처를 불러 올 때, 데이터 액세스 권한 설정하고 데이터 쿼리 및 조작 하면 데이터를 안전하게 공유하고 다른 앱에서 데이터를 읽고 쓸 수 있다.
  • 방송수신자(BroadcastReceiver) = 다양한 시스템의 이벤트가 발생을 할 때, 특정 브로드캐스트를 수신 할 수 있도록 라우팅 하고 메시징등으로 처리하는 컴포넌트.

    • BroadcastReceiver의 특징
      • 시스템 이벤트(배터리 상태 변경,와이파이 연결상태 변경), 사용자 정의 이벤트도 수신 가능
      • 비동기적으로 동작하며, 이벤트가 발생하면 호출
      • Android 시스템 또는 앱에서 이벤트가 발생할 때 인스턴스화되고, 객체가 생성되며 onReceive()가 활성되고 이벤트를 처리 한 후 소멸되는 생명주기를 가짐.
      • Manifest에 등록을 해야 한다.
      • 대부분 UI가 없고 수신기를 통해 이벤트를 감지하고 적절한 작업 수행

난이도 중

-문법

1. enum 은 무엇인가요?

  • 여러곳에 같은 상수를 정의하거나 여러가지 상태나 옵션을 나타낼 때 enum(열거형) class를 사용한다.
    • 예를 들어야 편한 개념인데, 삼성 스토어에서 TV를 판매한다고 했을 때, TV는 가격,인치가 필수항목으로 들어가야 한다고 했을 때, 20개의 티비를 전부 선언하여 관리하면 코드도 길어지고 코드가 누락될 수 도 있고 가독성도 떨어지기에
enum class TV(val price: Int, val Inch: Int)
  amoled(500,000, 29)
  abc(2,000,000 , 40)
  bcd(1,000,000 , 34)

식으로 편하게 하며,

fun main() {
    val aloled = Season.amoled
    val price = amoled.price
    val Inch = aloled.Inch

    println("$aloled 상품은 $price원 이며 화면 크기는 $Inch입니다.")
}

이런식으로 표현이 가능하다

  • 데이터베스와 뭐가 다른가 싶은데, enum클래스는 한정된 목록 중에서만 선택 가능하며, 적용 가능한 값의 목록을 나타내는데 사용되어서 계절, 요일, 상태 등과 같은 열거 형식을 정의하는 데 유용하다.

2. when 은 어떨때 사용하나요?

  • 조건을 걸어놓고 그 조건에 따라 반환 값을 결정할 때 사용 할 수 있다.
    주로 쓰이는 예시는 점수예시인데, 80점부터 100점은 A, 60점부터 79점은 B, 40점부터 59점은 C 그 아래는 D로 지정 해 두어 처리하는 문장이다.

-앱개발

1. Retrofit이란 무엇인가요?

  • 인터넷에서 API를 받아와 앱에 데이터를 편하게 연동 할 수 있는 HTTP 클라이언트 라이브러리이다.
    • retrofit의 특징
      • api앤드포인트로 손 쉽게 데이터를 받아올 수 있다.
      • json,xml등 다양한 데이터 형식을 처리 할 수 있다.
      • 요청을 비동기적으로 처리할 수 있어 메인스레드의 블로킹을 방지할 수 있다.
      • 에러처리를 단수화해서 유저에게 메시지를 전달해준다.

2. 안드로이드에서 사이즈가 큰 이미지를 불러오려고 합니다. 어떤 방법을 사용할 수 있을까요?

  • 사용자의 네트워크 속도를 고려하여 이미지를 비동기적으로 로드하고 Glide 라이브러리등을 통해 캐싱 및 리사이징 합니다.
profile
안드로이드 주니어 개발자

0개의 댓글