본문 바로가기
Android

[Android] 안드로이드 4대 컴포넌트 - 액티비티

by Saerong2 2020. 11. 6.

 

액티비티는 사용자와 상호작용을 담당하는 컴포넌트 입니다. 사용자가 무엇인가를 하기 위해서는 반드시 기기와 상호작용을 해야합니다. 따라서 액티비티는 유저가 앱을 터치하고, 클릭하는 등의 이벤트를 받는 창을 만들어야 합니다.

 

 

# 액티비티 스택

A series of activities

유저의 관점에서 어플리케이션은 처음 시작하는 액티비티로부터 일련의 액티비티들이 이어진다고 볼 수 있습니다. 시스템은 여러 액티비티들을 스택에 넣어 보관하여 사용자의 Context를 저장하게 됩니다. 마치 Context Swtiching이 발생할 때 PCB에 프로세스의 Context를 저장하는 것과 비슷합니다. 액티비티의 스택은 따로 포스팅을 해야 할 중요한 내용이라서 다른 글에서 다루도록 하겠습니다. 간단히 예를 들면 액티비티를 이동하면 이전의 액티비티는 차곡차곡 스택에 쌓여서 뒤로 가기 버튼을 누르면 스택의 가장 위에 있던 이전의 화면(액티비티)을 보여주고 최종적으로 스택이 모두 비게 되면 런처를 보여주게 됩니다. 런처라는 키워드 어디서 본 것 같지 않나요? 맞습니다. Manifest 파일에서 처음으로 실행하는 액티비티를 설정할 때 사용했던 키워드이죠.

 

# 런처와 시작 액티비티

 

런처는 안드로이드에서 홈 화면의 인터페이스를 관리하는 하나의 앱이라고 볼 수 있습니다. 기기에 앱을 설치하면 런처에 앱이 보이게 됩니다. 런처에 보이는 앱을 실행하면 런처는 처음으로 실행할 액티비티가 무엇인지 어떻게 알고 첫 화면을 보여주는 걸까요?

 

Manifest파일을 보면 앱을 위한 여러가지 태그들이 있습니다. 그 중에서도 액티비티 태그 안에는 런처에게 정보를 주는 인텐트 필터 태그가 있습니다. 이 태그를 통해서 해당하는 액티비티가 런처에 등록되어 런처가 액티비티를 실행시킬 수 있는 것 입니다.

 

# 액티비티와 뷰

안드로이드 프레임워크는 사용자가 실제로 마주하고 상호작용하는 화면인 UI를 만드는 다양한 도구들을 제공합니다. 액티비티는 사용자의 정보를 보여주고 사용자와 상호작용하기 위해서 여러 뷰들을 만듭니다. 액티비티는 다양한 뷰를 가질 수 있고 이를 통해 화면에 무엇을 어디에 어떻게 보여줄지 정할 수 있습니다.

 

## 위젯과 레이아웃

뷰는 크게 두 가지 타입으로 나눌 수 있습니다. 첫째, 눈에 보이는 뷰를 위젯이라고 하며 TextView, ImageView, Button 등 주로 사용자와 상호작용하는 뷰들이 여기에 속합니다. 둘째, 눈에 보이지 않지만 여러 개의 뷰들을 포함하여 그 뷰들을 화면에 배치할 수 있도록하는 뷰를 레이아웃 또는 컨테이너뷰 라고 합니다. 레이아웃이라는 뷰 안에 또 다른 여러 개의 뷰가 들어갈 수 있는 것이지요. LinearLayout, FrameLayout, ConstraintLayout 등이 여기에 속합니다. 기본적으로 제공되는 뷰 외에도 필요에 따라 커스텀 뷰를 만들 수도 있습니다.

 

## 레이아웃과 XML

안드로이드는 모든 레이아웃 파일을 XML 형식으로 저장하며 XML 태그를 통해서 어떤 종류의 뷰 객체를 UI가 만들지 정합니다. XML의 속성을 통해 textSize, color, padding, 레이아웃의 위치 등 뷰 마다 갖는 다양한 속성을 조절할 수 있습니다. 액티비티는 뷰를 통해 사용자와 상호작용을 하기 위한 컴포넌트 이므로 하나의 액티비티는 최소 하나의 XML파일과 쌍을 이룬다고 볼 수 있습니다.

어플리케이션을 컴파일 하면 R이라는 클래스가 생성됩니다. R 클래스는 레이아웃의 XML을 포함하여 Res 폴더안의 다양한 리소스들을 동적으로 식별할 수 있는 상수를 만들어 줍니다. 예를 들어 Res-layout에 activity_my.xml이라는 이름의 레이아웃을 작성했다면 이는 컴파일 되어 R.layout.activity_my 와 같은 이름의 상수(일종의 Id)가 만들어지고 이 이름을 통해 식별할 수 있습니다. 이렇게 XML으로 작성된 뷰는 액티비티의 onCreate()안에서 setContentView 메서드에 R.layout.activity_my와 같은 형태로 XML 파일의 reference를 넘김으로써 XML 파일 안의 각 태그에 대해 뷰들을 객체화 하고 메모리에 올리게 됩니다. 뷰에 관련된 보다 자세한 내용은 공식 문서에서 찾아볼 수 있습니다.

 

# 액티비티의 생명주기

액티비티는 생성부터 소멸까지 자신만의 수명주기를 갖고 이는 안드로이드 프레임워크의 시스템에서 관리하기 때문에 개발자는 오직 수명주기에 따라 호출되는 콜백함수를 오버라이딩하여 필요한 작업을 수행하므로써 액티비티를 관리 할 수 있습니다. 따라서 액티비티가 언제 어떠한 상태가 되며 어떠한 콜백함수를 호출하는지 아는 것은 아주 중요하며 액티비티를 잘 다룰 수 있는 기초가 됩니다. 액티비티의 수명주기 대해서는 이전 포스팅을 참고해주세요.

 

 

 

 

# 참고

Udacity - ud851

댓글