블로그를 개편(?) 한 후, 첫번째 포스팅입니다.
새롭게 시작하는 의미에서 이번 포스팅에서는 가볍게 Intent객체에 대하여 설명하는 시간을 가질 예정입니다.

Intent객체?

저도 영어를 잘 못하기 때문에, 사전적 의미를 한번 찾아보았습니다.
사전적인 의미로는 의지, ~ 몰두하는, ~ 강한관심을 보이는등의 의미로 사용되는 것 같네요?

그렇다면, 안드로이드 시스템에서의 Intent객체란 무슨 의미일까요?
의미를 설명하기에 앞서, 안드로이드에서 어떠한 어플리케이션을 사용해보셨다면 아실테지만,
모든 어플리케이션은 여러개의 화면으로 이루어져 있고, 화면을 이동하면서 사용을 한다는 것은 다들 아실 것 같습니다.
또는, 어떠한 어플리케이션들은 다른사람이 미리 만들어둔 어플리케이션을 호출하여 실행해주기도 하죠.

이렇게 어플리케이션 내에서 화면을 이동하거나 다른 어플리케이션을 실행하기 위해서는,
안드로이드 시스템에서 나 지금 다른화면 이동할껀데?라던지, 나 지금 Facebook이라는 어플 실행할꺼야라는 등의 의사표현을 전달해야 됩니다.
이러한 의사표현을 안드로이드 시스템에게 전달하려면 어떻게 해야 될까요?
굉장히 간절한 소망을 담아서 아주 큰 목소리로 스마트폰에 대고 말을 걸어도 이름과는 반대인 멍청한 우리의 스마트폰은 실행해주지 않죠.

조금 더 간단하게, 연인 관계에 있을 법한 예시를 들어볼까요?
음식사진을 보다가 너무 맛있어 보이는 음식이 있었는데 속으로 이거 먹고싶어!라고 죽어라 텔레파시를 보내도 상대방은 알길이 없죠.
그래서 사람은 이러한 의사표현을 전달하기 위한 목적으로 언어라는 의사소통을 위한 국가마다 정해진 규약을 사용합니다.

이러한 언어와 마찬가지로 안드로이드 시스템에게 무엇을 하고자한다고 의사표현을 하기 위해서는 안드로이드 시스템이 알아 들을 수 있는 언어를 사용해줘야 하며, 그것이 바로 오늘의 주제인 Intent객체입니다.

Intent객체로 할 수 있는 일?

그렇다면 위에서 장황하게 설명한 Intent객체라는 녀석이 무엇을 할 수 있을까요?
물론 저도 모든 것을 알고 있지는 않기에 몇가지의 예시만 들어보고자 합니다.

위에서 잠깐 언급했듯, 원하는 화면으로 이동할 수 있습니다.
본인이 만든 어플리케이션에서 다른사람이 만들어둔 어플리케이션을 실행 할 수 있습니다.
Intent객체를 이용하여 본인의 어플리케이션에서 SMS를 보낼 수도 있죠!
혹은, 반대로 수신받은 SMS의 정보를 얻어올 수도 있습니다.

몇가지의 간단한 예시만 적었지만, 이것들은 Intent객체를 통해 할 수 있는 아주 일부분에 불과합니다.
거의 어플리케이션에서 할 수 있는 모든 행위들의 중심은 Intent객체라고 해도 과언이 아닐 정도이죠.

명시적?? 암시적??

Intent객체라는 녀석만으로도 머리가 아픈데, 어려운 용어가 나왔어요..
Intent객체를 사용함에 있어서 명시적 Intent암시적 Intent로 다시 나뉠 수 있는데요.
우선 간단한 예제부터 알아보죠.

1
2
3
4
5
6
7
8
// 명시적 Intent
Intent intent = new Intent(this, SecondaryActivity.class);
startActivity(intent);
// 암시적 Intent
Uri uri = Uri.parse("tel:xxx");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);

어떤가요? 대충 감이 잡히시나요? 명시적 Intent란 안드로이드 시스템에게 나 지금 어떤 컴포넌트를 호출할꺼야!라고 실행하고자하는 컴포넌트를 정확히 콕! 집어 알려주는 것을 의미합니다.
그와 반대로 암시적 Intent란 안드로이드 시스템에게 나 지금 이런 데이터를 가지고 이런 행위를 하려고하는데 니가 적당한 컴포넌트로 실행해줄래?라고 실행하고자하는 컴포넌트는 정확히 알 수 없지만, Action과 Data등을 이용하여 안드로이드 시스템에게 컴포넌트 실행을 위임하는 것이라고 보시면 편할 것 같습니다.
약간의 부가적인 설명을 덧붙힌다면, 암시적 Intent는 어떠한 행위를 뜻하는 Action과 행위에 필요한 정보인 Data, 그리고 더불어 행위에 필요한 데이터의 종류인 Type의 정보만으로 Intent객체를 생성하고 안드로이드 시스템에게 위임하여 원하는 컴포넌트를 실행하는 것이라고 보면 될 것 같습니다.

어떤가요? 조금 어려운가요?
물론 포스팅을 작성하고 있는 저도 초급자이기에 정확한 의사전달은 되지 않았을지 모르지만 Intent객체에 대해 이해를 돕는데 조금은 기여했길 바랍니다!