Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goodbye 버터나이프, Hellow 데이터바인딩 | 170218 | GDG Inc...
Search
Ted Park
February 18, 2017
Programming
0
92
Goodbye 버터나이프, Hellow 데이터바인딩 | 170218 | GDG Incheon 2월 정기 모임
https://sites.google.com/view/gdgincheon17feb/%EC%86%8C%EA%B0%9C
Ted Park
February 18, 2017
Tweet
Share
More Decks by Ted Park
See All by Ted Park
헤이딜러에서는 어떻게 일하나요?222 | 190804 | [안드로이드 컨퍼런스]우리 회사는 이렇게 개발해요
gun0912
0
860
코틀린 꼭 해야하나요? | 20190405 | 드로이드나이츠2019
gun0912
0
270
헤이딜러에서는 어떻게 일하나요? | 18.11.25 | [안드로이드 컨퍼런스]우리는 안드로이드 개발자입니다
gun0912
0
340
모바일 마케팅과 Firebase가 만났을때 | 181003 | [마케팅 컨퍼런스]우리는 마케터입니다
gun0912
0
47
스타트업? 그거 내가 해봐서 아는데 | 180729 | [개발자 컨퍼런스]우리는 개발자입니다
gun0912
0
46
Firebase Dynamic Link로 사용자유입시키기 | 20190405 | 드로이드나이츠2018
gun0912
0
200
안드로이드 빌드시간 최적화하기 | 170923 | 안드로이드 개발자 모임
gun0912
0
69
나도 라이브러리를 만들수있다 | 170429 | [안드로이드 개발 Q&A및 팁]오픈채팅방 모임
gun0912
0
51
사용자는 서비스의 문제점에 대해 말하지 않는다
gun0912
0
54
Other Decks in Programming
See All in Programming
Devoxx BE - Local Development in the AI Era
kdubois
0
130
PHPに関数型の魂を宿す〜PHP 8.5 で実現する堅牢なコードとは〜 #phpcon_hiroshima / phpcon-hiroshima-2025
shogogg
1
290
ALL CODE BASE ARE BELONG TO STUDY
uzulla
25
6.4k
Claude Agent SDK を使ってみよう
hyshu
0
1.3k
Leading Effective Engineering Teams in the AI Era
addyosmani
7
510
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
350
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
170
Writing Better Go: Lessons from 10 Code Reviews
konradreiche
0
2.9k
Flutterで分数(Fraction)を表示する方法
koukimiura
0
140
20251016_Rails News ~Rails 8.1の足音を聴く~
morimorihoge
2
580
CSC305 Lecture 08
javiergs
PRO
0
250
Building, Deploying, and Monitoring Ruby Web Applications with Falcon (Kaigi on Rails 2025)
ioquatix
4
2.3k
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
A Tale of Four Properties
chriscoyier
161
23k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
115
20k
Embracing the Ebb and Flow
colly
88
4.9k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
600
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.5k
Making Projects Easy
brettharned
120
6.4k
Transcript
Goodbye 버터나이프, Hello 데이터바인딩 2017.02.18 박상권
Goodbye 버터나이프, Hello 데이터바인딩 XML 2
Goodbye 버터나이프, Hello 데이터바인딩 기본 View 3 ― findViewById() 노가다의
연속.. ― 100개, 1000개의 View가 있는 레이아웃이라면?
Goodbye 버터나이프, Hello 데이터바인딩 버터나이프 View 4 ― 버터나이프의 마법
― 한번도 안 써본 사람은 있어도 한번만 써본 사람은 없다 ― 사랑합니다 Jake Wharton
Goodbye 버터나이프, Hello 데이터바인딩 하지만 데이터바인딩을 쓴다면 어떨까?
Goodbye 버터나이프, Hello 데이터바인딩 데이터바인딩 View 6 ― 아무것도 안해도
됨 (사실 몇 개 해줄거 있음) ― 실화임
Goodbye 버터나이프, Hello 데이터바인딩 데이터바인딩 필요사항 및 설정 7 필요사항
― Android 2.1(API 레벨 7) 이상 ― Android Plugin for Gradle 1.5.0-alpha1 이상 ― Android Studio 1.3 이상 build.gradle (Module: app) 설정 끝!
Goodbye 버터나이프, Hello 데이터바인딩 데이터바인딩 xml 8 ― xml의 최상위에는
항상 <layout></layout>
Goodbye 버터나이프, Hello 데이터바인딩 데이터바인딩 Java파일 9 ― setContentView()대신 DataBindingUtil.setContentView()
― XXXBinding 클래스는 자동으로 생성 ― xml 이름 기준으로 생성되며 파스칼 표기법 기준으로 변경 ― ted_park_activity.xml -> TedParkActivityBinding 클래스 생성
Goodbye 버터나이프, Hello 데이터바인딩 데이터바인딩 View접근 10 ― 생성된 binding.xxx
로 View접근 ― View이름은 카멜 표기법으로 생성 ― @+id/tv_text_name -> tvTextName ― 만약 @+id/tv_text 와 @+id/tvText 인 TextView가 있다면 어떻게 될까?
Goodbye 버터나이프, Hello 데이터바인딩 기본 Click Event 11 ― setOnClickListener(this)
+ implements View.OnClickListener ― setOnClickListener(new …)
Goodbye 버터나이프, Hello 데이터바인딩 버터나이프 Click Event 12 ― @OnClick(R.id.xxx)
Goodbye 버터나이프, Hello 데이터바인딩 데이터바인딩 Click Event 13 ― xml에서
함수 지정
Goodbye 버터나이프, Hello 데이터바인딩 데이터바인딩 Click Event 14 ― xml에서
쓰고자 하는 변수가 있는 경우 <data></data>안에 <variable/> 생성 ― Java파일에서 변수 지정
Goodbye 버터나이프, Hello 데이터바인딩 데이터바인딩 Click Event 15 ― xml에서
함수 지정 ― @{activity.함수이름()} , @{activity::함수이름()} ― MVP, MVVM등 아키텍처에 따라 Handler interface를 만들고 handler.xxx()로 활용
Goodbye 버터나이프, Hello 데이터바인딩 RecyclerView안의 item view 16 ― 리스트
화면을 만들어 봅시다
Goodbye 버터나이프, Hello 데이터바인딩 RecyclerView안의 item view Class 17 ―
사용자 Class
Goodbye 버터나이프, Hello 데이터바인딩 RecyclerView안의 item view 18 ― 샘플
데이터
Goodbye 버터나이프, Hello 데이터바인딩 데이터바인딩 View 바인딩 19 ― ViewHolder
Goodbye 버터나이프, Hello 데이터바인딩 기본, 버터나이프 onBindView() 20 ― onBindView()에서
각 item 내용 설정
Goodbye 버터나이프, Hello 데이터바인딩 데이터바인딩 onBindView() 21 ― onBindView()에서는 변수만
설정
Goodbye 버터나이프, Hello 데이터바인딩 데이터바인딩 xml 22 ― 변수 생성
Goodbye 버터나이프, Hello 데이터바인딩 데이터바인딩 xml 23 ― 값 할당
Goodbye 버터나이프, Hello 데이터바인딩 @BindingAdapter 24 ― ImageView에는 Drawable이 아니라
이미지 주소라서 Glide로 불러와야 하는데? ― @BindingAdapter를 이용해서 xml에서 처리가능
Goodbye 버터나이프, Hello 데이터바인딩 @BindingAdapter 25 ― @BindingAdapter에 설정한 변수이름으로
xml에서 접근가능 ― app:imageUrl, app:error
Goodbye 버터나이프, Hello 데이터바인딩 @BindingAdapter 응용 26 ― 라이브러리 사용
없이 커스텀 폰트설정
Goodbye 버터나이프, Hello 데이터바인딩 @BindingConversion 27 ― 어떤 Date타입의 정보를
12:34:56 같은 텍스트로 표현하고 싶다면? ― @BindingConversion을 활용해서 원하는 형태로 변경
Goodbye 버터나이프, Hello 데이터바인딩 @BindingConversion 응용 28 ― true/false 에
따라 보여주기/숨기기
Goodbye 버터나이프, Hello 데이터바인딩 식 언어 xml에서 사용 가능한 식
29 ― 수학 + - / * % ― 문자열 연결 + ― 논리 && || ― 이항 & | ^ ― 단항 + - ! ~ ― 시프트 >> >>> << ― 비교 == > < >= <= ― instanceof ― 그룹화 () ― 리터럴 - 문자, 문자열, 숫자, null ― 형변환 ― 메서드 호출 ― 필드 액세스 ― 배열 액세스 [] ― 삼항 연산자 ?:
Goodbye 버터나이프, Hello 데이터바인딩 Include 30 ― 하나의 xml 을
<include/> 태그로 재사용하는 경우
Goodbye 버터나이프, Hello 데이터바인딩 Include 하나의 xml 을 <include/> 태그로
재사용하는 경우 31 ― 재사용될 xml 구조 ― 변수 생성
Goodbye 버터나이프, Hello 데이터바인딩 Include 하나의 xml 을 <include/> 태그로
재사용하는 경우 32 ― <include/> 사용하면서 변수 전달
Goodbye 버터나이프, Hello 데이터바인딩 Observable 33 ― 데이터 값이 변경되면
알아서 View도 변경 시켜주고 싶어요
Goodbye 버터나이프, Hello 데이터바인딩 Observable 34 ― BaseObservable을 상속받아 정의
― getXXX()함수에는 @Bindable ― setXXX()함수에는 notifyPropertyChanged()
Goodbye 버터나이프, Hello 데이터바인딩 ObservableField 35 ― getter, setter 만들기
귀찮아요 ― ObservableField ― ObservableBoolean, ObservableByte, ObservableChar, ObservableShort, ObservableInt, ObservableLong, ObservableFloat, ObservableDouble, ObservableParcelable
Goodbye 버터나이프, Hello 데이터바인딩 ObservableField 36 ― set, get 방법
Goodbye 버터나이프, Hello 데이터바인딩 응용 37 https://github.com/ParkSangGwon/TedDataBindingSample
Goodbye 버터나이프, Hello 데이터바인딩 불편사항 점점 발전하겠지.. 38 ― 버터나이프에서
사용하는 Resource binding은 사용할 수 없다(@BindString, @BindDimen, … ) ― Android Studio 최신버전인데도 제대로 반영이 안된다 ― 여러 군데에서 같은 변수이름의 @BindingAdapter 을 사용해도 오류가 없다고 한다 ― 인코딩 문제때문인지 xml에서 ‘&&’ 대신 ‘&&’로 써야한다 ― Java소스코드는 줄어들지만 xml소스코드는 늘어난다
Thank You Questions? 39