한 발짜국

Android Studio(Kotlin) 한 줄 읽기 #1 (binding, Gradle, Module, setContentView, Dex File) 본문

Android Studio(Kotlin) 한 줄 읽기 #1 (binding, Gradle, Module, setContentView, Dex File)

발짜국 2022. 11. 9. 02:02

이해할 코드 한 줄

안드로이드 프로젝트에서 항상 마음에 걸린 건 왜 이 코드를 쓰는지 모르고 구글링에 의존해 개발하는 것 같다는 점이었다.

그래서 한 번 그 갈증을 해결해보고자.. 앞으로 코드를 한 줄씩이라도 공부해보려고 한다.

조금이라도 헷갈리거나 아는 것 같아도 설명이 안되는 부분도 최대한 적어봐야겠다.

 

그리고 누굴 알려주기 위함이 아닌 메모 정리와 같은 형식으로 기록만 남길 예정이다.

대부분 구글링과 안드로이드 공식 문서를 참고했다.

 

val binding by lazy { ActivityArchiveAddBinding.inflate(layoutInflater) }

binding (뷰 결합)

  • 뷰와 상호작용하는 코드를 쉽게 작성 가능
  • 모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성
  • 바인딩 클래스의 인스턴스에는 상응하는 레이아웃에 ID가 있는 모든 뷰의 직접 참조가 포함
  • 대부분의 경우 뷰 결합이 findViewById를 대체

   사용

  • 모듈에 뷰 결합 사용하도록 설정되면 (아마도 build.gradle에 viewBinding{ enable=true} 추가 의미?) 모듈에 포함된 각 XML 레이아웃 파일의 결합 클래스 생성됨
  • 각 결합 클래스에는 루트 뷰 및 ID가 있는 모든 뷰의 참조가 포함
  • 결합 클래스의 이름은 XML 파일의 이름을 카멜 표기법으로 변환, 끝에 ‘Binding’ 추가해 생성
  • ex) activity_archive_add.xml →  ActivityArchiveAddBinding
  1. inflate() 메서드 → 생성된 결합 클래스 포함, 활동에서 사용할 결합 클래스 인스턴스 생성
  2. getRoot() 메서드 호출 or binding.root(Kotlin 속성 구문)을 사용해 루트 뷰 참조를 가져옴
  3. (Activity) 루트 뷰를 setContentView()에 전달해 화면상의 활성 뷰로 만듦(Fragment) onCreateView() 메서드에서 루트 뷰를 반환하여 화면상의 활성 뷰로 만듦

tools:viewBindingIgnore=”true”

  • 바인딩 클래스를 생성할 필요가 없는 레이아웃이 있다면, 레이아웃 파일의 최상위 뷰에 추가
  • 레이아웃 파일의 최상위 뷰에서만 사용 가능 (루트 뷰가 아닌 하위 뷰에서는 동작 X)

Gradle (빌드 배포 도구, Build ToolKit)

  • 작성한 소스 코드와 의존성 라이브러리들을 묶어서 APK 등 배포할 수 있는 형태로 패키징
  • Gradle을 사용해 빌드 프로세스를 자동화하고 관리하는 한편, 개발자가 유연한 맞춤 빌드 구성을 정의하도록 허용
  • 안드로이드 스튜디오와는 독립적으로 실행
  • 안드로이드 스튜디오는 별도 빌드 ToolKit 존재하지 않으므로, Gradle을 빌드 ToolKit으로 채택해 사용
  • 안드로이드 스튜디오는 IDE(Integrated Development Environment, 통합 개발 환경)로써 코드의 편집만 담당
  • 빌드하여 패키징하는 과정은 모두 Gradle이 담당

이미지에 해당 문서의 링크를 걸어 두었다

   컴파일러

   소스코드 → 덱스 파일 변환

   그 외 →  컴파일된 리소스 형태 변환

 

   Gradle + Android Plugin

   컴파일러가 변환한 파일을 모아 APK 등의 형태로 패키징


기타 정리

모듈 (Module)

  • 프로그램을 구성하는 구성 요소, 관련된 데이터와 함수를 하나로 묶은 단위
  • 독립적인 기능과 유일한 이름 사용 필요
  • 용도가 비슷한 함수나 추상화된 자료, 객체, 메서드 등

setContentView()

  • XML 파일의 전개(inflate)를 수행
  • XML 레이아웃 리소스 ID에 해당하는 파일을 파싱하여 뷰(View) 생성, 뷰의 속성 지정, 뷰 간의 상하관계에 맞춰 배치

덱스 파일 (Dex File)

  • Android Runtime에서 궁극적으로 실행되는 코드가 포함된 파일, 기계어
반응형
Comments