본문 바로가기
Android Q&A/Android One a day

[안드로이드 면접] - 18 :

by Jman 2023. 2. 20.

1. 뷰를 구성하는 레이아웃은 XML 파일 기반으로 구성되어있다. 왜 그런지 한 번 생각해봤는가?

더보기

사용자 이벤트를 받아, 동작을 제어하는 코드로부터 따로 표시하기가 더 좋다.

또한, UI 의 구조를 시각화하기가 쉽다.

- 레이아웃 코드와 비즈니스 로직 코드가 완전히 분리가 됨으로써 개발자와 디자이너의 역할 분담 또한 가능하다.

- 자바나 코틀린 코드로 레이아웃을 작성했다면, 레이아웃 변경할 때마다 소스를 재 컴파일을 해야할 것이다. 반대로 레이아웃만 수정 시에 코드를 컴파일하지 않아도 되므로 개발 속도 향상이 있다.

 

2. Context 란 무엇인가?

더보기

컨텍스트는 말 그대로 맥락이라는 뜻으로 애플리케이션 환경을 알고있는 인터페이스라고 말할 수 있다.

쉽게 말해서 컨텍스트를 이용하면 getPackageName(), getResource(), startActivity(), startService(), getSystemService()와 같이 시스템 레벨의 정보를 얻을수 있는 메소드를 쓸수 있다.

 

컨텍스트를 4가지로 정리하자면?

  • 애플리케이션의 현재 상태를 나타낸다.
  • 액티비티와 애플리케이션의 정보를 얻기 위해 사용한다.
  • 리소스, 데이터베이스, 프리퍼런스 등에 접근하기 위해 사용한다.
  • 액티비티와 애플리케이션 클래스는 Context 클래스를 확장한 클래스이다.

컨텍스트는 두 가지로 나뉜다.

  • Application Context
  • Activity Context

Application Context

싱글턴 인스턴스이며, getApplicationContext() 를 통해 접근할 수 있다. 애플리케이션 라이프사이클이며, 현재 컨텍스트가 종료된 이후에도 컨텍스트가 필요한 작업이나, 액티비티 스코프를 벗어난 컨텍스트가 필요한 작업에 적합하다.

하지만, 대부분 GUI(화면, View 등) 작업은 할 수 없다. 예를 들어, Application Context 를 이용하여 다이얼로그 창을 띄우게 된다면 에러를 만나게 된다.

 

Activity Context

액티비티 Context 는 액티비티 내에서 유효한 컨텍스트다. 이 컨텍스트는 액티비티 라이프사이클과 연결되어 있다. 액티비티 컨텍스트는 액티비티와 함께 소멸해야 하는 경우 사용한다. 

 

항상 가깝고 밀접한 스코프의 Context 를 용하자.

 

3. Manifest 를 설명하시오

더보기

안드로이드 애플리케이션에 대한 각종 정보를 기술한 애플리케이션 명세서이다.

가장 상위 폴더에 위치하여 앱이 실행되기 전에 시스템이 알아야 할 내용을 정의하고, Google Play 에 앱에 관한 필수 정보를 설명한다. AndroidManifest.xml 파일에 작성되어 있다.

 

매니페스트 구조

  • <manifest> : 패키지
  • <application> : 컴포넌트
  • <users-permisson> : 권한
  • <users-feature> : 기기호환성
<?xml version="1.0" encoding="utf-8"?>
<manifest>

    <application>
        <activity>
            <intent-filter>
                <action />
                <category />
            </intent-filter>
        </activity>
    </application>
    
    <uses-permission />
    
    <uses-feature />

</manifest>

 

Package

앱의 식별자인 패키지 정보를 등록한다. 

매니페스트 파일의 Root element 에는 패키지네임을 반드시 기재 해야 한다.

패키지 네임은 우리가 앱을 빌드하여 APK 를 추출하는 과정에서 사용되게 된다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package=“com.example.myapplication”
    android:versionCode="1"
    android:versionName="1.0" >
    ...
</manifest>

 

App Component

안드로이드에는 4대 컴포넌트가 존재하는데, 앱에서 컴포넌트를 사용하기 위해서는 Manifest 파일에 XML 요소를 선언해줘야 한다. 

  • <activity> 
  • <service> 
  • <receiver>
  • <provicer>
<manifest>
    <application>
    
        <activity android:name=".MainActivity">
        
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            
        </activity>
        
    </application>
</manifest>

Permissions

안드로이드 앱은 민감한 사용자 데이터 또는 특정 시스템 기능에 엑세스하기 위한 권한을 요청해야 한다. 예를들면, 카메라 접근권한 위치, 인터넷, 전화걸기, 연락처 접근 등등이 존재한다.

<manifest ... >
    <uses-permission android:name="android.permission.SEND_SMS"/>
    ...
</manifest>

 

 Device Compatibility

앱이 필요로 하는 하드웨어나 소프트웨어 특징을 명시할 수 있다.

예를들어, 카메라 앱을 만들경우, 카메라가 필수로 있어야 하니 카메라가 있는 기기에서만 플레이스토어 에서 해당 앱이 다운로드 될 수 있도록 명시하는 것이다.

 

만약, 카메라가 없는 기기에서 해당 앱을 설치를 할 경우, 다운로드 받을 수 없는 기기라는 문구가 뜰 것이다.

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

 

 

 

 

 

 

'Android Q&A > Android One a day' 카테고리의 다른 글

[안드로이드 면접] - 20 :  (0) 2023.02.24
[안드로이드 면접] - 19 :  (0) 2023.02.24
[안드로이드 면접] - 17 :  (0) 2023.02.18
[안드로이드 면접] - 16 :  (1) 2023.02.17
[안드로이드 면접] - 15 :  (0) 2023.02.15