<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dalki_yp.log</title>
        <link>https://velog.io/</link>
        <description>오늘도 영차🐜</description>
        <lastBuildDate>Fri, 30 Dec 2022 15:33:14 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. dalki_yp.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dalki_yp" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[03 데이터바인딩(2)]]></title>
            <link>https://velog.io/@dalki_yp/03-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B0%94%EC%9D%B8%EB%94%A92</link>
            <guid>https://velog.io/@dalki_yp/03-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B0%94%EC%9D%B8%EB%94%A92</guid>
            <pubDate>Fri, 30 Dec 2022 15:33:14 GMT</pubDate>
            <description><![CDATA[<h2 id="기존프로젝트">기존프로젝트</h2>
<p>만약 Sample 객체에 Sample색깔을 표현하는 int sampleColor가 있다고 가정하자.
0이면 흰색, 1이면 검은색을 반환해야한다.<br>
그러면 아주 보편적으로는 다음과 같이 할 것이다.</p>
<pre><code class="language-Java">public class Sample{
    ...
    private int sampleColor;
    ...
    public String getSampleColorAsText(){
        return (sampleColor==0) ? &quot;흰색&quot; : &quot;검은색;
    }
}
</code></pre>
<p>레이아웃 xml파일에서는</p>
<pre><code class="language-XML">&lt;TextView
          ...
          android:text=&quot;@{sample.getSampleAsText}&quot;/&gt;</code></pre>
<p><strong>그러나 이는 데이터 관련 처리는 xml에서 처리하겠다는 앞선 데이터 바인딩과 관련이 멀어진다.</strong></p>
<h2 id="데이터바인딩-적용xml내-데이터-가공">데이터바인딩 적용(XML내 데이터 가공)</h2>
<p>getSampleColorAsText()부분을 지우고 위 xml 코드를 다음과 같이 수정한다.</p>
<pre><code class="language-XML">android:text=&quot;@{(sample.sampleColor == 0) ? &amp;quot;흰색&amp;quot; : &amp;quot;검은색&amp;quot;}</code></pre>
<br>
그러나 위의 경우는 보통 상수를 적용해서 구현하기도 함

<pre><code class="language-Java">public class Sample{
    ...
    public static final int SAMPLE_COLOR_WHITE = 0;
       public static final int SAMPLE_COLOR_BLACK = 1;
    ...
}</code></pre>
<br>

<p>상수를 어떻게 xml내에서 처리할 수 있을까?</p>
<pre><code class="language-XML">&lt;layout 
        ...&gt;
    &lt;data&gt;
        &lt;import type=&quot;com.example.myapplication.UserProfile&quot;/&gt;
        &lt;variable name=&quot;userProfile&quot; type=&quot;com.example.myapplication.UserProfile&quot;/&gt;
    &lt;/data&gt;
  ...
&lt;/layout&gt;</code></pre>
<p>위와 같이 data영역 수정한 후 xml 내부 해당 TextView 코드를 수정한다.</p>
<pre><code class="language-XML">android:text=&quot;@{(sample.sampleColor == Sample.SAMPLE_COLOR_WHITE) ? &amp;quot;흰색&amp;quot; : &amp;quot;검은색&amp;quot;}</code></pre>
<br>
이미지는 어떻게 xml내에서 처리할 수 있을까?
이미지 처리를 위해 Glide를 사용한다

<pre><code class="language-Java">public class Sample{
    ...
    private String sampleImageUrl;
    ...
}
</code></pre>
<pre><code class="language-XML">&lt;ImageView
           android:layout_width=&quot;100dp&quot;
           android:layout_height=&quot;100dp&quot;
           imageUrl=&quot;@{sample.sampleImageUrl}&quot;/&gt;
</code></pre>
<p>이 때, 외부라이브러리 없이 imageUrl이라는 custom attribute는 binding adapter를 통해 동작을 구현해주면 된다.
binding adapter는 static으로 imageUrl에 대한 메소드를 구현해주면 됨</p>
<pre><code class="language-Java">public class MyBindingAdapter {
    @BindingAdapter(&quot;imageUrl&quot;)
    public static void loadImageUrl(ImageView view,String url){
        Glide.with(view.getContext()).load(url).into(view);
    }
}
</code></pre>
<h2 id="졸업프로젝트-적용">졸업프로젝트 적용</h2>
<p><a href="">졸프 적용</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[02 데이터바인딩(1)]]></title>
            <link>https://velog.io/@dalki_yp/02-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B0%94%EC%9D%B8%EB%94%A91</link>
            <guid>https://velog.io/@dalki_yp/02-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B0%94%EC%9D%B8%EB%94%A91</guid>
            <pubDate>Fri, 30 Dec 2022 13:43:23 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.youtube.com/watch?v=l6FgSwEgu2E&amp;list=PLvdZg8T1CFZsjiZFPrup_bt0ET6dYvD-P&amp;index=2">모던 안드로이드 아키텍처 (슬기로운코딩생활)</a> 참고</p>
<hr>
<h2 id="기존-프로젝트">기존 프로젝트</h2>
<ul>
<li>sample 객체를 뷰바인딩을 통해 가져온 뷰에 데이터를 setText()를 통해 세팅함
  → 데이터바인딩이라고함</li>
<li>이 부분을 Activity코드에서 빼내어 layout내에 옮기는 과정을 할 예정!<h2 id="데이터-바인딩-화면뷰-분리">데이터 바인딩 화면,뷰 분리</h2>
</li>
<li>데이터바인딩 활성화
<code>dataBinding { enabled true }</code></li>
<li>레이아웃 내에 레이아웃 영역 외에 데이터 영역 만들기</li>
<li>레이아웃 영역과 데이터 영역을 루트 레이아웃 영역으로 감싸고 layout 정보 저장</li>
<li>데이터바인딩 대상 view에 아래와 같이 작성해서 처리<pre><code class="language-XML">&lt;layout xmlns:android=&quot;...&quot;
      xmlns:app=&quot;...&quot;
      xmlns:tools=&quot;...&quot;&gt;
  &lt;data&gt;
    &lt;!--데이터 바인딩 대상--&gt;
    &lt;variable
        name=&quot;sample&quot;
        type=&quot;com.example.myapplication.Sample&quot;/&gt;
&lt;/data&gt;
&lt;LinearLayout
  android:layout_width=&quot;match_parent&quot;
  android:layout_height=&quot;match_parent&quot;
  tools:context=&quot;.MainActivity&quot;&gt;
  &lt;!-- 각종 view --&gt;
  &lt;!-- 아래 예--&gt;
  &lt;TextView
            android:id=&quot;@+id=/sampleName&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;@{sample.sampleName}&quot;/&gt;
&lt;/LinearLayout&gt;
&lt;/layout&gt;
</code></pre>
</li>
</ul>
<p>```</p>
<ul>
<li><p>Activity 코드에서 데이터 세팅 코드 부분 필요 없어짐</p>
</li>
<li><p>대신 Sample 객체로 선언한 sample 변수를 binding에 세팅하면 됨
<code>binding.setSample(sample);</code></p>
</li>
<li><p><strong>Activity에 순수 로직만 남아있어!!...</strong></p>
</li>
<li><p>데이터바인딩을 실제 프로젝트에 사용하다 보면, expression language로 다양한 형태의 로직을 가능하게 해줌</p>
</li>
</ul>
<hr>
<h2 id="졸업-프로젝트-적용">졸업 프로젝트 적용</h2>
<p><a href="">졸프 적용</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[01 뷰바인딩]]></title>
            <link>https://velog.io/@dalki_yp/%EB%AA%A8%EB%8D%98-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-01-%EB%B7%B0%EB%B0%94%EC%9D%B8%EB%94%A9</link>
            <guid>https://velog.io/@dalki_yp/%EB%AA%A8%EB%8D%98-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-01-%EB%B7%B0%EB%B0%94%EC%9D%B8%EB%94%A9</guid>
            <pubDate>Fri, 30 Dec 2022 12:41:16 GMT</pubDate>
            <description><![CDATA[<h2 id="모던-안드로이드-아키텍처슬기로운코딩생활-참고"><a href="https://www.youtube.com/watch?v=LH9__2Tt4js&amp;list=PLvdZg8T1CFZsjiZFPrup_bt0ET6dYvD-P&amp;index=1">모던 안드로이드 아키텍처(슬기로운코딩생활)</a> 참고</h2>
<h2 id="기존-프로젝트">기존 프로젝트</h2>
<ul>
<li><p>Sample 객체</p>
<pre><code class="language-Java">public class Sample{
  private String sampleName;

  public Sample(){}

  public String getSampleName(){
      return sampleName;
  }

  public String setSampleName(String sampleName){
      this.sampleName = sampleName;
  }
}</code></pre>
</li>
<li><p>레이아웃 안에 TextView</p>
<pre><code class="language-XML">&lt;TextView
      android:id=&quot;@+id/sample_name&quot;
      android:layout_width=&quot;wrap_content&quot;
      android:layout_height=&quot;wrap_content&quot;/&gt;
</code></pre>
</li>
</ul>
<pre><code>* Activity안 onCreate()안
```JAVA
sampleName = findViewById(R.id.sample_name);
fetchSample();</code></pre><ul>
<li><p>Activity안 fetchSample() 작성</p>
<pre><code class="language-JAVA">private void fetchSample(){
  Sample sample = new Sample();
  sample.setSampleName(&quot;홍길동&quot;);

  updateUI(sample);
}</code></pre>
</li>
<li><p>Activity안 updateUI()작성</p>
<pre><code class="language-JAVA">private void updateUI(Sample sample){
  sampleName.setText(sample.getSampleName());
}</code></pre>
<p><span style='background-color:#fff5b1'>1. findViewById()로 레퍼런스를 가지고 오기 → <strong>View Binding</strong></span></p>
</li>
</ul>
<ol start="2">
<li>fetchSample()에서 데이터 로딩</li>
<li>updateUI()에서 레퍼런스에 데이터 세팅 → <strong>Data Binding</strong></li>
</ol>
<h2 id="뷰-바인딩-findviewbyid-없애기">뷰 바인딩 (findViewById() 없애기)</h2>
<ul>
<li>viewBinding 활성화
<code>build.gradle(app)에 viewBinding { enabled true }</code>
  →안드로이드 스튜디오가 <strong>Activity...Binding 클래스</strong>를 레이아웃 폴더 내의 레이아웃마다 만들어줌
  →<strong>Activity...Binding 클래스</strong>는 <span style='background-color:#fff5b1'>findViewById()로 레퍼런스를 가지고 오기</span>를 대신 해 줌
  →Project mode에서 찾아볼 수 있음</li>
<li>activity_...이라는 레이아웃 파일을 inflation해서 그 안의 id가 정의되어 있는 view들을 레퍼런스로 만들고 레퍼런스의 실 객체를 대입해주는 것까지 함
  <code>Activity...Binding binding = Activity...Binding.inflate(getLayoutInflater());</code></li>
<li>binding 객체에는 inflation 된 객체의 최상위 객체를 가져오는 getRoot()를 이용
  <code>setContentView(binding.getRoot()0;</code></li>
<li>레퍼런스를 가져오는 과정을 생략하고, 데이터를 세팅할 때 <code>binding.sample.setText(sample.getSampleName());</code></li>
</ul>
<hr>
<h2 id="졸업프로젝트에-적용">졸업프로젝트에 적용</h2>
<p><a href="">졸업프로젝트 일지</a></p>
]]></description>
        </item>
    </channel>
</rss>