1. 안드로이드는 플랫폼이다.
안드로이드는 소프트웨어 플랫폼이다.
앱은 플랫폼으로부터 여러 가지 기능을 제공 받아서 실행되고 동작한다.
개발자는 자신이 만든 앱이 안드로이드라는 플랫폼 위에서 잘 동작하도록 안드로이드가 제공하는 방식을 잘 이해하고 안드로이드가 제공하는 기능을 활용해야 한다.
그림 - 앱과 플랫폼과의 관계
앱은 안드로이드라는 플랫폼 위에서 앱 생명의 시작과 끝을 가진다.
앱도 생명이 있는 것처럼 시작도 있고 쉬는 시간도 있고 일하는 시간도 있고 끝나는 시간도 있는 것이다.
2. 핸드폰 운영체제에 계층이 없던 시절
핸드폰에서 처음 부터 이런 플랫폼이 동작한 것은 아니다. 핸드폰이 처음 개발된 이후 2000년대 중반까지 핸드폰은 하나의 소프트웨어로 동작되고 있었다.
다양한 기능을 제공했기 때문에 여러 개의 앱이 동작하는 것처럼 보이지만 사실은 여러가지 UI를 제공하는 하나의 앱이었다.
하나의 소프트웨어가 모든 기능을 제공하는 구조였다.
당시에는 제조사만이 핸드폰에 기능을 추가할 수 있었고 핸드폰이 출시된 이후에 소비자가 마음대로 기능을 업데이트 할 수 없었다. 당시 PC는 운영체제의 설치 및 프로그램을 마음대로 설치하는데도 말이다.
그 후 핸드폰은 기능이 복잡해지고 하드웨어도 고도화 되면서 플랫폼이 필요한다는 인식이 생기겨 되었다.
유사 플랫폼들이 다양하게 개발되었다가 사라졌다.
2000년대 중반 아이폰과 안드로이드가 출시 되면서 드디어 PC와 유사한 형태의 플랫폼이 등장하였다.
- 플랫폼이란 앱이 시작하고 끝나는 Life Cycle을 가지도록 일정한 규칙을 제공하는 소프트웨어다.
- 플랫폼은 앱이 일을 하는 동안 여러 가지 기능을 쉽게 수행할 수 있도록 여러가지 서비스를 제공한다.
- 플랫폼은 앱이 하드웨어를 직접 제어하지 않아도 플랫폼을 통해 하드웨어가 제공하는 기능을 사용할 수 있게 한다.
- 네트워크
- 램
- 하드디스크
- 키보드
그림 - 플랫폼이 가상화 해주는 하드웨어 기능
소프트웨어 개발자는 휴대폰에 운영체제가 적용되면서 PC에 이어 두 번째로 유저와 직접 소통할 수 있는 플랫폼을 얻게 되었다. 제조사와 별개로 개발을 해서 유저에게 배포하고 실행될 수 있는 플랫폼이 생긴 것이다.. PC처럼 가정에 두는 것이 아니라 항상 휴대하는 필수품에 자신의 프로그램을 개발해서 설치하고 다른 사람에게 제공할 수 있게 되었다.
3. 개발이란?
개발은 어떻게 하는 것일까?
무엇부터 시작해야 하지? 저자도 막막한 일이라는 걸 경험한 바가 있다.
사실 프로그래밍 언어로 프로그램을 만들고 컴퓨터에서 실행해서 결과를 얻는 과정은 그야말로 인위적으로 만들어진 부분이 아주 많다. 이전에는 전혀 없던 형태인 것이다. 그렇기 때문에 이 세계에 들어가서 살펴 보지 않고는 도저히 알 수 없는 구조와 방식을 가지고 있다. 인간이 격어온 자연과 상식으로 유추하기에는 너무나 다른 세계이다.
세상에는 많은 직업들이 있다. 그중에서 가장 자연과 분리된 작업 영역을 가지고 있는 직업이 있다면 그것은 소프트웨어라는 제품을 만드는 프로그래머라고 저자는 생각한다.
물론 전자 공학의 도움없이는 이루지 못했을 세계이다. 프로그래밍의 세계는 전자 공학 덕에 아날로그 세상과 분리된 영역에서 디지털 적인 특성만으로 작업을 할 수 있는 영역을 구축할 수 있었다.
그럼 어디서 시작을 해야 할까?
초등학생, 중학생, 고등학생은 작은 코딩 경험을 통해서 익히는 것이 제일 좋은 방법이라고 생각한다.
컴퓨터 관련 이론을 학습할 절대적인 시간도 부족하고 어려운 이론을 이해할 만큼 성숙된 상태도 아니다.
따라서 이론을 통해서 광범위하게 접근 하기 보다는 쉬운 언어를 선택해서 작은 프로그램부터 작성해 가며 다양한 경험을 통해서 컴퓨터라는 하드웨어를 이해하고 그 위에서 동작하는 소프트웨어의 특성을 배워나가야 한다.
컴퓨터 이론들이 괜히 대학 과정에 포함된 것이 아니다. 어려운 것부터 공부하다 보면 자칫 흥미를 잃고 프로그래밍은 재미없는 일로 생각 될 수 있다.
생각해 보면 프로그래밍은 꽤 복잡한 규칙을 가지고 있는 게임에 가깝다. 난이도로 보면 거의 최상인 게임인 것이다.
프로그래밍에서 전쟁의 상대는 사람이 아니라 풀어야 할 현실의 문제이다.
비행기나 우주선을 제어하는 문제일 수 있고
자동차가 안전하게 운행될 수 있도록 인공지능으로 사물을 인식하고 판단을 내리는 문제가 될 수도 있다.
핸드폰에서 사람들의 일정을 관리해 주고 가계부를 작성해주는 문제 일 수도 있다.
게임에 비유하자면 빌드를 해야 하는 건물(함수)의 종류도 많고 건물을 만드는 규칙도 복잡하다. 사용할 수 있는 자원(라이브러리)도 종류가 많고 캐내서 사용하기 쉬운 것도 있고 어려운 것도 있다.
어떤 것은 사용법이 아주 복잡해서 몇 권을 책을 보면서 공부해야 하는 것도 있다. 사용법을 알아도 이론적인 지식이 없으면 아예 활용할 수가 없는 자원도 있다.
게임에서 전투를 치뤄야 하는 맵(분야)이 다양하듯이 프로그래밍에서도 해결향 할 문제는 아주 다양한 곳에서 발생한다.
우주 산업 부터 공장에 사용되는 머신,
그리고 게임(진짜 게임),
Music Player,
전자제품 등 많은 분야에서 많은 엔지니어들이 오늘도 다양한 전투를 치루는 중이다.
함수를 만들고 데이터를 처리해서 현실의 문제를 해결하면 Stage가 Clear되는 일종의 게임이다.
이 게임은 Clear하는데 최소 멸 달에서 또는 2 ~ 5년이 걸리는 경우도 있다.
꽤 복잡한 게임이므로 이론적인 부분은 대학 진학 후나 어느정도 충분이 컴퓨터라는 장난감에 익숙해 진 후 시작한다면 흥미를 잃지 않고 프록그래밍이라는 바다에서 잘 항해를 할 수 있을 것으로 생각된다.
4. 개발자로서 가져야 할 역량은?
게임에서 다양한 캐랙터와 무기를 제공하듯이 프로그래밍 세계에서도 전쟁 전에 본인이 가질 수 있는 자원이 있다. 바로 플랫폼과 언어, 이론적 지식이다.
세상에는 아주 다양한 플랫폼과 언어, 이론이 존재한다.
천재가 아닌 이상 한 번씩 맛 보기도 힘들 많큼 많다.
언어
어떤 언어는 인공 지능 처리에 알맞고
어떤 언어는 하드웨어 제어에 적합하며
어떤 언어는 금융 분야처리에 탁월한 기능을 제공한다.
플랫폼에 따라 잘 지원 되는 언어도 있다.
게임에서 여러가지 무기를 잘 다루어야 하듯이 프로그래머도 잘 다루는 언어 1 ~ 2가지와 그 다음으로 잘 다루는 다른 종류의 언어 1 ~ 2가지를 갖추어야 뛰어난 프로그래머가 된다.
플랫폼
플랫폼은 여러분이 잘 알듯이 Windows, Unix, Android, iOS, Embedded Platform 등 다양하다.
이론
이론은 대학에서 배우는 기본 이론이 있고 그 외에 다양한 심화 이론과 규칙들이 존재한다.
대학에서는 컴파일러, 운영체제, 네트워크, 데이터베이스, 소프트웨어 공학, 이미지 프로세싱 등 다양한 기본 이론들을 배운다.
현업을 하면서 보게 되는 다양한 분야별 심화 이론들이 있다.
브라우저를 만드는 회사는 HTML5에 대한 지식
IoT 관련 제품을 만드는 회사는 MQTT, 게이트웨이에 대한 지식
네트워크 제품을 만드는 회사는 다양한 네트워크 프로토콜에 대한 지식
Vision 관련 회사는 심화된 Image Processing 지식 등 현장에서 필요한 다양한 이론들과 규칙들이 있다.
위에서 설명한 것은 배우기 어렵지만 이미 스펙이 있고 이론으로 정립이 되어 있어 다양한 해설서와 책들이 존재한다. 길은 정해져 있다. 열심히 한다면 배울 수 있다.
하지만 가장 중요한 부분은 문제를 푸는 방식과 개별 정보를 연관지어 어떤 결론을 낼 수 있는 직관을 스스로 만들어야 한다는 것이다.
문제의 많은 부분은 이미 다른 개발자가 만들어 놓은 자원을 활용해서 쉽게 처리하기 때문에 핵심적인 부분에 빠르게 다가갈 수 있지만 그 핵심 문제를 푸는 것은 스스로 해야 한다.
현실에서 만나는 핵심 문제를 푸는 법은 어디에도 설명이 되어 있지 않다.
전략과 전술
또한 게임에서 캐랙터를 고르고 무기 사용을 연습하는 것과 게임을 통해서 상대를 이길 수 있느냐는 다른 것이다. 게임에는 전략과 전술이 필요하다.
현실에서의 문제 풀이도 전략과 전술이 필요하다. 핵심 문제는 전략이 필요한 부분일 수도 있고 전술이 필요한 부분 일 수도 있다.
초급 개발자와 중급 개발자는 전술을 잘 세우고 문제를 처리햐야 하고 중급 이상 고급 개발자는 전술도 잘 해야 하지만 전략이 더 중요하다. 팀 리더로서 프로젝트의 방향을 정하는 역활을 하게 된다.
같은 문제를 처리하는데도 프로그래머마다 방식이 다를 수 있다. 어떤 부분은 이미 이론으로 적립되어 있기도 하다.
이전에 만나 보지 못한 새로운 문제를 만나면 스스로 전략과 전술을 세워야 한다.
전략과 전술을 잘못 세웠다가는 프로젝트를 실패 하거나 다시 처음부터 해야 하는 일이 발생할 수도 있다.
연습을 많이 한 게이머가 능숙하게 전략과 전술을 펴치듯이 경험이 많은 엔지니어는 정확하게 빠르게 효율적으로 문제를 처리하는 전략과 전술을 세우고 실행 할 수 있다.
5. 안드로이드에서의 개발
이제 초급 개발자가 되기 위해 여행을 하기로 마음 먹었다면 안드로이드 개발이 가장 적합한 시도라고 생각한다.
이전 세대에서는 전통적으로 PC 운영체제인 Windows에서 처음 개발을 시작했지만 많은 사람들이 안드로이드 플랫폼에서 개발을 시작한다. 핸드폰이 PC보다 좀 더 핫한 이유일 것이다.
- Java를 기본으로 하고 있으므로 다양한 다른 개발자들이 만들어 놓은 다양한 기능을 쉽게 활용할 수 있다.
- 마켓이 있어서 내가 만든 앱을 마켓에 팔 수도 있다.
- 많은 개발자가 사용하는 플랫폼이므로 질문과 예제를 통해서 많은 도움을 받을 수 있다.
- 늘 휴대하고 다니므로 좀 더 유용하고 다양한 기능이 필요한 장비다.
- 내가 사용하고 있는 휴대폰에서 테스트하고 개발할 수 있고 사용도 할 수 있다.
위와 같은 다양한 이유에서 가장 현실적으로 쉽게 개발에 활용할 수 있는 기기는 안드로이드 휴대폰이다.
'android > Project' 카테고리의 다른 글
[ Android ] APK 분석하기 (0) | 2024.07.31 |
---|---|
안드로이드 build.gradle의 dependencies에서 사용하는 Keyword의 의미를 알아보자. (0) | 2024.06.11 |
Android 란? 2편 (0) | 2018.10.03 |