웹/모바일 안드로이드 기초

1.2 안드로이드 개발환경 구축

안드로이드 개발 개요

앞에서 살펴본것 처럼 안드로이드는 기본적으로 자바(Java)로 개발 합니다. 그런데 2017년 구글은 Google I/O 개발자 컨퍼런스에서 코틀린(Kotlin)이라고 하는 언어를 안드로이드 공식언어로 추가 했습니다.

구글이 코틀린을 개발언어로 추가한 배경과 개발언어의 선택등은 뒤에서 좀 더 자세히 살펴보기로 합니다.

우선 안드로이드 소스코드 작성에서 컴파일 실행에 이르는 과정을 살펴보면 다음과 같습니다. 실제로는 좀 더 복잡한 과정을 거치지만 여기서는 전반적인 흐름과 구조의 이해에 포커스를 둡니다.

[그림: 안드로이드 컴파일 및 실행과정]
  1. 안드로이드 스튜디오를 이용해 자바 혹은 코틀린 언어로 코드를 작성.
  2. ART 에서 실행가능한 Dex byte code 로 변환.
  3. 안드로이드 장치에 설치가능한 APK 파일로 패키징.
  4. 플레이 스토어 배포 혹은 수동 설치 및 ART 에서 실행.

1~3 번까지의 과정은 안드로이드 개발 도구인 안드로이드 스튜디오를 통해 이루어지며 APK 파일로 만들어진 앱은 플레이 스토어에 등록하는 과정을 거쳐 사용자의 스마트폰에 설치 되거나 직접 파일을 수동 설치(권장되지는 않음) 하는 것이 가능합니다.

앱의 실행은 안드로이드 런타임인 ART를 통해 구동 됩니다.

개발과정에서는 에뮬레이터를 통해 가상머신으로 구동되는 안드로이드 장치를 이용해 테스트가 진행되며 경우에 따라 실제 기기를 연결해 테스트 하는 것도 가능합니다.

최근에는 에뮬레이터나 개발 컴퓨터의 성능이 많이 좋아졌지만 가상으로 안드로이드 기기를 구동하기 때문에 성능상의 문제로 단순한 기능 동작을 모두 에뮬레이터로 테스트하는 방식은 효율이 많이 떨어집니다.


자바와 코틀린

모던 프로그래밍 언어(Modern Programming Language)

자바는 안드로이드가 처음 나왔을때 부터 공식적인 개발 언어 였습니다. 자바가 처음 나온것은 1995년이며 그당시에는 C언어에 비해 최신의 언어 였습니다. 그렇지만 2020년 현재 자바는 탄생한지 25년이나 되는 OLD한 언어가 되었습니다.

물론 자바는 현재 가장 많은 사용자와 적용 분야를 자랑하는 프로그래밍 언어임이 분명하고 발전을 거듭해 왔지만 최신의 언어들과는 구조와 코딩 스타일에 차이가 발생했기 때문에 한동안 Scala, Clojure 등의 JVM 기반 언어들이 널리 사용 되었습니다.

코틀린(Kotlin)은 유명한 개발도구 제작 회사인 Jetbrains 에서 2011년 발표한 오픈소스 프로그래밍 언어 입니다. 현재 가장 최신의 프로그래밍언어라고 한다면 코틀린과 스위프트(swift)를 꼽을수 있습니다. 스위프트는 애플이 2014년 발표한 iOS, Mac OS 개발을 위한 언어 입니다.

Jetbrains 은 통합개발도구(IDE)를 개발하는 전문 소프트웨어 회사로 IntelliJ IDEA, Pycharm 등으로 유명 합니다. 안드로이드 스튜디오는 바로 IntelliJ IDEA community edtition을 기반으로 제작 되었습니다.

이들 언어는 모던 프로그래밍언어(Modern programming language) 라고 불리우며 다음과 같은 특징을 가지고 있습니다.

오픈소스

프로그래밍 언어를 사용하는데 있어 라이센스에서 자유롭습니다. 오늘날과 같이 모든 곳에 소프트웨어가 사용되는 시대에 프로그래밍 언어에 대한 저작권은 도입에 장애가 되고 중앙적인 코드 통제는 시대의 발전을 따라가기 어렵습니다. 특히 구글-오라클 간의 자바 라이센스 분쟁을 통해 배운것이 많고 특히 오라클의 자바 상용화 정책으로 인해 복잡하게 고려할 것 없는 완전히 자유로운 프로그래밍 언어에 대한 필요성이 대두되게 되었습니다.

클라이언트 및 서버 지원

데스크톱, 모바일 등 클라이언트 개발 뿐만 아니라 데이터베이스 연동이나 레거시 시스템과 연동을 위한 서버 프로그램 개발이 가능합니다. 즉, 하나의 언어로 클라이언트와 서버 모두 개발이 가능하기 때문에 개발자들이 다른 언어를 배울 필요가 없습니다.

간결한 코드

일반적으로 특정 구조를 위해 반복적 혹은 형식적으로 사용되는 코드라는 의미의 boilerplate code 를 줄여줘 보다 간결한 코드를 작성하는데 도움을 줍니다. 예를 들면 다음과 같은 특징들이 있습니다.

함수형 프로그래밍 지원

함수형 프로그래밍은 함수구조를 프로그램 코드에 광범위하게 활용하는 방법으로 기존의 프로그래밍 구조와 접근하는 방법이 차이가 있습니다. 보통 함수를 1급객체(1st class object)로 사용할 수 있는 구조의 프로그래밍언어들을 함수형 프로그래밍 언어라고 이야기 합니다.

1급객체의 특징은 다음과 같습니다.

Null 처리의 효율성

자바언어를 사용하다 보면 무수히 만나게 되는 문제가 Null pointer exception 입니다. 즉 초기화 되지 않은 객체를 사용할때 발생하는 예외 상황으로 자바에서는 try~catch 블럭을 이용해 예외 처리를 해주거나 if 문으로 null 체크를 해주어야 합니다.

원래 예외처리의 개념은 프로그램의 런타임 오류를 사전에 대비할 수 있는 좋은 개념이지만 구조적으로 불편하고 형식적인 코드들이 많아 효율성이 떨어집니다.

보통 모던 프로그래밍 언어에서는 Optional 이라는 개념을 도입해 이러한 Null 객체 참조로 인한 예외 처리를 보다 간결하게 처리할 수 있도록 지원 합니다.

코틀린(Kotlin)

코틀린은 앞에서 설명한 모던 프로그래밍 언어로 최신 언어들의 장점을 모두 가지고 있으며 무엇보다 자바와 완벽하게 호환되는 특징이 있습니다.

코틀린은 기본적으로 컴파일후 자바 바이트코드를 생성하게 되므로 결국 자바 소스로 만든 프로그램들과 호환이 가능한 구조가 됩니다. 예전에도 JVM 기반의 언어들이 있었지만 코틀린의 경우 가장 최신언어이고 안드로이드 개발에 사용되면서 사용자가 급속하게 증가하고 있습니다.

기본적으로 자바로 2-3년 정도의 개발 경력이 있다면 코틀린으로 전환하는데 크게 어려움이 없다고 이야기 합니다. 또한 자바8 이후에 등장한 람다, 스트림API 등을 자유롭게 다루었다면 코틀린을 더욱 쉽게 배울수 있습니다.

이처럼 코틀린은 최신 언어의 간결함과 편리함을 모두 제공하고 검증된 자바 가상머신을 활용하므로 실제 프로젝트에 코틀린을 바로 적용하는 데에는 아무런 문제가 없습니다.

안드로이드 개발언어 선택

그렇다면 과연 안드로이드 개발에 어떤 언어를 선택해야 할까요?

결론을 먼저 말하면 언떤 언어를 선택하든 상관이 없습니다. 이유는 다음과 같습니다.

자바 선택

코틀린 선택

자바는 오랫동안 검증된 언어 이며 특히 JVM 기술은 하루 아침에 없어지기는 힘들것입니다. 다만 새로운 경향의 프로그래밍 스타일을 익히고 활용하고자 한다면 코틀린을 그렇지 않고 기존의 시스템 개발영역을 포함해 모바일 영역까지를 경험해 본다면 자바를 추천 합니다.



안드로이드 스튜디오

구글의 공식 안드로이드 개발 도구 입니다. 안드로이드 스튜디오 이외에 안드로이드 개발을 지원하는 클로스 플랫폼 개발 도구들이 있습니다만 처음 안드로이드를 시작한다면 당연히 안드로이드 스튜디오에서 시작하는 것이 좋습니다.

[그림: 안드로이드 스튜디오 실행화면]

안드로이드 스튜디오를 사용하기 위해서는 자바 JDK가 필요합니다. 만일 기존 컴퓨터에 JDK 가 설치되어 있다면 새로 설치할 필요는 없습니다. 다만 자바의 라이센스정책 변화로 인해 JDK11 LTS 버전을 설치할 것을 권장하며 선호도에 따라 Open JDK를 설치할 수도 있습니다.

만일 안드로이드 개발만 한다고 하면 안드로이드 스튜디오 자체에 내장된 JDK를 사용할수 있으므로 별도의 JDK 설치는 필요없습니다만 Java, JSP, Spring framework 등 다른 자바 관련 개발을 병행하고 있다면 별도의 JDK 설치가 권장 됩니다.

안드로이드 스튜디오를 설치하는 방법은 다음의 세가지 방식이 있습니다.

어떤 방법이든 상관없으나 Jetbrains 도구들을 많이 사용하고 있다면 통합 관리가 편한 toolbox 이용을 권장 합니다.

안드로이드 스튜디오 구조

안드로이드 스튜디오는 크게 Navigation, Toolbar, Project pane, Editor 영역으로 이루어져 있습니다.

[그림: 안드로이드 스튜디오 화면구성]

그외 윈도우 주변에는 Sidebar 라고 해서 탭 형태로 클릭하면 각종 플러그인이나 기능들이 조그만 창을 통해 나타납니다.



실습 및 참고자료

실습01: 안드로이드 스튜디오 설치

안내에 따라 안드로이드 스튜디오를 설치합니다. Windows, Mac OS, Linux 모두 동일하게 사용 가능합니다. 여기서는 기본적으로 Windows10 을 기준으로 합니다. 다른 운영체제는 참고자료의 안드로이드 스튜디오 링크를 확인해 주세요.

JDK 설치

JDK 는 Java Development Kit 의 약어로 자바 컴파일러와 디버거등이 포함된 개발 도구 입니다. 단순히 자바를 실행하는 경우에는 JRE(Java Runtime Environment)만 있어도 됩니다.

아래 동영상에서 JDK 설치 부분만 따라하고 이클립스 설치는 하지 않습니다.

안드로이드 스튜디오 설치

안드로이드 스튜디오 홈페이지에서 운영체제에 맞는 버전을 다운로드 하거나 Jetbrains toolbox 설치후 다운로드 합니다.


실습02: SDK 및 AVD 설정

안드로이드 버전에 따른 SDK 및 가상 안드로이드 디바이스인 AVD 설치를 알아 봅니다. 안드로이드 앱을 개발하고 실행하기 위해 반드시 필요한 과정 입니다.

안드로이드 스튜디오 시작 화면에서 Configure 메뉴를 선택하거나 시작후 환경설정에서 SDK Manager, AVD Manager 를 실행해 설정할 수 있습니다.

SDK는 Software Development Kit 으로 안드로이드 SDK 는 특정 안드로이드 버전의 소프트웨어를 개발하기 위해 필요한 각종 안드로이드 시스템 이미지(OS), 라이브러리, 소스코드, 플레이 스토어 지원 등이 포함되어 있습니다. 기본적으로 안드로이드 10(Q) 버전이 설치되어 있으며 추가로 필요한 버전은 언제든지 다운로드할 수 있습니다.

본 강좌에서는 Android SDK 10.0(Q)를 기본으로 사용하고 앱 호환성은 7.0(Nougat)로 제한 합니다.

Target API Level 은 가능한 최신 버전을 사용하는 것이 좋습니다. 구글의 플레이스토어 업데이트 기준이 점점 최신 OS를 요구하고 있으며 보안상의 문제등으로도 최신 버전을 사용하는 것이 좋습니다. 다만 최소 호환 요구 버전을 지정하는 minSdkVersion 설정의 경우 별다른 제약은 없지만 최신 라이브러리나 코딩경향을 따라가려면 최소 7.0 이상 가능한 8.0 이상을 설정하는 것이 학습에 도움이 됩니다.

AVD는 Android Virtual Device의 약어로 쉽게 말하면 가상머신으로 구동하는 안드로이드 스마트폰 이라고 볼 수 있습니다. 앱 개발 테스트에 실제 스마트폰을 연결해 사용할 수 있으나 기본적으로는 에뮬레이터를 이용해 테스트를 진행합니다. 물론 배포를 위해 제작된 앱의 경우 실제 기기 테스트가 매우 중요 하지만 학습단계에서는 에뮬레이터로 충분 합니다.

AVD는 사용자가 특정 스마트폰 모델 규격을 지정할 수 있지만 지나치게 화면이 큰 모델을 선택할 경우 속도가 느려질 수 있으므로 5.46인치 크기를 가지는 Pixel 3 정도를 추천 합니다. System Image 선택 화면에서는 Android API Level 29 Q버전을 선택 합니다. Download 를 선택해 다운로드가 완료되어야 다음단계로 진행이 됩니다.

[그림: AVD 시스템 이미지 선택]

참고자료