[안드로이드] 기초 개념 정리

HR·2022년 10월 4일
0

Java

목록 보기
1/3

면접 대비용 안드로이드 정리!
짧굵배 글을 보고 정리했다.

컴포넌트

컴포넌트는 안드로이드 앱을 구성하는 기본 요소를 말한다.

각 구성 요소는 시스템이나 사용자가 앱에 들어갈 수 있는 진입점이 되며, 경우에 따라 다른 구성 요소에 종속될 수 있다.

컴포넌트의 종류는 Activity, Service, Content Provider, Broadcast Receiver가 있다.

사용자 인터페이스

안드로이드UI는 기본적으로 View 객체의 계층 구조로 구성된다. 화면에 보이는 텍스트, 버튼, 입력 등 모든 구성 요소들이 View 클래스의 서브 클래스로 만들어진 객체이다.

예를 들어, Button 클래스는 View 클래스를 상속받아 구현된 클래스를 말한다.

View의 다른 표현으로 위젯(Widget)이 있으며 클래스 관점이 아닌 UI 요소 관점에서 부르는 용어를 지칭한다.

View 화면 요소들은 계층 구조로 구성되어 있으며 최상위 계층에는 전체 화면에 대한 레이아웃이 포함되어 있다.

ConstraintLayout, LinearLayout 등 레이아웃 클래스들이 그런 역할을 한다. 레이아웃 클래스는 ViewGroup 클래스의 서브 클래스가 된다.

즉, 안드로이드 화면은 컨테이너 역할을 하는 ViewGroup과 구성요소인 View의 집합이 된다.

레이아웃

LinearLayout 순차적으로 배치하는 레이아웃으로, 가로, 세로 방향으로 배치하는 것이 가능하다.

ConstraintLayout 기본 레이아웃으로 레이아웃 편집기에서 시각적으로 편리하게 작업이 가능하다.

TableLayout 행과 열의 테이블 형태로 View를 배치하는 방식

FrameLayout 여러 View를 겹쳐서 마치 프레임에 끼우듯 동작하는 레이아웃

RelativeLayout View사이의 상대적인 위치 개념으로 배치

주요 View 속성

id 화면을 구성하는 모든 View들은 고유의 id를 가진다. 이를 사용해 View에서 발생하는 이벤트를 감지하고 View의 텍스트 내용이나 속성을 변경할 수 있다.

gravity 텍스트 정렬을 위한 속성으로 기본값은 left, top이다.

onClick 클릭 이벤트를 처리하기 위한 속성.

이벤트 핸들링

사용자 인터페이스에서 이벤트란 버튼, 이미지 혹은 기타 위젯을 사용자가 클릭하거나 터치하는 등의 행위를 말한다.

이벤트 발생시 해당 이벤트를 처리하기 위한 프로그램 코드 구현이 필요하다.

안드로이드에서 사용하는 이벤트 구현 방법은 다음과 같다.

  1. 레이아웃 xml 파일에 onClick 속성 정의
  2. 별도의 이벤트 리스너 클래스를 구현하고 코드에서 리스너 등록
  3. 바인딩된 뷰 객체에서 익명의 이너 클래스로 리스너 클래스 구현

일반적으로 이벤트 발생은 시점을 알 수 없다. 따라서 특정 위젯에서 이벤트가 발생 했는지 수시로 체크하는 방식은 비효율적이기 때문에, 보통 옵저버 패턴이라고 부르는 모델을 사용한다.

옵저버 패턴이란 특정 객체에서 이벤트가 발생했는지를 모니터링 하는 객체를 두고 해당 객체에서 이벤트가 발생했을 경우 이벤트 알림을 구독한 객체에게 통지하는 방식의 구현 방식을 말한다.

Activity

UI를 구성하는 기본 컴포넌트로, 기본적으로 인터페이스를 포함한 화면 하나를 나타낸다.

예를 들어 상품목록을 보여주는 화면이 있고 특정 상품을 선택했을 때 주문정보 화면이 나타난다면, 두 개는 서로 다른 Activity로 이루어진 것이다.

각 Activity에 대한 연결은 intent를 통해 이루어진다. 앱의 성격에 따라 여러 Activity를 구성하기도 하고, Fragment를 사용하기도 한다.

라이프 사이클(생명 주기)

개발자가 아닌 시스템에 의해 객체가 생성되고 종료되는 일련의 과정을 거치게 된다. 이러한 과정을 라이프 사이클이라고 말하며, 액티비티 상태의 변화로 이해할 수 있다.

액티비티 인스턴스는 라이프사이클 안에서 서로 다른 상태를 통해 전환된다. 액티비티 클래스는 상태 변화에 따라 호출되는 콜백 메소드를 포함하고 있다.

onStart 액티비티가 Created 상태가 되면 onStart()메서드가 호출되며 Started 상태로 전환된다.

onResume 액티비티가 포그라운드에 표시되고 화면에 UI가 나타나며 Resumed 상태가 된다.

onPause 액티비티를 떠날 때 첫번째 신호로 해당 메서드를 호출한다. 기본적으로 액티비티가 포그라운드에 있지 않다면 Paused 상태가 된다.

onStop 액티비티가 화면에서 완전히 사라지고 새로운 액티비티가 표시완료 되었을 때 Stopped 상태가 된다.

Intent

안드로이드 런타입에서 액티비티 혹은 다른 컴포넌트나 앱을 실행하도록 요청하는 일종의 메시지 객체라고 할 수 있다.

명시적 인텐트(Explicit intent)란 실행하고자 하는 액티비티의 클래스 이름을 사용하는 형태를 말한다. 보통 자신이 만든 앱의 다른 액티비티를 실행할 때 사용한다. 앱 화면에서 이벤트에 따라 다른 화면으로 이동하는 형태를 생각하면 된다.

암시적 인텐트(Implicit intent)란 클래스명이 아닌 intent filter 정보를 사용하는 형태로, 클래스 이름을 알 수 없는 다른 앱의 컴포넌트를 실행할 때 사용한다. 예를 들어 전화번호부, 이메일, 웹 브라우저 등으로 연결하는 경우를 생각하면 된다.

액티비티간 데이터 전달은 기본적으로 인텐트를 통해 이루어진다. 텍스트, 바이너리 데이터의 전달이 가능하며 다중 데이터의 전달도 가능하다. 인텐트를 생성하고 해당 인텐트에 putExtra() 메소드를 통해 텍스트 정보를 키 값과 함께 전달이 가능하다.

Fragment

Activity 내의 어떤 동작 또는 사용자 인터페이스의 일부를 나타낸다. 여러 개의 프래그먼트를 하나의 액티비티에 결합하여 창이 여러 개인 UI를 빌드할 수도 있고, 하나의 프래그먼트를 여러 액티비티에서 재사용할 수도 있다. 액티비티의 모듈식 섹션이라고 생각하면 된다.

Fragment는 Activity 내에 생성되는 UI 구성을 여러 개의 모듈 단위로 작성할 수 있도록 해주는 기능이다.

Fragment는 자체적인 수명 주기를 가지고, 자체 입력 이벤트를 수신하고, 액티비티 실행 중 추가 및 삭제 또한 가능하다.

profile
Hello World :D

0개의 댓글