운기의 블로그
#1. 안드로이드 개발자 가이드 앱 기초 본문
1. 포스팅 읽는 방법
본 내용은 다른 개발은 해봤지만, 안드로이드를 처음 배우는 사람들이 쉽게 이해할 수 있도록 안드로이드 개발자 가이드를 바탕으로 설명할 것입니다.
문서의 내용을 전부 다루지는 않을 것 입니다.
큰 흐름 속에서 중요한 항목을 위주로 설명 할 것이기 때문에, 개발자 가이드 문서를 켜 두시고, 포스팅 된 내용을 읽다가 궁금한 부분이 있으시면 검색해 보시면서 보는 것을 추천 드립니다.
2. 목차
앱 기초
- 소개
- 첫 앱 빌드
- 앱 구성 항목
- 앱 리소스
- 앱 매니페스트
- 권한
위의 목차들은 안드로이드 앱은 어떻게 구성되어 있는지에 대한 내용으로 이루어져 있습니다.
" 최소한의 항목은 매니페스트 파일, 리소스의 레이아웃, 액티비티"
첫 앱 빌드하기에서는 안드로이드 앱을 구성하는데 최소한으로 필요한 요소들에 대해서 설명을 하고 있습니다.
"Hello world"를 화면에 보이기 위해서 필요한 항목은 매니페스트 파일, 리소스의 레이아웃 xml 파일, 액티비티, 이 3개의 항목만 있다면 우리는 가장 기초적인 앱을 만들수 있습니다. 그러면 3개의 항목을 잘 기억해두시고 이후에 내용에서는
3개의 항목을 보다 자세히 다루도록 하겠습니다.
그럼 이제부터 시작하겠습니다.
3. 본문
안드로이드 앱이란 안드로이드 운영체제 위에서 어떤 업무를 해결하기 위한 목적을 가지고 실행되는 프로그램입니다.
예를 들면 카카오톡은 메신저를 보내기 위한 목적, 멜론은 노래를 듣기 위한 목적 입니다.
" 앱을 구성하는 항목은 컴포넌트, 매니페스트 파일, 리소스"
이런 목적을 가지고 있는 안드로이드 앱은 3가지 항목으로 구성되어 있습니다.
3가지 항목은 컴포넌트, 매니페스트 파일, 리소스 입니다.
컴포넌트는 앱을 구성하는데 있어서 가장 핵심 요소 입니다.
앱의 기능을 담당하고 있고, 코드로 작성되어 있습니다.
매니페스트 파일은 시스템이 앱이 가지고 있는 모든 정보를 읽을 수 있는 명세서 역할을 하는 파일입니다.
매니페스트 파일에 들어가야 하는 내용은 패키지명과 어떤 컴포넌트를 사용하는지에 관한 내용은 필수적으로 들어가야 합니다.
리소스는 앱이 사용하는 이미지, 동영상, 문자열과 같은 콘텐츠를 말하고, 주로 컴포넌트의 시각적인 부분을 담당하고 있습니다.
" 가장 중요한 항목은 컴포넌트 "
다시 정리하면 매니페스트 파일은 시스템이 컴포넌트를 실행시키기 위해 확인하는 항목이고, 리소스는 컴포넌트의 시각적인 요소를 담당하는 항목, 그리고 컴포넌트는 매니페스트파일과 리소스의 도움을 받아 앱을 실행시키는 항목이라고 보시면 됩니다.
그럼 3개의 항목에 대해 좀 더 자세히 알아보도록 하겠습니다.
먼저 알아 볼 항목은 가장 중요한 컴포넌트 입니다.
컴포넌트는 앱이 시작되는 지점이면서 뚜렷한 기능을 가지고 있습니다.
이 기능에 따라 액티비티, 서비스, 브로드캐스트 리시버, 콘텐츠 프로바이더로 나누어집니다.
액티비티는 사용자와 상호작용을 할 수 있는 화면을 제공 하는 컴포넌트입니다.
서비스는 앱이 종료되더라도 사용자가 볼 수 없는 곳에서 앱을 계속해서 실행 시켜주는 컴포넌트 입니다.
브로드캐스트 리시버는 시스템이나 앱에서 발생한 알람을 받아 처리하는 컴포넌트입니다.
콘텐츠 프로바이더는 개발자 또는 내가 만든 앱의 데이터를 다른 앱에 제공하는 걸 도와주는 컴포넌트 입니다.
" 액티비티는 가장 중요한 컴포넌트 "
4개의 컴포넌트 중 사용자와 상호작용을 하고 사용자에게 화면을 제공하는건 유일하게 액티비티 밖에 없습니다.
첫 앱 빌드에서도 봤듯이 액티비티만 존재해도 앱을 구성하는데 큰 무리가 없는 거 처럼 4개의 컴포넌트 중 가장 중요한 컴포넌트라고 할 수 있기 때문에 액티비티에 대해 좀 더 알아보도록 하겠습니다.
(서비스, 브로드캐스트리시버, 콘텐츠 프로바이더가 중요하지 않다는 이야기는 아닙니다 !! 꼭 찾아서 확인해 보세요!!)
액티비티는 사용자의 입력이나 터치 등 이벤트를 받을 수 있는 하나의 앱 화면입니다. 이 화면은 리소스의 레이아웃 폴더에 있는 XML 파일의 도움을 받아 사용자가 볼 수 있는 화면을 완성시킬 수 있습니다. 레이아웃의 도움을 받은 액티비티는 사용자와 상호작용을 할 수 있는 버튼과 같은 위젯( = 뷰 )와 이런 뷰의 위치를 정해주는 뷰 그룹으로 이루어집니다.
이렇게 구성된 액티비티는 앱에 적어도 하나 이상은 존재합니다. 그리고 여러개의 액티비티는 사용자와의 상호작용으로 인해 현재 보고 있는 액티비티에서 다른 액티비티를 활성화 시킵니다.
(여기서 활성화란 , 현재 보고 있는 액티비티가 아닌 다른 액티비티들은 보이지 않는 상태인데, 사용자에 의해서 보이지 않던 액티비티가 보이게 되는데 이런 현상을 표현 한것입니다.)
활성화가 되는 액티비티는 2가지 종류가 있는데,
현재 사용하고 있는 액티비티와 같은 앱에 속하는 액티비티 이거나 다른 앱에 속한 액티비티 입니다.
같은 앱에 속한 액티비티라는 말은 아래 이미지를 보시면 쉽게 이해 하실 수 있습니다.
카카오톡에는 여러 액티비티들이 존재하고 아래에 보이는 사람모양, 대화, #, 별표, ... 을 클릭하면 이런식으로 해당 액티비티가 보여지는 걸 볼 수 있습니다.
다른 앱에 속한 액티비티는 아래의 이미지를 보시면 됩니다.
카카오톡에서는 촬영이라는 기능이 있습니다. 촬영은 카카오톡 내부에 카메라 기능이 있는게 아니라, 안드로이드 기기에 있는 카메라 앱에 있는 촬영하는 액티비티를 활성화해서 사용하는 것 입니다.
" 액티비티를 활성화시키는 방법은 인텐트"
현재 사용하고 있는 액티비티에서 다른 액티비티를 활성화할 때, 액티비티가 직접 다른 액티비티를 활성화 시키는 것은 아닙니다. 안드로이드 앱은 인텐트(Intent)를 사용해서 시스템에게 액티비티의 실행을 요청하는 정보를 담은 메세지입니다.
( 액티비티를 중심이기 때문에 액티비티의 실행을 요청한다고 썻지만 실제로는 컴포넌트( 액티비티, 서비스, 브로드캐스트리시버) 를 활성화 시키는 것입니다. )
액티비티를 실행하는 방식은 위에서 말했던 거처럼 앱 내부의 액티비티를 활성화하는 방법과 앱 외부에 있는 액티비티를 활성화하는 방법이 있습니다.
전자의 방식을 명시적 인텐트라고 말하고, 후자의 방식을 암시적 인텐트라고 말합니다.
그럼 명시적 인텐트부터 알아보도록 하겠습니다.
명시적 인텐트는 주로 같은 앱 안에서 액티비티를 활성화 시킬 때 사용합니다.
사용 법은 내부 액티비티의 위치를 정확하게 기입하는 것입니다.
암시적 인텐트는 다른 앱의 액티비티를 활성화 시킬 때 사용합니다.
현재 실행되고 있는 액티비티에서는 다른 앱의 액티비티의 이름을 알 수 없습니다.
그렇기 때문에 암시적 인텐트로 처리할 작업을 담아 시스템에게 알려주면,
시스템에서는 활성화 될 수 있는 액티비티를 가진 앱들을 사용자에게 제공해 줍니다.
"암시적 인텐트는 인텐트 필터가 처리"
여기서 궁금한 점이 생길 것입니다. 어떻게 시스템은 암시적인텐트를 처리해서 가장 적합한 앱들을 제공해 주는가?
이러한 방법이 가능한 이유는 인텐트 필터의 도움 때문입니다.
인텐트 필터에 대해서 좀 더 이해하기 쉬울려면 관점을 바꿔야 합니다.
그 동안의 관점은 사용 중인 액티비티를 중심으로 다른 액티비티(= 활성화 될) 를 바라 보고 있었다면,
잠깐 다른 액티비티(= 활성화 될)가 중심인 관점으로 변해야 합니다.
인텐트 필터는 다른 앱(= 사용 중인 액티비티)에서 전달 된 암시적 인텐트가 액티비티를 활성화 시킬 수 있는지
판별 하고, 활성화 시킬 액티비티가 존재한다면 그 앱을 사용자에게 제공해주는
지금 까지 컴포넌트와, 컴포넌트의 액티비티에 대한 설명을 했습니다.
다음으로는 리소스에 대해서 설명하겠습니다.
"리소스의 가장 큰 특징은 코드와 분리되어서 관리"
안드로이드 앱은 코드 + 리소스로 이루어져있습니다.
리소스가 가진 가장 큰 특징은 앱에서 코드는 리소스와 분리되어서 관리된다는 점입니다.
이렇게 관리하게 되면 코드를 바꾸지 않아도 리소스의 변경만으로 앱을 관리 할 수 있고, 그뿐만 아니라 다양한 기기나 현지 언어에 맞춰 앱을 유연하게 관리 할 수 있습니다.
그럼 리소스에 어떤 항목이 있는 지 확인해보겠습니다.
그림 9는 리소스의 구성을 보여 줍니다.
리소스는 주로 컴포넌트의 시각적인 부분을 담당하고 그 중에서도 액티비티에 많은 연관을 가지고 있습니다.
액티비티의 이미지를 담당하는 drawable, 액티비티의 레이아웃을 담당하는 layout, 컴포넌트의 속성인 values, 아이콘 해상도를 담당하는 mimap으로 이루어져 있습니다. 그 이외에 애니메이션, 메뉴와 같은 디렉토리도 있습니다.
이렇게 구성되어있는 리소스를 가지고 다양한 기기나 현지 언어 맞춰 앱을 관리하는데 무리가 있습니다.
이런 상황을 대처하기 위해서 대체 리소스를 제공해 앱을 유연하게 관리 할 수 있습니다.
마지막으로 매니페스트 파일에 대해서 알아보겠습니다.
" 매니페스트 파일은 명세서 "
매니페스트 파일은 앱 id, 플레이스토어 버전, 권한, 액티비티와 같은 컴포넌트에 대한 정보를 갖고 있는 파일로,
컴포넌트를 실행시킬 때 항상 매니페스트 파일에서 실행할 컴포넌트를 확인하는 역할을 합니다.
매니페스트 파일은 아래와 같이 구성되어 있습니다.
매니페스트 파일에는 다양한 태그가 존재하지만 그 중에서도 중요한 태그는 <manifest>, <application>, <component> 입니다.
시스템이나 구글 스토어가 어떤 앱인지 알 수 있게 해주는 패키지 명을 manifest 태그에 작성해줍니다.
앱의 세부정보를 선언하는 application 태그
앱에서 사용할 컴포넌트를 선언하는 <component> 태그 입니다
(여기서는 액티비티를 선언했습니다)
그 이외에도 사용자 권한과 사용할 기기에 대한 권한, 위에서 설명했던 인텐트 필터를 선언할 수 있습니다.
4. 마무리
문서에 있는 내용을 전부 꼼꼼하게 다루지는 않았습니다.
초보자들을 위해서 가장 큰 흐름에서만 작성한 포스팅이고, 흐름 속에서 필요한 내용을 꼭 찾아 보시길 바랍니다.
'안드로이드' 카테고리의 다른 글
#3. 안드로이드 개발자 가이드 핵심주제, 사용자 인터페이스 (0) | 2020.08.02 |
---|---|
#2. 안드로이드 개발자 가이드 핵심주제, 액티비티 (0) | 2020.07.04 |
자바로 keyHash 구하는 소스 (0) | 2020.05.14 |
#6. 나만의 메모장 만들기 메모 클릭 시 작성된 메모 보기 / 메모 수정 / 메모 ROOM UPDATE / JAVA로 구현 (0) | 2020.04.07 |
#5. 나만의 메모장 만들기 / Database에 저장된 내용 리사이클러뷰에 바로 update 하기 / 리사이클러뷰 아이템 삭제 및 ROOM, 로컬DB에서 삭제하기 / JAVA (0) | 2020.03.30 |