일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- IOS
- 코드리뷰
- 테이블_레이아웃
- 아이폰
- 서비스
- 안드로이드
- 자바
- 데이터베이스
- RecyclerView
- 스낵바
- 상대 레이아웃
- 리니어 레이아웃
- 텍스트뷰 자동 스크롤
- 안드로이드 스튜디오
- textview auto scroll
- 안드로이드_프로그래밍
- 뷰
- edwith
- 부스트코스
- 제약 레이아웃
- SceneDelegate
- Swift
- 레이아웃
- 드로어블
- 텍스트뷰 스크롤
- 프로그래밍
- 프로젝트
- 코틀린
- 수명주기
- 액션바
- Today
- Total
듀다의 성장개발로그
[부스트코스] 안드로이드 프로그래밍 13 - 인텐트 본문
인텐트는 액티비티의 인스턴스 객체로 시스템으로 전달되는 일종의 명령을 담고 있는 객체입니다.
시스템 안에서 데이터를 옮기는 데 필요한 객체이지요.
이 인텐트가 필요한 이유는 액티비티를 다루기 위해서인데요,
시스템에서 액티비티를 관리하기 때문에, 예를 들어 액티비티를 띄우거나 없애려고 한다면 시스템에 요청해야 합니다.
그런데 시스템에 무언가를 요청할 때는 반드시 시스템이 이해할 수 있는 포맷으로 전달해야 합니다.
바로 이 인텐트가 시스템이 이해할 수 있는 포맷이기 때문에 인텐트를 사용하는 것이지요.
인텐트는 액티비티끼리 뿐만 아니라 액티비티와 서비스도 데이터를 전달할 수 있게 하고, 브로드캐스트 수신자와도 통신할 수 있게 합니다.
인텐트에는 명시적 인텐트와 암시적 인텐트가 존재합니다.
명시적 인텐트는 액티비티가 명시적으로 지정된 인텐트이고, 암시적 인텐트는 명시적으로 지정되지 않은 인텐트인데요,
예를 들어 ACTION_VIEW 함수를 호출하고 tel:01011112222와 같이 전화번호를 넣어주면 전화걸기 화면으로 갑니다. 이는 전화 걸기 기능이 등록된 앱을 연결해 주는 것인데요, 전화 기능이 등록된 앱 중 어느 앱이 실행될지는 정해지지 않았습니다. 이렇게 호출 대상이 달라질 수 있는 인텐트를 암시적 인텐트라고 합니다.
그리고 ACTION_VIEW와 같은 함수를 액션이라고 하는데요, 액션 통해서 시스템에서 어떤 동작을 원하는지 이해할 수 있습니다.
인텐트에 넣어서 전달하고 싶은 데이터는 부가데이터(Extra Data)나 플래그를 사용하여 전달할 수 있는데요
만약 보내고 싶은 데이터가 문자나 숫자 등이 아닌 '객체'라면 어떻게 해야 할까요?
객체 안에 있는 데이터를 전달하는 가장 쉬운 방법은 Serializable을 사용하는 것입니다.
Serializable은 화면과 화면 사이에서, 필요할때 ArrayList로 데이터를 바로바로 전달할 수 있고
서비스에서 화면을 띄울 때 바로 전달해셔 보여줄 수 있다는 장점이 있습니다.
Serializable을 구현한 것은 ExtraData에 바로 넣어서 뽑을 수 있는데요, putextra로 넣고 getSerializableExtra로 뽑아서 사용할 수 있습니다.
그렇지만 단점도 존재합니다. 객체의 데이터를 뽑아낼 때, 객체에 저장된 타입 등도 같이 뽑아내야 해서 데이터의 용량이 커진다는 단점이 있습니다.
그래서 안드로이드에서는 Parcelable로 객체의 데이터를 전달하는 것을 권장합니다.
이것은 객체 안의 변수들을 뽑아서 변수들이 갖고 있는 데이터만 전달할 수 있게 구성하는 방법입니다.
그렇지만 이 Parcelable도 단점을 가지고 있습니다. Parcelable을 별도로 정의하는 것이 번거롭다는 점이지요. 새로 무언가를 만들어야 합니다. 반면에 Serializable은 새로 무언가를 만들 필요 없이 기존의 데이터들을 사용할 수 있습니다.
따라서 안드로이드에서는 Parcelable를 권장하지만 실제로는 Serializable이 많이 사용되고 있습니다.
'안드로이드 > 부스트코스' 카테고리의 다른 글
[부스트코스] 안드로이드 프로그래밍 15 - 브로드캐스트 (0) | 2020.02.21 |
---|---|
[부스트코스] 안드로이드 프로그래밍 14 - 액티비티 수명 주기 (0) | 2020.02.21 |
[부스트코스] 안드로이드 프로그래밍 12 - 화면 전환 기초 (0) | 2020.02.17 |
[부스트코스] 안드로이드 프로그래밍 - 프로젝트 B 코드 리뷰 (0) | 2020.02.17 |
[부스트코스] 안드로이드 프로그래밍 11 - 리스트뷰, 스피너, 그리드뷰 (0) | 2020.02.14 |