안드로이드의 4대 컴포넌트
- Activity
- 사용자와 직접적인 상호작용
- Service
- 백그라운드에서 사용자에게 도움이 되는 작업을 수행
- 멜론 뮤직, 앱을 종료해도 실행되도록 해주는 작업
- Broadcast Recevier
- 특정 이벤트 발생 시 앱에 알림
- Content Provider
- 시스템이나 다른 앱 사이에 데이터 제공 및 전달
Activity
- 애플리케이션의 실제 동작을 구현한다.
- Layout : 동작을 실현할 수 있는 화면을 구성한다.
- 따라서, Activity는 Layout과 결합되어야 비로소 의미가 있다.
- Layout : 동작을 실현할 수 있는 화면을 구성한다.
Activity와 Layout을 결합하는 방법
1. findViewById
- 안드로이드 리소스를 관리하는 R클래스를 통해 View를 찾는다.
- 이때, R클래스는 XML 파일에 새로운 리소스를 기록하면
자동으로 R클래스에 업데이트가 된다. - 단점은, 부모 클래스를 받아서 Activity에서 사용하기에,
하위 클래스를 변경시키지 못함. - 제약적인 코딩
- 따라서, 잘 사용하진 않는다고 함~
- 따라서, 잘 사용하진 않는다고 함~
2. ViewBinding
- XML 파일을 해석해서 객체로 변환한다.
- Java에서 객체를 가져와 변수에 저장해서 활용하듯이 Layout을 이용한다.
- Java에서 객체를 가져와 변수에 저장해서 활용하듯이 Layout을 이용한다.
- 장점은, 자동으로 Type이 맞춰진다. (형변환 X)
연결한 Layout에 존재하는 View만 가져올 수 있다.
Null 에러 방지 - 객체는 존재하는 함수, 변수만 이용이 가능하다. - 단점은, 프로젝트에 초기 설정을 해줘야 한다. (근데, 어렵진 않다고 함.)
Build.Gradle 파일에서 몇줄정도 추가해서 설정해주면 바로 사용가능~
3. DataBinding
- XML 파일과 데이터를 직접 결합하는 방법이다.
- 주로 효율적인 개발을 할 수 있도록 사용하는 디자인 패턴과 결합해서 사용한다.
MVP 패턴.. 등등~
UMC 실습에서는 ViewBinding만 사용해서
Layout과 Activity를 결합한다.
안드로이드 개발: [파일] 네이밍 규칙
Activity 클래스 파일 네이밍
camel caes를 적용해 Activity 클래스 파일 이름을 생성한다.
ex) NewActivity, MainActivity .. 등등
Layout XML 파일 네이밍
언더바를 사용해 Layout XML파일을 생성한다.
파일 이름은 Activity와 통일하여 activity_{activity 파일이름} 로 지정해준다.
ex) activity_new, activity_user .. 등등
Layout XML을 객체로 변환하는 ViewBinding 네이밍
Layout XML을 객체로 변환하여 Activity 클래스 파일에서
XML 과 연결하여 사용한다.
그래서, Activity에서는 ViewBinding 을 통해
XML 객체로 변환된 걸 "변수"로 받아서 사용한다.
그렇기에, Activity 내에서 ViewBinding의 XML 객체에 대한 변수의 네이밍이 필요하다.
- 안드에서 XML 객체를 XML 파일명에서 언더바를 제거하고
끝에 Binding을 추가하여 Camel case로 네이밍을 한다.
activity_new.xml 파일이면, ActivityNewBinding 으로 XML 객체에 대한 네이밍을 해준다. - 해당 네이밍은 안드로이드에서 규칙을 세운 것으로
지키지 않으면 에러를 발생시킨다.
다음은 이해가 쉽도록 ViewBinding 네이밍 예제코드이다.
// NewActivity Class 파일
class NewActivity: AppCompatActivity(){
// ViewBinding으로 XML 객체로 받음.
private lateinit var viewBinding: ActivityNewBinding
override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
// layoutInflater -> XML 파일을 읽어가지고 객체로 만들어주는 역할이다.
viewBinding = ActivityNewBinding.inflate(layoutInflater)
setContentView(viewBinding.root)
}
}
Activity 사용법: Layout과 연결해 사용하는 방법
1. 새 Activity를 띄우기
Activity를 띄우기 위해선 intent를 사용해야한다.
# intent란?
안드로이드 구성 요소간 메시지 정보를 주고받을 수 있도록 해주는 객체이다.
intent 종류
- 명시적 Intent
- 어떤 구성요소로 메시지를 보낼지 개발자가 직접 지정한다.
어떤 Activity를 선택해 메시지를 보낼지 개발자가 직접 선택함.
- 어떤 구성요소로 메시지를 보낼지 개발자가 직접 지정한다.
- 암시적 Intent
- 어떤 Action만 지정하고 그 Action이 가능한 앱을 사용자가 선택한다.
ex. 사진업로드 -> 카메라, 갤러리 등 앱 선택
- 어떤 Action만 지정하고 그 Action이 가능한 앱을 사용자가 선택한다.
아래와 같이 Intent를 사용해 Activity를 띄울 수 있다.
# Context 란?
안드로이드 애플리케이션의 전반적인 정보를 담고 있는 객체이다.
Context 종류
- App 전체에 대한 Context (ApplicationContext) - 전역 객체
주로 외부 라이브러리, 데이터베이스, 네트워크 연결 등이 ApplicationContext 객체에 저장된다. - Activity에 대한 Context - 지역 객체
Context는 객체의 작용범위에 따라 종류가 나눠짐을 알 수 있다.
2. 새 Activity에 데이터 넘기기
아래와 같이 Activity에서 새로운 Activity로 데이터를 넘길 수 있다.
// putExtra로 여러 개의 데이터를 넘길 수도 있다.
// key 값으로 데이터를 구분하기에, 여러 데이터 처리가 가능하다~
newActivityIntent.putExtra(name: "key", value: "value")
넘기는 데이터에 대한 값이 많은 경우
데이터를 "객체"로 만든 뒤 새로운 Activity에 넘겨주기도 한다.
3. 새 Activity에서 넘어온 데이터 받기
아래와 같이 이전의 Activity로부터 데이터를 받고,
받아진 데이터에 대한 예외처리 (null 값인지 판단) 를 한 후
예외처리를 통과하면, 데이터를 받아 지역변수로써 저장한다.
// 새로운 Activity 파일
val bundle = intent.extras
if(bundle != null){
val value = bundle.getString(key: "key", defaultValue: "")
}
넘겨온 Value 데이터의 Type을 고려해서 get{Type 값}() 메소드로 데이터를 받아온다.
만약, 넘겨온 Value 데이터 Type과 다른 get~~() 메소드를 사용하면 Type Error가 발생한다.
Fragment 를 사용해서 Activity를 구현하는 방법은
실습영상과 실습 과제를 해보고,
intent로써 Activity를 전환과 함께 정리해서 포스팅하겠다.
^.^
'📚 스터디 > 프론트엔드' 카테고리의 다른 글
[안드로이드] 6주차 실습: BottomNavigation & ViewPager2 - TabLayout (0) | 2022.11.06 |
---|---|
[안드로이드] 5주차 실습: RecyclerView 사용 (5) | 2022.11.05 |
[안드로이드] 6주차: 고급 Layout과 View (0) | 2022.11.05 |
[안드로이드] 4주차: LifeCycle 실습 (0) | 2022.11.01 |
[안드로이드] 4주차: LifeCycle, 외부 작용으로의 Activity 예외처리 (2) | 2022.10.24 |