-
Android Components(안드로이드 구성요소)Android/Concept 2019. 8. 3. 22:15
이번에는 안드로이드의 구조가 아닌, 안드로이드 앱 자체가 어떻게 구성이 되어 있는지 그 요소들에 대해 알아보겠습니다!
먼저 위와 같이 4개가 가장 기본적이고도 대표적인 안드로이드의 컴포넌트들 입니다. 왜 그림엔 5개 인데 4대 구성요소냐구요? 저 가운데에 인텐트(Intent)는 빼고 얘기하는 겁니다!
그럼 각각 어떤 역할을 하는지 살펴봅시다.
Activity(액티비티)
안드로이드 프로그래밍을 해보셨다면 꽤나 익숙한 요소입니다. 대략적으로 한 화면을 담당한다고 느껴지죠.
맞습니다. 액티비티는 UI를 담당하며, 스마트폰 스크린으로 유저와 상호작용을 담당하는 컴포넌트입니다! 코딩을 위해서 프로젝트를 만들면 가장 먼저 MainActivity가 있죠. 이 처럼 가장 기본적인 구성요소이며, 필수적인 요소입니다.
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
Activty 클래스를 상속하여 사용됩니다.
- 안드로이드 앱은 반드시 하나이상의 Activity를 가지고 있어야 함
- 두 개의 액티비티를 동시에 표시할 수 없음
- 액티비티 내에 Fragment를 추가하여 화면을 분할시킬 수 있음
화면을 담당하는 놈이라서 실제 코드를 살펴보면 View들을 추가하거나, 또는 xml 파일을 불러와서 화면에 inflate하는 코드들을 볼 수 있죠!
참고로 Activity 상속이 아니라 실제로 보면 AppCompatActivity로 상속하는 경우가 있습니다. 이 차이는 API 버전 때문에 발생합니다! AppCompatActivity가 하위 버전 API들을 지원 해 주는 클래스입니다. Activity는 최신 버전 지원입니다.
그래서 예를 들자면 ActionBar 같은 것이 안드로이드 3.0 미만은 지원 안 한다고 할 때, AppCompatActivity를 써서 지원 하게 해주는 느낌입니다.
Service(서비스)
뭔가 서비스업의 서비스가 생각나는군요. 서비스는 안드로이드의 백그라운드에서 돌아가는 프로세스를 뜻합니다. 그래서 프론트인 화면에는 서비스라는 화면이 존재하지 않습니다. 보통 음악 앱이 백그라운드에서 재생되거나, 만보기 같은 기능이 백그라운드에서 걸음 수를 측정하거나 등이 대표적인 서비스의 예 입니다.
서비스 특징 중 하나가 강제로 서비스를 코드로 끄지 않는 한, 자기가 맡은 바를 끝까지 수행 해 낸다는 점 입니다. 물론 예외적으로 메모리가 부족하거나 등으로 강종시켜 버리지 않는 이상... 군인 정신이죠.
여튼 그래서 왠만하면 켜고 끄는걸 잘 지정 해 주어야 하는 놈 입니다! 아 그리고 안드로이드에서는 백그라운드에서 돌리는 방법이 현재 설명하는 Service, 그리고 비동기 스레드인 AsyncTask가 있습니다. 이 차이점은 나중에 글로 쓸 것 같긴 하지만, 대충 설명드리자면 (메인 쓰레드인지 아닌지/앱 죽을 때 같이 죽는지 아닌지) 정도로 요약 해 볼 수 있습니다. 자세한 건 검색!
public class MyService extends Service { }
Activity와 마찬가지로 Service 클래스를 상속해서 사용!
Content Provider(콘텐트 제공자)
데이터들을 관리하고 제공하는 놈입니다. 여기서 데이터라 함은 주로 안드로이드 자체에 내장되어 있는 데이터베이스인 SQLite를 뜻합니다. 그래서 다른 앱들의 데이터도 가져 올 수가 있는데요,
대표적인 예로는 내 스마트폰에 저장된 연락처 가져오기, 또는 mp3앱의 재생목록 가져오기 등이 있습니다. 그래서 카카오톡이 내 연락처 장부를 Content Provider로 가져와서 막 연동시키는 겁니다.
얘는 위의 두놈과는 달리 클래스로 상속하거나 하지 않습니다. 대신 getContentResolver()와 같은 함수들로 인스턴스를 얻거나 합니다.
Broadcast Receiver(방송 수신자)
방송을 수신 해 주는 구성요소입니다! 방송이란 저희가 생각하는 방송이랑 비슷한 개념입니다. 대표적인 예로 배터리 부족, 셀룰러 데이터 끊김, 와이파이 끊김, SMS 문자 알림 등과 같은 일종의 방송? 들을 우리에게 알려주는 역할을 합니다.
그럼 '얘는 스마트폰의 기본 아니냐! 얘를 우리가 위에 애들처럼 어떻게 사용하는데?' 라는 의문이 드실겁니다.
자. 위에 여러 방송들을 대신 수신 해 준댔죠? 그래서 앱에서 사용하는 예로는 SMS로 인증코드 날라왔을 때 사용자가 귀찮게 코드 번호 옮겨 적는게 아니라, 바로 앱에서 인식하여 코드를 대신 입력 해 주는 경우가 있습니다!
얘도 Activity나 Service처럼 클래스 상속하여 구현 하실 수도 있구요,
public class MyBroadCastReceiver extends BroadcastReceiver
또는 익명 클래스를 구현하는 방법도 있다고 합니다.
Intent(인텐트)
얘는 위의 4가지 구성요소들을 아우르는? 관리하는? 그런 관망하는 자 입니다. 그래서 위의 요소들의 정보를 어딘가에 담아서 넘기거나 이동 할 때 Intent에 넣어줍니다.
가장 와닿는 예로는 코딩할 때 Activity 화면 이동 시 입니다.
Intent intent=new Intent(MainActivity.this,SubActivity.class); startActivity(intent);
이 외에도 startService(), bindService(), broadcastIntent()와 같은 여러 기본 구성요소들을 관리 할 수 있는 핵심 요소입니다!
자. 안드로이드 앱의 기본 구성요소 4가지에 대해 보았는데요, 사실 안드로이드 앱의 구성요소는 훨씬 더 많은 요소들로 이루어져 있습니다.
하하. 저것들도 언젠가는 글로 다 남겨놔야겠죠..!
'Android > Concept' 카테고리의 다른 글
Android about Context (안드로이드 Context에 대하여) (1) 2019.08.07 Android Life Cycle of Activity(안드로이드 액티비티 생명주기) (0) 2019.07.30 Android Architecture(안드로이드 구조) (1) 2019.07.26