상세 컨텐츠

본문 제목

Android Studio 및 디버깅 도구 활용(세미나)

공부/안드로이드

by dofury 2024. 1. 18. 22:43

본문

728x90

 

이번 시간에는 안드로이드 대표 IDE인 Android Studio,

Android Studio에서 사용하는 디버깅 도구에 대해서 공부해보겠습니다

다른 내용을 공부하기 전에 앞으로 공부나 개발하면서 자주 사용할 녀석이기 때문에 중요하다고 생각했습니다.

 

 

순서로는 저번 세미나에서 받은 질문에 대한  답변을 하는 시간을 가진 뒤,

안드로이드 스튜디오 프로젝트 구조,

프로그래밍과 디버깅시 도움되는 내용을 설명하는 시간을 가지겠습니다.

 

 

Q&A 시간에 질문받았던 내용인데 답변을 하지 못해서  학습하고 왔습니다.

우선 안드로이드가 JVM 방식대신 ART를 쓰는 이유를 설명하기전에

저 번시간에 내용을 부연설명하겠습니다.

JVM이 JIT 방식을 따르고 있습니다.

그렇기 때문에 현재 ART는 AOT 방식을 베이스로 JIT를 같이 사용함으로

성능향상과 이에 따른 배터리 효율을 얻을 수 있는 이점이 있습니다.

 

다음으로는 액티비티가 회전할 경우 생명주기에서 onDestory()를 호출하고,

새로운 인스턴스에서 onCreate()를 호출하게 됩니다.

이 때 파괴되면 메모리에서 사라지는데 어떻게 전달이 되냐는 질문이였습니다.

 

우선 기존 액티비티의 파괴는 관련이 없으며, 메모리에서 바로 사라지는것은 아니고

Garbage Colletion을 통해 언젠가 사라진다는 표현이 맞습니다.

 

기존 액티비티는 파괴되기전 onSaveInstanceState()를 호출하여 번들 객체에 저장하고,

이 번들객체가 새로운 액티비티에서 onCreate를 호출할 시 매개 변수로 전달 됩니다.

이 번들을 전달하는 과정은 안드로이드 OS에서 이루어집니다.

 

또한, 번들로 전달하는게 액티비티와 상관 없다는건 액티비티와 번들의 패키지 이름에서도 유추가 가능합니다.

 

 

안드로이드 스튜디오는 구글이 제공하는 안드로이드 앱 IDE 입니다.

IDE 인만큼 여러 기능 등을 제공하고 있습니다.

 

 

안드로이드 어플리케이션 프로젝트 구조에 대해서 알아보겠습니다.

크게 3가지로 나뉩니다.

  • 안드로이드 앱 모듈
  • 라이브러리 모듈
  • 구글 앱 엔진 모듈

기본적으로는 프로젝트 생성시 안드로이드 앱 모듈만 존재하며,

안드로이드 앱 모듈에서는

앱 구성정보가 담긴 Manifests, Java나 Kotlin 코드가 있는 Java, 리소스나 값 파일이 있는 res로 나뉩니다.

 

또한 전반적인 설정을 적어 둔 Gradle Scripts가 존재하는데

크게 프로젝트수준에서 하나, 존재하는 모듈 별로 하나씩 존재합니다.

 

 

특히 매니페스트는 중요한 내용이니 더 자세하게 알아보겠습니다.

안드로이드 매니페스트 파일은 앞서도 말했다시피 앱의 구성정보를 담고 있는 문서이며

  • 앱의 패키지 이름
  • 앱의 구성요소(어플리케이션, 4대 컴포넌트)
  • 앱에 필요한 권한
  • 앱에 필요한 하드웨어 및 소프트웨어

등이 담겨져 있습니다.

 

 

어플리케이션은 어플리케이션에 대한 여러 속성및 설정을 정의하며,

어플리케이션 태그내에는 4대 컴포넌트 태그들을 포함합니다.

 

또한 어플리케이션은 name 속성을 통해 어플리케이션 클래스를 정의할 수 있습니다.

앱의 전역 상태 및 설정을 관리하는데 사용되며, 어플리케이션 클래스를 상속받아 구현 됩니다.

 

중요한 점은 어플리케이션은 4대 컴포넌트를 포함하는 만큼 먼저 생성되는 특징이 있습니다.

 

 

패키지 이름은 앱을 식별하는 유일한 이름입니다.

그래서 앱 패키지 이름은 마켓 등록 시 충돌 방지를 위해 고유 해야 합니다. 

그와 마찬가지로 앱 내부에 있는 파일들의 패키지 이름들도 내부에서 서로 다릅니다.

 

패키지 이름은 리소스, 권한 ,컴포넌트, 인텐트 필터 등을 식별하는데 사용합니다.

예를 들어 리소스 접근 시 사용하는 R클래스에서는 이를 네임 스페이스로 사용하여 리소스에 접근합니다.

또한 상대경로 표현방식도 앱 패키지이름이 있기에 가능합니다.

 

 

어플리케이션 태그 내부에는 4대 컴포넌트를 선언 합니다.

선언 되지 않으면 시스템에서 인식 할수 없기에 컴포넌트를 시작할 수 없습니다.

 

 

저번 시간에 설명했던 인텐트 필터 입니다.

4대 컴포넌트는 인텐트로 활성화 되며,

인텐트 필터는 4대 컴포넌트 태그 내부에 사용 됩니다.

컴포넌트는 이를 여러 개를 가질 수 있으며, 각 컴포넌트가 어떤 인텐트를 수용할지 정의합니다.

 

 

펄미션은 앱의 특정 기능에 액세스 할 때 필요한 권한을 명시할 때 사용합니다.

 

권한이 없으면 액세스가 불가능하여 기능을 사용할 수 없습니다.

또한 필요에 따라 새로운 권한을 만들어 낼 수 도 있고,

이 권한이 다른 앱에서 정의한 권한이면 이를 사용해 앱의 기능을 확장할 수 있습니다.

 

 

기기 호환성은 앱에 필요한 하드웨어 또는 소프트웨어 기능을 명시적으로 선언하는 것을 의미합니다.

이를 활용하면 예를 들어 특정 기능을 앱에서 사용하는데,

기기 종류나, 안드로이드 버전 등의 이유로

해당 기능을 사용할 수 없는 스마트폰에서는 스토어에서 이 정보를 바탕으로 설치를 할 수 없게 합니다.

 

 

앱 개발시 개발 시간을 줄여줄 수 있는 안드로이드 스튜디오 기능 입니다.

선언형 UI방식인 Compose를 사용해서 구현할 시

Preview함수를 사용하지 않으면 매번 빌드를 해야하는 단점이 있었습니다.

 

 

허나 Android Studio HedgeHog 버전부터 Live Edit을 지원하며,

GIF를 보시면 클릭 한번으로 실시간 화면 업데이트가 가능합니다.

 

 

디버깅을 해보신 분들이라면 빨간 중단점은 익숙 하실 겁니다.

안드로이드 스튜디오에서는 이를 우클릭 할시 뜨는 창에서 조건을 넣어

무조건 중단하는게 아니라 조건에 부합할시 멈추게 할 수 있습니다.

 

또한 노란 점은 생소하실 수 있습니다.

Shift + Click 을 통해 찍을 수 있으며, 중단 지 않는 점을 의미합니다.

 

이를 활용하면 코드를 사용하지 않고도 로그를 찍을 수 있어

나중에 로그를 따로 지워주거나 하지 않아도 되는 장점이 있습니다.

 

당연히 이는 디버그 모드에서만 동작합니다.

 

 

안드로이드 스튜디오에서는 앱 인스펙션 도구를 지원합니다.

이를 통해 SQLite 기반인 내장 DB, 네트워크, 백그라운드 작업을 검사할 수 있습니다.

 

특히 내장 DB는 애뮬레이터가 아니면 확인하기 어려웠는데 이를 사용하면 편하게 검사할 수 있습니다.

 

 

당연히 레이아웃 문제를 검사할 때 사용할 수 있는 레이아웃 인스펙션도 지원합니다.

주로 XML을 사용하지 않고 코드나 Compose를 사용한 동적 레이아웃 사용시에 유용합니다.

 

왼쪽에 있는 Component Tree에서 뷰의 계층 구조를 확인 할수 있으며,

중앙에 있는 Layout Display에서 레이아웃을 볼 수 있습니다.

오른쪽에 있는 Attributes에서는 해당 컴포넌트에 속성을 볼 수 있습니다.

 

주로 Compose를 사용할때 쓸데 없이 리컴포지션이 많이 일어난다면 확인 후 최적화 하는데 사용하기 좋습니다.

게임으로 치면 Update() 함수를 최적화 하는 느낌이라고 봐도 좋을 것 같습니다.

 

 

세미나 내용은

해당 링크를 참고했습니다. 

728x90

관련글 더보기

댓글 영역