자바 어플 만들기 - jaba eopeul mandeulgi

안녕하세요! 

오늘은 IOS와 함께 스마트폰 OS의 대명사가 된 안드로이드(Android)와 2017년 5월에 공식 개발 언어로 채택한 코틀린(Kotlin)에 대하여 간단하게 알아보겠습니다. 

먼저 안드로이드가 동작하는 플랫폼과 리눅스 커널, 현재 사용되고 있는 안드로이드의 API 레벨 그리고 함수형 프로그래밍에 대하여 간단하게 훑어보겠습니다. 

• 안드로이드가 무엇이고 어떻게 발전해왔는지 알아봅니다.

• 코틀린을 자바와 비교하면서 코틀린을 사용하는 이유에 대해 알아봅니다.

2020년 4월 statcounter 통계에 따르면 전 세계 스마트폰 사용자 중 71%가 안드로이드를 사용하고 있습니다. 안드로이드란 용어는 많이 들어봤는데 정확히 안드로이드가 뭘까요?

우리가 말하는 안드로이드는 안드로이드 플랫폼입니다. 2005년 구글이 안드로이드 사의 운영체제, 안드로이드를 인수해 오픈소스로 공개하여 현재에 이르고 있지요. 

2008년 9월, 버전 1.0을 처음 공개하였고, 버전1.5 컵케이크부터 코드네임에 디저트 이름을 붙였습니다. 

이런 식의 코드네임은 2018년 9.0 버전인 파이(Pie)가 마지막이었으며, 2019년 버전 10부터는 디저트 이름을 붙이지 않고 있습니다.

• 통계 출처: statcounter https://gs.statcounter.com/os-market-share/mobile/worldwide

안드로이드 플랫폼은 리눅스 운영체제 안에서 리눅스와 상호작용하면서 동작합니다. 아래 그림은 안드로이드 플랫폼으로 한 번에 이해하기에는 조금 어렵지만, 전체 아키텍처 위쪽에 안드로이드가 실행되는 런타임 영역(녹색으로 표시)이 존재한다는 점을 알아두시면 되겠습니다. 

자세한 내용은 안드로이드 공식 문서에서 확인할 수 있습니다

자바 어플 만들기 - jaba eopeul mandeulgi

▶ 안드로이드 플랫폼. 출처: https://developer.android.com/guide/platform

안드로이드는 사용하는 플랫폼 버전과 별개로 API(Application program interface) 레벨이라는 것이 있습니다. 

API는 개발자에게 안드로이드 플랫폼의 기능을 사용할 수 있게 제공하는 도구로 API 레벨에 따라서 새로운 기능이 추가되거나 코드 전체를 변경해야 하는 경우도 있습니다.

그러므로 API 레벨의 변경 사항이 있을 때는 기존의 코드를 다시 한번 확인할 필요가 있습니다. 

자바 어플 만들기 - jaba eopeul mandeulgi

플랫폼의 최신 버전은 안드로이드 12이지만, 실제 사용자가 사용하는 버전은 훨씬 다양합니다. 

현재 시점의 플랫폼 점유율은 안드로이드 개발자 사이트에서 확인할 수 있습니다. 나중에 개발용 툴인 안드로이드 스튜디오를 설치하면 바로 확인할 수 있습니다. 

안드로이드 개발자 사이트 배포 대시보드 https ://developer.android.com/about/dashboards/index.html?hl=ko

안드로이드 개발자 사이트는 최신 버전에 대한 정보뿐만 아니라 사용 현황 등도 확인할 수 있습니다.

2021년 12월 기준으로 API 레벨 21, 롤리팝 버전 이상을 사용하는 디바이스가 전체의 98%입니다.

특별한 경우가 아니라면 그 이전 버전은 고려하지 않아도 됩니다. 이 글을 읽는 시점에 따라 점유율이 달라질 수 있습니다.

현재 시점의 점유율은 안드로이드 스튜디오에서 새로운 프로젝트를 생성할 때 나타나는 Help me choose 링크를 통해 확인할 수 있습니다.

자바 어플 만들기 - jaba eopeul mandeulgi

▲ 2021년 12월 기준 데이터이며, 배포율이 0.1% 이하인 버전은 표시되지 않습니다.

》》》 여기서 잠깐

★ 짧은 업데이트 주기에 대처하기

안드로이드는 일 년에 한 번 정도, 메이저 버전이 업데이트되고 있습니다(메이저 버전이 바뀐다는 것은 새로운 버전의 안드로이드가 출시된다는 의미입니다). 하지만 새로운 버전으로 사용자가 옮겨 가는 데는 적어도 몇 년의 시간이 소요되기 때문에 항상 최신 버전에 맞춰서 개발할 필요는 없습니다.

다시 안드로이드 플랫폼의 구조를 떠올리면 리눅스 커널과 자바 API 프레임워크가 결합된 형태입니다. 

과거에 안드로이드 플랫폼에 대한 설명에는 JVM(정확하게는 Dalvik VM입니다만 독자의 이해를 돕고자 JVM으로 표기합니다)이 항상 따라붙었는데, 자바 가상 머신 위에서 앱이 동작했기 때문입니다. 

현재는 이를 대신해 안드로이드 런타임(Android RunTime, ART)을 사용합니다.

따라서 JVM이 없지만 여전히 가상 머신 위에서 동작한다는 점에서 자바의 동작 구조를 차용하고 있습니다.

자바 어플 만들기 - jaba eopeul mandeulgi

기존에는 주로 자바를 앱 개발 언어로 사용했지만 2017년 5월 Google I/O에서 코틀린(Kotlin)을 공식 언어로 채택한 후 코틀린으로 앱을 개발하는 기업이 차츰 늘어나고 있습니다. 

구글은 2019년 Google I/O에서 코틀린 퍼스트를 선언하며 모든 문서에서 코틀린 코드를 먼저 노출하는 등 좀 더 강력하게 코틀린을 메인 언어로 지원하고 있습니다.

 코틀린으로 안드로이드 앱 개발하기: https://developer.android.com/kotlin

코틀린은 젯브레인 사가 만든 프로그래밍 언어입니다. 

여담으로 젯브레인(JetBrains)에서 만든 가장 유명한 프로그램은 인텔리제이라는 개발 툴이고, 이를 기반으로 2장에서 배울 안드로이드 스튜디오가 만들어졌습니다.

간략하게 코틀린의 역사를 도표로 살펴보겠습니다.

2021년 12월 시점에서 코틀린 최신 버전은 1.4.20입니다.

자바 어플 만들기 - jaba eopeul mandeulgi

함수형 프로그래밍 언어 코틀린

코틀린은 함수형 프로그래밍을 표방하고 있습니다. 객체지향 프로그래밍과 비교하자면 객체지향 프로그래밍은 클래스 내부에 있는 함수에서만 로직을 작성하지만, 함수형 프로그래밍은 이런 제한 없이 어디에서나 작성할 수 있습니다.

‘Hello World’를 출력하는 짧은 코드로 비교하면 다음과 같습니다.

》 자바 코드 - 객체지향 프로그래밍

class Hello {

    public static void main(String args[]) {

       System.out.print("Hello World");

    }

}

》 코틀린 코드 - 함수형 프로그래밍

System.out.print("Hello World");

앞서 다섯 줄짜리 자바로 이뤄진 코드가 한 줄짜리 코틀린 코드로 바뀐 것을 보고 여러분은 환호했을 겁니다. 하지만 안타깝게도, 안드로이드 앱을 개발할 때는 코틀린도 객체지향 언어처럼 클래스 내에서 로직을 작성해야 합니다. 

-뷰(Linear layout) 적인 개념은 (vertical, horizental로 블록 쌓는 개념은) 앞에서 Thunkable 같은 툴로 삽질해보면서 어느정도 감을 잡은 상태임.

-필요한 것은 자바에 대한 이해와 적용을 어떻게 해야하는 지에 대한 것

-이런 저런 자료를 계속 찾다가, Egoing 님의 자료 찾음

-동영상 강의 1회 완강(자바 - 자료형, 연산자, for & if 등등의 조건문, 함수, 객체지향, 등등) - 뭔 소린지 몰라도 그냥 안멈추고 계속 들음 

- 예제 등은 거의 안풀어봄

-안드로이드 개발시작 @_@

-뭐 만들지 대충 머릿속으로 생각하고 만들기 시작

-안드로이드 "생활코딩" 유튜브 강의, "홍드로이드" 유튜브강의, "센치한 개발자" 유튜브 강의 및 Android Document API(솔직히 하나도 도움안됨 - 어쩌라는 건지 모르겠음) , stackflow (뭔 개소리만 잔뜩있고, 해봐도 안됨) 로 공부 및 개발에 참고

 

 

2020년 02월 첫 앱 개발 및 출시

첫 쓰레기 앱

-만든 것: 베트남 급여 계산기 - 액티비티 3개(메인, 자료입력, 결과창)

-메인에서 시작키 누르면 자료 입력창으로 intent로 이동하고, 자료 입력창에서 급여 계산을 위한 정보를 받아, 다음 페이지에 들어가면 결과를 보여줌

-디자인은 figma로 했고, 처음해봐서 그런가 완전 ㅄ 그자체

자바 어플 만들기 - jaba eopeul mandeulgi
Figma를 처음 써봄
자바 어플 만들기 - jaba eopeul mandeulgi
실제 사용 환경

뭐, 전문가 들이 보기에는 병신 같아 보이겠지만, 나혼자서 유튜브 강의랑 인터넷 자료만 보고 만듬

개 힘들었음 -  첨에 intent 전달하는 것도 못해서 헉헉 댐 - 근데 만들고 나니까 쾌감이 개쩔었음

내 자식이라서 그런가 예뻐보임 ㅎㅎ

자바 어플 만들기 - jaba eopeul mandeulgi

 

2020년 07월 현재까지도 아무도 이따위 앱은 만들지 않음 - 어떨껼에 검색 1위 - 문제는 2위가 없음

 

자바 어플 만들기 - jaba eopeul mandeulgi

여태 설치 수는 500+ 이고 살아남은 기계 대수는 한 270대 정도 됨

 

2020년 2월, 3월, 4월 새직장을 구하다

-앱하나 만들고 방학이 끝나버림.

-애 둘에 마누라 먹여살릴려면 오래 쉴 수 없어서 2월에 직장 구하고 다시 출근

-첫 출근부터 회사에 감사(audit) 받아야하는 것이 생겨버려서, 그것도 내가 총괄로 맞아서(대체왜???!!) 해야해서 정말 개 바쁘게 2,3,4월 다 보내버림

-자바는 까맣게 잊어버림

 

2020년 5월 감사(audit) 준비가 어느정도 끝나고 마음속에 심심이가 발동

-2차 앱개발 시작

-Tabview를 통해서 1개의 Activity와 Fragment 간에 통신을 통해서 원하는 단어를 찾을 수 있는 웹뷰 사전을 만들어야겠다는 생각을 함

-Fragment 이 ㅅㄲ는  또 이것저것 어려운게 많았음, Bundle 같은 거로 받고 TabView도 어댑터라는 xx같은 것을 만들어야 하고, 특히 TabView 갯수를 정해줘야하는 부분이 있는데, 이부분에서 개 삽질의 연속..

이것땜에 한 7일간 삽질함. 

마지막에 TabView가 잘 안되는 이유를 알고 혼자 욕했음." 하.. 시바.. "

내 코드에도 주석으로 적혀있음..

자바 어플 만들기 - jaba eopeul mandeulgi

 

ㅋㅋㅋ 잘하는 사람들한테는 별거 아니겠지만, 이 1줄때문에 일주일동안 잠도 제대로 못잠.

일끝나고 stackflow를 전전긍긍..

 

 

2020년 6월 2번째 쓰레기 앱 출시
자바 어플 만들기 - jaba eopeul mandeulgi

-그냥 별거없음 TabView + Fragment + Webview 이 정도로 단순한 앱

-디자인 같은거 생각도 안함.

-위에 한 줄 코드땜에 기력 소진해버림

자바 어플 만들기 - jaba eopeul mandeulgi

-설치 수 100+

-현재 110명 정도 사용 중

-첫번째 만든 앱이 한 470명 까지 다운로드 받는거 봤었는데, 현재 200명 정도 빠져버린 것에 비하면, 이 앱은 적게 다운 받는 대신에 실 사용자가 많은 듯 함

 

2020년 7월 17일 오늘

-3번째 앱 출시

자바 어플 만들기 - jaba eopeul mandeulgi

-방금 출시하여 게시 대기 중에 있음

자바 어플 만들기 - jaba eopeul mandeulgi

-이번에는 나름 디자인의 중요성을 깨닫고, 디자인 유튜브 강의도 좀 보고, 폰트, 정렬, 색상 등등을 고려하며 제작하였음

-기능구현은 특별히 어려운 것이 없었으나..뉴스, 로또번호 생성기, 쇼핑 등..

-의외로 즐겨찾기를 구현하는 것이 상당히 빡샜다. - 처음으로 Json-Gson 이라는 것을 사용해봄

-WebView + Custom Dialog, ListView, RecyclerView, 각 adapter, 반복문, if 문, try-catch, 등등 하여튼 여태까지 배운 것, 또는 모르는 것 등등 다 접목하여 무한한 삽질끝에 오늘 완료

-즐겨찾기 기능에서 수정 기능은 좀 더 삽질하면 만들 수 있었는데, 도저히 지쳐서 그냥 삭제 해버림

2020.07.22 현재 구글 스토어에 등록 완료 되었다!!
어떤 앱인지 궁금하면 하면 아래의 링크에서 다운로드에서 사용해 보시길 ㅎ
참고로 안드로이드에서만 돌아간다!

https://play.google.com/store/apps/details?id=com.forthepeople.newpaper

 

오늘의 신문 - Google Play 앱

아재들을 위한 신문보기 앱 입니다.

play.google.com

 

Flutter vs. JavaScript

-HTML, CSS, JavaScript

약 3주? 정도 위의 앱을 만들면서 솔직히 머리도 아프고 스트레스도 좀 받아서 HTML, CSS 를 좀 들여다봄.

"오 이거 할만한데" 라는 생각이 들 정도로, Java native- android native보다 할만해 보임

JavaScript도 불론 파고들면 어렵겠지만, Java 만큼 딱딱한 언어가 아닌 것 같은 느낌이 많이 들어서 해볼만하다는 생각이 듬

 

-Flutter

어제, 오늘 Flutter를 좀 구경하고 있는 중임

Dart는 보니까 뭔가 시궁창 같으면서도 귀여운 녀석인 것 같고, Java랑 javascript를 짜집기 해놓은 마냥 해보임

Flutter를 구경해보고 싶었던 이유는 '디자인'임

어떤 동영상에서 개발자가 7시간인가? 그안에 카드뷰 같이 좌우로 또는 위아래로 애니메이션으로 움직이면서 작동하는 앱을 만들었는데, 오쒯, 문화충격이었음(완죤 이쁨)

더 자세히 알아보니, Flutter로 구현가능한 것으로 보임. Flutter를 익히면 꼭 android & IOS 동시 개발를 한다는 취지보다도, (어차피 IOS 마켓에 올릴려면 맥북도 질러야할테니-_-) 쿠퍼티노? 디자인과 안드로이드 머터리얼 디자인을 써보고 싶어서라도 한번 배워는 보고 싶음.

 

-결론

그래서 결론적으로, 이후에  Flutter로 더 아름다운 디자인의 4번째 앱을 출시할 것인가(어차피 Apple 앱은 출시할 생각없음- 맥북도 없고, 하여튼 실력도 없고) 또는 HTML, CSS, Javascript(vanilla 학습후에 - React, Jquery 등도 공부해야겠지만) 학습후에 웹 서비스 개발로 눈을 돌릴 것인가.. 이것을 결정하고 싶다.

안드로이드 네이티브 개발은 현재 1인/초보 개발자로써 충분히 한계에 직면했다.(창의력의 한계 ㅋㅋ)

디자인/코딩의 구현 질 및 시간소요 등을 고려했을 때, 앱관련의 심화를 위한다면 Flutter를 또는 앱에 한정되지 않고, 좀 더 넓게 웹서비스를 구현하고자 한다면 프론트 엔드 쪽으로 공부를 해봐야 할 것 같다.