그루비로 안드로이드 앱 개발하기

23
그루비로 안드로이드 앱 개발하기 Developing Android Applications with Groovy 남 상 균 소프트웨어 엔지니어

Transcript of 그루비로 안드로이드 앱 개발하기

Page 1: 그루비로 안드로이드 앱 개발하기

그루비로 안드로이드 앱 개발하기 Developing Android Applications with Groovy

남 상 균 소프트웨어 엔지니어

Page 2: 그루비로 안드로이드 앱 개발하기
Page 3: 그루비로 안드로이드 앱 개발하기
Page 4: 그루비로 안드로이드 앱 개발하기

C

C++

Java

Objective-C

Ruby

Python

Perl

Javascript

Lua

Groovy

Developer Productivity

App Perfo

rmance

Page 5: 그루비로 안드로이드 앱 개발하기

그루비란?

•자바 플랫폼에서 실행되는 객채 지향 프로그래밍 언어

•파이썬, 루비, 스몰토크 등에 영향을 받은 동적 타이핑 프로그래밍 언어

•기존 자바 프로그래머에 낮은 학습비용으로 최신 프로그래밍 기법 제공

•도메인 전문 언어와 단순화된 문법으로 향상된 코드 가시성과 유지 보수성 지원

Page 6: 그루비로 안드로이드 앱 개발하기

1983 Objective-C

Java 1995

2006 Objective-C 2.0

Java SE 6 2006

2014 Swift

Groovy 2003

Groovy 2.0 2012

iOS의 스위프트와 안드로이드의 그루비

Page 7: 그루비로 안드로이드 앱 개발하기

그루비 vs. 스위프트

var memberList = ["Nam Sangkyoon", "Park Yeonjin", "Ari"] memberList[2] = "Nam Dahyeon" var emptyList = []

var profile = [ "name": "Hong gildong", "occupation": "Software Engineer", ] profile["e-mail"] = "[email protected]" var emptyMap = [:]

def memberList = ["Nam Sangkyoon", "Park Yeonjin", "Ari"] memberList[2] = "Nam Dahyeon" def emptyList = []

def profile = [ "name": "Hong gildong", "occupation": "Software Engineer", ] profile["e-mail"] = "[email protected]" def emptyMap = [:]

•List and Map

Groovy

Swift

Page 8: 그루비로 안드로이드 앱 개발하기

Swift

Groovy

Swift

그루비 vs. 스위프트

numbers.collect { int number -> def result = 3 * numbers return result

}

numbers.map({ (number: Int) -> Int in let result = 3 * number return result

})

•Closure

•Implict Variables

numbers.map({ 3 * $0 }) numbers.map({ it in 3 * it })

numbers.collect { 3 * it }

Groovy

Page 9: 그루비로 안드로이드 앱 개발하기

그루비 vs. 스위프트

sort([1, 5, 3, 12, 2]) { a, b -> a > b } // or possibly, if we pass an array as param sort([1, 5, 3, 12, 2]) { it[0] > it[1] }

•Closures as Method Argument

•Named Parameter

def newbie = new Person(name: "Hong gildong", age: 32)

var newbie = new Person(name: "Hong gildong", age: 32)

sort([1, 5, 3, 12, 2]) { $0 > $1 }

Groovy

Swift

Groovy

Swift

Page 10: 그루비로 안드로이드 앱 개발하기

그루비 vs. 스위프트

class DataManager { @lazy var importer = DataImporter()

}

•Lazy transformation

Groovyclass DataManager { @Lazy importer = new DataImporter()

}

Swift

Page 11: 그루비로 안드로이드 앱 개발하기

그루비 vs. 스위프트

let john = Person() if let roomCount = john.residence?.numberOfRooms { println("John's residence has \(roomCount) room(s).")

} else { println("Unable to retrieve the number of rooms.")

}

def john = new Person() def roomCount = john.residence?.numberOfRooms if (roomCount) { println "John's residence has ${roomCount} room(s)."

} else { println "Unable to retrieve the number of rooms."

}

•Safe Navigation Operator

Groovy

Swift

Page 12: 그루비로 안드로이드 앱 개발하기

Developing Android Applications with Groovy? Cédric Champeau

어떻게 안드로이드에 그루비를 적용할 수 있을까?

Page 13: 그루비로 안드로이드 앱 개발하기

그루비 온 안드로이드의 문제 GR8 Conf. Europe 2014

Dalvik VM ≠ Java VM

Page 14: 그루비로 안드로이드 앱 개발하기

해결과정 GR8 Conf. Europe 2014

[ 과정 1 ]

•그루비로 생성된 바이트코드를 파일로 저장

•이를 jar로 패키징

•전용 클래스로더를 사용하여 해당 클래스들을 처리

[ 결과 ]

•너무 느리게 동작

•I/O 처리에 대한 접근이 크게 증가

Page 15: 그루비로 안드로이드 앱 개발하기

해결과정 GR8 Conf. Europe 2014

[ 과정 2 ]

•ASMDex라는 자바 바이트코드 조작 라이브러리 사용

•그루비 코어에 대한 패치를 요청, 제한적으로 그루비 2.4.x에 반영

[ 결과 ]

•100% 그루비로 작성된 코드로 안드로이드 앱이 구동

Page 16: 그루비로 안드로이드 앱 개발하기

잘 동작합니다! GR8 Conf. Europe 2014

https://github.com/melix/gr8confagenda

•애플리케이션 크기: 2MB

•프로가드 적용 후 크기: 1MB

•~ 8.2MB 램 사용

Page 17: 그루비로 안드로이드 앱 개발하기

연습: Hello Groovy!

Page 18: 그루비로 안드로이드 앱 개발하기

buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:0.13.2' classpath 'me.champeau.gradle:gradle-groovy-android-plugin:0.3.0' } }

apply plugin: 'me.champeau.gradle.groovy-android'

dependencies { compile 'org.codehaus.groovy:groovy:2.4.0-beta-3' }

build.gradle 업데이트

Page 19: 그루비로 안드로이드 앱 개발하기

package org.namsansg.groovyonandroidtest;

import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import groovy.transform.CompileStatic;

@CompileStatic class MainActivity extends Activity {

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

String messageText = "Hello Groovy!"; def message = findViewById(R.id.message) as TextView message.text = messageText; } }

그루비 코드 작성

•@ComplieStatic을 반드시 사용

•런타임시 클래스 생성 피함

Page 20: 그루비로 안드로이드 앱 개발하기

그루비 온 안드로이드: Hello Groovy!

Page 21: 그루비로 안드로이드 앱 개발하기

@CompileStatic class MainActivity extends Activity { ... class SomeAsyncTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { new URL(params[0]).text }

@Override protected void onPostExecute(String result) { textView.setText(result) } } }

그루비 온 안드로이드의 장점

•Inner-Class Hell

@CompileStatic class MainActivity extends Activity { ... Fluent.async { new URL(params[0]).text } then { textView.setText(it) } }

•단순하고 간결한 코드로 쉽고 빠른 개발

Page 22: 그루비로 안드로이드 앱 개발하기

그루비 온 안드로이드의 미래

•아직 시작단계, 플러그인 안정화가 필요

•디버거, 추가적인 API 지원 등 그루비 온 안드로이드에 유용한 툴 개발 및 에코 시

스템 구축

•iOS의 스위프트, 안드로이드의 그루비로 보다 개발자가 행복한 세상

Page 23: 그루비로 안드로이드 앱 개발하기

감사합니다

예제 코드는 아래에 공유되었습니다.

https://github.com/sangkyoonnam/groovy-on-android-helloworld

추가로 구현한 예제 코드는 아래에 공유될 예정입니다.

https://github.com/sangkyoonnam/goorvy-on-android-simple-offerwall

문의사항은 [email protected]로 메일 주시기 바랍니다.