내 멋대로 안드로이드 - 2

2022. 7. 16. 10:46모바일프로그래밍/안드로이드

728x90

1.  안드로이드 자바 API 간단한 소개

저번 시간에 간단히 살펴 본 제가 생각하는 안드로이드 탄생의 배경과 약간 맛본 안드로이드 커널에 대한 일부 라이브러리들에 대한 저 나름의 생각들 아직 맞는 지는 확실치 않지만 여하튼 그 부분들이 맞냐 아니냐를 떠나서 에뮬레이터를 띄우고 내부 환경을 들어가서 안드로이드가 어떤식의 구성으로 이루어져 있는 지 간단히 알아보았습니다

 

사실 system 디렉토리만 그것도 몇몇개만 확인해 본 셈이지만요 

사실 저 같은 소프트웨어 개발자가 여러가지를 알기도 힘들고 수박 겉핥기 식으로 해본 시스템 관리만 가지고 좀 더 심화된 내용을 들어가기는 좀 어렵다고 판단되는 바, 우선 소프트웨어적인 접근방식 그것도 개발자의 생각으로 안드로이드를 바라보도록 하겠습니다

 

그럼 저번 글에서 말씀 드렸듯이 안드로이드 자바의 API에 대해서 간략하게 논해 보기로 하겠습니다.

제가 생각하고 받아 들이는 자바는 일단 너무 방대해서 일일이 하나씩 해보더라도 꽤 많을 시간에 걸쳐서 섭렵해야 하는 API의 집합체라고 생각 합니다 그

러니 구글입장에서도 이 모든 API를 다 받아들여서 일일이 구현하려는 수고로움을 들이지 않았을 테고 그러면 자신들이 원하는 목적에 부합되는 내용들만 따라가지 않았을까 하는 생각이 드는 데요 

 

여기서 한가지 구글이 자바를 선택한 이유도 자바의 아버지 제임스 고슬링 박사의 "자바는 네트웍 언어다" 라는 말의 의미를 잘 해석한게 아닌가 하고 생각 해 볼 수 있을 것 같습니다

 

서론이 너무 길었는 데 우선 안드로이드 API를 살포시(?) 느껴 보면 아래와 같은데요

 

크게 패키지 상으로는 android, java, apache 그리고 w3c 이렇게 4개의 분류의 패키지가 있습니다 

물론 패키지 이름으로 딱 분류 하지는 않았지만 나눠보면 저 나름대로 그렇다는 것입니다 

 

android  패키지 : 

우리가 저번 글에서 탐험했던 내용들 중에서 사용자 GUI(제생각에는)꾸미고 약간의 안드로이드를 위한 라이브러리를 엔드 유저 단으로 제공하기 위해서 네이티브 쪽에서 제공해야 하는 API와 순수 자바로 된 라이브러리가 혼재해 있는 패키지가 아닌가 생각합니다.

 

java 패키지 : 

여기도 배다른(?!) 형제가 있군요 좀 상세하게 살펴보면 io,lang,ref,reflect,math,net,nio,security, sql, text, util, crypto, net, security,xml 이런 패키지들이 있습니다. 

일반적으로 우리가 보던 자바 패키지 구조에서 많은 것들이 빠져서 올라온거 같은데요 위의 내용만 보더라도 안드로이드가 뭐다라는 약간의 감이 오시리라 믿습니다.

 

좀 더 의미 있는 패키지를 나눠보라면 다음과 같을 것 같은데요

우선 reflect 패키지 이놈은 사실 자바 개발자라면 누구나 자랑스러워(?) 하는 Dynamic Class loading의 개념을 받아 들인 거 같습니다.

이부분이 사실 플러그인, 모듈 혹은 자바 빈즈라고도 얘기하는 즉 우리가 실질적으로 안드로이드 자바를 작업하다 보면 UI와 사용자 로직을 분리하기 위한 xml코드와 뜬금없이 상속 받는 Activity 클래스에 대한 연관관계에 대한 약간의 설명이 될 수도 있습니다.

 

사실 마이크로소프트가 만든 닷넷의 메커니즘 냄새가 좀 더 나는 것이긴 하지만... 그래도 자바측에서 제안한 자바빈스 모델과도 뗄레야 뗄수 없는 그런 메커니즘을 사용하기 위한 근간이 되는 패키지입니다. 여담이지만 한 9년전에 사용자가 약간의 코드의 보탬으로 어떤 것이든 만들어 줄수 있습니다 이제 새 세상이 왔어요 라고 외치고 있던 선마이크로 시스템즈가 생각이 나네요 사실 이 모델이 EJB의 근간이 되기는 했지만 EJB 나오기 전에는 사람들이 "이게뭐지?" 라고 생각했더랬지요(사실 제가 그렇게 생각했지만....) 여하튼 이부분을 자세히 설명한다는 것은 제가 생각해도 수백페이지는 할해해야 할 듯 합니다.

 

옆길로 샛는데 여하튼 그래서 xml과 Activity가 런타임 상에서 서로 맞물려 플러그인 될 수 있도록 하기 위한 구현의 근간이 되는 패키지이다 라는 것이 제 주관적인 생각입니다

 

두번째,  net 패키지

TCP/UDP 등의 우리가 일반적으로 사용하기 위한 소켓 클래스와 IPv6까지 확장을 고려한 프로토콜 설계가 들어가 있습니다. 네트웍 통신의 개념 자체도 너무 무겁고 어려운 주제이다 보니 여기서 그만 언급합니다.(나도 몰라요....)

 

세번째, nio 패키지 

메를린가 나왔을때 자바가 제공한 Non blocking IO 라이브러리 입니다 그전까지 모든 라이브러리는 InputStream으로 받아들이던 Blocking IO였으니까 이부분을 제공하는 군요. 사실 메를린 이전까지는 빠른 성능처리를 위해서 Native 라이브러리를 붙여서 사용하던 생각이 나네요.

 

네번째, security

이부분은 crypto 패키지와 맞물려서 우리가 만드는 apk에 대한 디지털 서명을 관리하고 네트웍 상의 ssh를 지원하기 위한 프레임웍패키지 인것 같습니다. ..... 암호화 ... public key private key... ssh 쓰기는 많이 했지만 그 자체로도 포스가 느껴지는 이름 들입니다.(넘 어려워...ㅡ.ㅡ;;)

 

다섯번째, java.util.concurrent

이 패키지는 타이거에서 채택된거(내기억이 맞다면 메를린일지도)였고 제가 존경하는 영적스승(^^) Doug Lea 박사의 edu....으로 시작하던 패키지, 이름도 너무 길어서 짤라서 붙여야 했던 그 유명한 동시 쓰레드 컨트롤 패키지 이며 채택 되기 전 부터 모든 자바 서버 개발자들이 많이 애용하던 패키지 였고, 이를 자바가 받아 들였는 데 구글도 받아 들인거 같네요 ( 재해석 했다고 하나?)

이분이 쓴 Concurrent Programming in Java라는 책도 있고 사실 이 패키지 나오고 나서 누구도(?!) 동시 쓰레드 프로래밍에 대해서 말하지 못했다는 설이 전해 집니다(글쎄...)

그 이외 패키지도 중요 하지만 이정도로 java 패키지에 대한 저의 생각을 말씀드린거 같고 이것으로도 충분히 안드로이드가 UI와 네트웍에 집중했다는 결론이 나네요 (물론 누구나 다 아는 얘기 이지만....) 

 

여섯째, dalvik 패키지 

이놈은 글쎄 왜넣을까요? 자바에서도 오픈 안하던거긴 하지만 바이트코드를 직접 핸들링 하는 건가? 여하튼 각각의 제는 시간이 있으면 하는 걸로 하고 일단 넘어가겠습니다. 너희가 CAFEBABE를 아느냐!

 

일곱째, junit  패키지 

유명한 놈이죠.....xunit.org에서 나온 거고 테스팅을 위해서 고안된 패키지 입니다. 테스팅.....너무 어려운 얘기죠 하지만 안드로이드 자바는 우리가 이 스팩을 따르면 충분이 테스트를 시켜 주겠다는 것이고 사실 잘된 것이죠 안드로이드는 이것을 자체 API 리스트에 넣었으니...쓰는 법은 쉬우면서도 어려워서 책으로도 수십권입니다 이상

 

여덟 째, apache 패키지 

제가 즐겨 쓰던 http 클라이언트, 서버도 클라이언트도 만들수 있는 아파치 라이선스의 라이브러리 입니다.

GET POST PUT 방식 모두 지원하는 것으로 알고 있고 프로토콜을 변경하고 약간의 터치로 자신만의 소켓 서버(예를 들면 ftp,telenet) 등도 만들수 있는 Powerful한 라이브러리 입니다(정말 이게 파워풀 한 건지는 ... 글쎄). 아파치에서도 성공한 라이브러리죠.

일일이 아스키 코드 파싱해가면서 골머리 싸안던 HTTP 프로토콜을 아주 상큼하게 해결해 주고 있죠....

결국 안드로이드는 HTTP는 확실히 지원해 주겠다는 말이 되겠지요....(프로젝트 몇개 할때 도 몇몇 서버에는 이거 썼는데) 역시 쉬운것이 장땡!

 

아홉째, w3c 

W3C하면 xml, xml 하면 SAX와 DOM 무슨 말이 필요 없습니다 (사실 넘 어려워서ㅡ.ㅡ;;)

 

마치면서

 

오늘은 안드로이드 자바 API만 저나름대로 탐험해 보았습니다.

사실 각 패키지를 일일이 살펴보아야 하겠지만 잘모르는 것도 있고 그리고 예제도 함 만들어 봐야  이것이 뭔지 알거 같은 것들이 태반인 것들이었습니다. 

다음 글에서는 실제 예제를 만들어서(긁어서겠지...) 안드로이드에서 어떻게 내가 만든 라이브러리를 불러들이고 이것을 어떻게 시스템이 인식해서 이용하는 지 파헤쳐 보기로 하겠습니다.

728x90