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 |