Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
그루비로 안드로이드 앱 개발하기 
Developing Android Applications with Groovy 
남 상 균 
소프트웨어 엔지니어
C 
C++ 
Objective-C 
Java 
Ruby 
Python 
Javascript 
Perl 
Groovy 
Lua 
Developer Productivity 
App Performance
그루비란? 
• 자바 플랫폼에서 실행되는 객채 지향 프로그래밍 언어 
• 파이썬, 루비, 스몰토크 등에 영향을 받은 동적 타이핑 프로그래밍 언어 
• 기존 자바 프로그래머에 낮은 학습비용으로 최신 프로그래밍 기법 제공 ...
iOS의 스위프트와 안드로이드의 그루비 
1983 
Objective-C 
Java 
1995 
Java SE 6 
2006 
2006 
Objective-C 2.0 
2014 
Swift 
Groovy 
2003 
G...
그루비 vs. 스위프트 
• List and Map 
def memberList = ["Nam Sangkyoon", "Park Yeonjin", "Ari"] 
memberList[2] = "Nam Dahyeon" 
de...
그루비 vs. 스위프트 
Swift 
Groovy 
Swift 
• Closure 
numbers.collect { int number -> 
def result = 3 * numbers 
return result 
}...
그루비 vs. 스위프트 
• Closures as Method Argument 
sort([1, 5, 3, 12, 2]) { a, b -> a > b } 
// or possibly, if we pass an array...
그루비 vs. 스위프트 
• Lazy transformation 
class DataManager { 
@lazy var importer = DataImporter() 
} 
Groovy 
class DataManage...
그루비 vs. 스위프트 
• Safe Navigation Operator 
def john = new Person() 
def roomCount = john.residence?.numberOfRooms 
if (room...
어떻게 안드로이드에 그루비를 적용할 수 있을까? 
Developing Android Applications with Groovy? 
Cédric Champeau
그루비 온 안드로이드의 문제 GR8 Conf. Europe 2014 
Dalvik VM ≠ Java VM
해결과정 GR8 Conf. Europe 2014 
[ 과정 1 ] 
• 그루비로 생성된 바이트코드를 파일로 저장 
• 이를 jar로 패키징 
• 전용 클래스로더를 사용하여 해당 클래스들을 처리 
[ 결과 ] 
• 너무 ...
해결과정 GR8 Conf. Europe 2014 
[ 과정 2 ] 
• ASMDex라는 자바 바이트코드 조작 라이브러리 사용 
• 그루비 코어에 대한 패치를 요청, 제한적으로 그루비 2.4.x에 반영 
[ 결과 ] 
•...
잘 동작합니다! GR8 Conf. Europe 2014 
• 애플리케이션 크기: 2MB 
• 프로가드 적용 후 크기: 1MB 
• ~ 8.2MB 램 사용 
https://github.com/melix/gr8confage...
연습: Hello Groovy!
build.gradle 업데이트 
buildscript { 
repositories { 
jcenter() 
} 
dependencies { 
classpath 'com.android.tools.build:gradle:...
그루비 코드 작성 
package org.namsansg.groovyonandroidtest; 
import android.app.Activity; 
import android.os.Bundle; 
import andr...
그루비 온 안드로이드: Hello Groovy!
그루비 온 안드로이드의 장점 
• Inner-Class Hell 
@CompileStatic 
class MainActivity extends Activity { 
... 
class SomeAsyncTask exten...
그루비 온 안드로이드의 미래 
• 아직 시작단계, 플러그인 안정화가 필요 
• 디버거, 추가적인 API 지원 등 그루비 온 안드로이드에 유용한 툴 개발 및 에코 시 
스템 구축 
• iOS의 스위프트, 안드로이드의 그루...
감사합니다 
예제 코드는 아래에 공유되었습니다. 
https://github.com/sangkyoonnam/groovy-on-android-helloworld 
추가로 구현한 예제 코드는 아래에 공유될 예정입니다. 
h...
GKAC 2014 Nov. - 그루비로 안드로이드 앱 개발하기
GKAC 2014 Nov. - 그루비로 안드로이드 앱 개발하기
Nächste SlideShare
Wird geladen in …5
×

GKAC 2014 Nov. - 그루비로 안드로이드 앱 개발하기

GDG Korea Android Conference (11월) 세션 자료입니다.

세션 영상: http://www.youtube.com/watch?v=4HHIP_KgTrg

  • Loggen Sie sich ein, um Kommentare anzuzeigen.

GKAC 2014 Nov. - 그루비로 안드로이드 앱 개발하기

  1. 1. 그루비로 안드로이드 앱 개발하기 Developing Android Applications with Groovy 남 상 균 소프트웨어 엔지니어
  2. 2. C C++ Objective-C Java Ruby Python Javascript Perl Groovy Lua Developer Productivity App Performance
  3. 3. 그루비란? • 자바 플랫폼에서 실행되는 객채 지향 프로그래밍 언어 • 파이썬, 루비, 스몰토크 등에 영향을 받은 동적 타이핑 프로그래밍 언어 • 기존 자바 프로그래머에 낮은 학습비용으로 최신 프로그래밍 기법 제공 • 도메인 전문 언어와 단순화된 문법으로 향상된 코드 가시성과 유지 보수성 지원
  4. 4. iOS의 스위프트와 안드로이드의 그루비 1983 Objective-C Java 1995 Java SE 6 2006 2006 Objective-C 2.0 2014 Swift Groovy 2003 Groovy 2.0 2012
  5. 5. 그루비 vs. 스위프트 • List and Map def memberList = ["Nam Sangkyoon", "Park Yeonjin", "Ari"] memberList[2] = "Nam Dahyeon" def emptyList = [] def profile = [ "name": "Hong gildong", "occupation": "Software Engineer", ] profile["e-mail"] = "hong.gildong@gmail.com" def emptyMap = [:] var memberList = ["Nam Sangkyoon", "Park Yeonjin", "Ari"] memberList[2] = "Nam Dahyeon" var emptyList = [] var profile = [ "name": "Hong gildong", "occupation": "Software Engineer", ] profile["e-mail"] = "hong.gildong@gmail.com" var emptyMap = [:] Groovy Swift
  6. 6. 그루비 vs. 스위프트 Swift Groovy Swift • Closure numbers.collect { int number -> def result = 3 * numbers return result } numbers.map({ (number: Int) -> Int in let result = 3 * number return result }) • Implict Variables numbers.collect { 3 * it } numbers.map({ 3 * $0 }) numbers.map({ it in 3 * it }) Groovy
  7. 7. 그루비 vs. 스위프트 • Closures as Method Argument 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] } sort([1, 5, 3, 12, 2]) { $0 > $1 } • Named Parameter def newbie = new Person(name: "Hong gildong", age: 32) var newbie = new Person(name: "Hong gildong", age: 32) Groovy Swift Groovy Swift
  8. 8. 그루비 vs. 스위프트 • Lazy transformation class DataManager { @lazy var importer = DataImporter() } Groovy class DataManager { @Lazy importer = new DataImporter() } Swift
  9. 9. 그루비 vs. 스위프트 • Safe Navigation Operator 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." } 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.") } Groovy Swift
  10. 10. 어떻게 안드로이드에 그루비를 적용할 수 있을까? Developing Android Applications with Groovy? Cédric Champeau
  11. 11. 그루비 온 안드로이드의 문제 GR8 Conf. Europe 2014 Dalvik VM ≠ Java VM
  12. 12. 해결과정 GR8 Conf. Europe 2014 [ 과정 1 ] • 그루비로 생성된 바이트코드를 파일로 저장 • 이를 jar로 패키징 • 전용 클래스로더를 사용하여 해당 클래스들을 처리 [ 결과 ] • 너무 느리게 동작 • I/O 처리에 대한 접근이 크게 증가
  13. 13. 해결과정 GR8 Conf. Europe 2014 [ 과정 2 ] • ASMDex라는 자바 바이트코드 조작 라이브러리 사용 • 그루비 코어에 대한 패치를 요청, 제한적으로 그루비 2.4.x에 반영 [ 결과 ] • 100% 그루비로 작성된 코드로 안드로이드 앱이 구동
  14. 14. 잘 동작합니다! GR8 Conf. Europe 2014 • 애플리케이션 크기: 2MB • 프로가드 적용 후 크기: 1MB • ~ 8.2MB 램 사용 https://github.com/melix/gr8confagenda
  15. 15. 연습: Hello Groovy!
  16. 16. build.gradle 업데이트 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' }
  17. 17. 그루비 코드 작성 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을 반드시 사용 • 런타임시 클래스 생성 피함
  18. 18. 그루비 온 안드로이드: Hello Groovy!
  19. 19. 그루비 온 안드로이드의 장점 • Inner-Class Hell @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) } } } • 단순하고 간결한 코드로 쉽고 빠른 개발 @CompileStatic class MainActivity extends Activity { ... Fluent.async { new URL(params[0]).text } then { textView.setText(it) } }
  20. 20. 그루비 온 안드로이드의 미래 • 아직 시작단계, 플러그인 안정화가 필요 • 디버거, 추가적인 API 지원 등 그루비 온 안드로이드에 유용한 툴 개발 및 에코 시 스템 구축 • iOS의 스위프트, 안드로이드의 그루비로 보다 개발자가 행복한 세상
  21. 21. 감사합니다 예제 코드는 아래에 공유되었습니다. https://github.com/sangkyoonnam/groovy-on-android-helloworld 추가로 구현한 예제 코드는 아래에 공유될 예정입니다. https://github.com/sangkyoonnam/goorvy-on-android-simple-offerwall 문의사항은 nam.sangkyoon@namsang.org로 메일 주시기 바랍니다.

×