<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>DevGoogry</title>
    <link>https://googry.tistory.com/</link>
    <description>Googry의 개발 블로그</description>
    <language>ko</language>
    <pubDate>Mon, 29 Jun 2026 15:25:34 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>sjjeong1225</managingEditor>
    <item>
      <title>(Android) DataBinding을 활용한 BaseRecyclerView 만들기</title>
      <link>https://googry.tistory.com/45</link>
      <description>&lt;p&gt;이번 2018년 11월 25일에 마루 180에서 진행한 &lt;a href=&quot;http://googry.tistory.com/44?category=759376&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;안드로이드 컨퍼런스&lt;/a&gt;에서 발표한 내용 중에 BaseRecyclerView에 대해 글로 정리해보려고 이번 포스팅을 준비해봤습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;안드로이드 앱을 개발하면서 서버에서 데이터를 가져와서 리스트로 보여주는 기능을 자주 개발 했었는데 이런 리스트를 만드는 작업을 많이&amp;nbsp;하다 보니 공통으로 처리 할 수 있는 부분이 보이기 시작했고 그러면서 BaseRecyclerView를 만들어야겠다고 느꼈습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 글을 이해하기 위해서는 아래와 같은 지식이 필요하니 꼭 선행학습을 하고 보시면 좋을 것 같습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1. RecyclerView&lt;/p&gt;&lt;p&gt;- RecyclerView를 어떻게 구현하는지&lt;/p&gt;&lt;p&gt;- RecyclerView.Adapter에서 필수로 override해야하는 함수들의 역할과 구현 방법&lt;/p&gt;&lt;p&gt;- RecyclerView.ViewHolder 구현 방법&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2. DataBinding&lt;/p&gt;&lt;p&gt;- DataBinding 사용 방법&lt;/p&gt;&lt;p&gt;- BindingAdapter 사용 방법&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 600px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998F78375C25BF2A36&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998F78375C25BF2A36&quot; width=&quot;300&quot; height=&quot;600&quot; filename=&quot;googrybaserecyclerview-MainActivity-12282018151320.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 300px; height: 600px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;언어 코드 리스트(&lt;a href=&quot;http://help.bingads.microsoft.com/apex/index/18/ko/10004&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://help.bingads.microsoft.com/apex/index/18/ko/10004&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br class=&quot;Apple-interchange-newline&quot;&gt;위에 주소에 있는 언어 코드 리스트를 RecyclerView를 통해서 보여주는 기능을 구현해보도록 하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;일반적인 구현 방법&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;class &lt;/span&gt;Step1Adapter : RecyclerView.Adapter&amp;lt;Step1Adapter.ViewHolder&amp;gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;items &lt;/span&gt;= &lt;span style=&quot;font-style:italic;&quot;&gt;mutableListOf&lt;/span&gt;&amp;lt;LanguageCode&amp;gt;()&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;replaceAll&lt;/span&gt;(newItems: List&amp;lt;LanguageCode&amp;gt;?) {&lt;br /&gt;        newItems?.&lt;span style=&quot;color:#ffc66d;font-style:italic;&quot;&gt;let &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;items&lt;/span&gt;.clear()&lt;br /&gt;            &lt;span style=&quot;color:#9876aa;&quot;&gt;items&lt;/span&gt;.addAll(&lt;span style=&quot;font-weight:bold;&quot;&gt;it&lt;/span&gt;)&lt;br /&gt;        &lt;span style=&quot;font-weight:bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;    &lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onCreateViewHolder&lt;/span&gt;(parent: ViewGroup&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;viewType: Int) = ViewHolder(parent)&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;getItemCount&lt;/span&gt;() = &lt;span style=&quot;color:#9876aa;&quot;&gt;items&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;&quot;&gt;size&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onBindViewHolder&lt;/span&gt;(holder: ViewHolder&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;position: Int) {&lt;br /&gt;        holder.onBindViewHolder(&lt;span style=&quot;color:#9876aa;&quot;&gt;items&lt;/span&gt;[position])&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;inner class &lt;/span&gt;ViewHolder(parent: ViewGroup) : RecyclerView.ViewHolder(&lt;br /&gt;        LayoutInflater.from(parent.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;context&lt;/span&gt;).inflate(R.layout.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;language_code_item&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;parent&lt;span style=&quot;color:#cc7832;&quot;&gt;, false&lt;/span&gt;)&lt;br /&gt;    ) {&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onBindViewHolder&lt;/span&gt;(item: LanguageCode) {&lt;br /&gt;            &lt;span style=&quot;font-style:italic;&quot;&gt;with&lt;/span&gt;(&lt;span style=&quot;color:#9876aa;&quot;&gt;itemView&lt;/span&gt;) &lt;span style=&quot;font-weight:bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;                &lt;/span&gt;tvCode.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;text &lt;/span&gt;= item.&lt;span style=&quot;color:#9876aa;&quot;&gt;code&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;                &lt;/span&gt;tvLanguage.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;text &lt;/span&gt;= item.&lt;span style=&quot;color:#9876aa;&quot;&gt;language&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;        &lt;/span&gt;}&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;class &lt;/span&gt;Step1Activity : AppCompatActivity() {&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onCreate&lt;/span&gt;(savedInstanceState: Bundle?) {&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;super&lt;/span&gt;.onCreate(savedInstanceState)&lt;br /&gt;        setContentView(R.layout.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;step1_activity&lt;/span&gt;)&lt;br /&gt;        rvContent.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;adapter &lt;/span&gt;= Step1Adapter().&lt;span style=&quot;color:#ffc66d;font-style:italic;&quot;&gt;apply &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;{ &lt;/span&gt;replaceAll(&lt;span style=&quot;font-style:italic;&quot;&gt;getLanguageCodeList&lt;/span&gt;()) &lt;span style=&quot;font-weight:bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;    &lt;/span&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;제가 처음에 많이 하던 RecyclerView의 Adapter를 구현하는 방법으로 RecyclerView.Adatper를 상속받는 CustomAdapter를 구현하고 RecyclerView.ViewHolder를 상속받는 CustomViewHolder를 구현하는 방식입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;CustomAdapter&lt;/p&gt;&lt;p&gt;- Adapter내부에 List를 가지고 있는다.&lt;/p&gt;&lt;p&gt;- replaceAll()과 같은 함수를 통해서 데이터를 교체한다.&lt;/p&gt;&lt;p&gt;- onCreateViewHolder()에서 CustomViewHolder를 생성한다.&lt;/p&gt;&lt;p&gt;- getItemCount()에서 list의 사이즈를 리턴한다.&lt;/p&gt;&lt;p&gt;- onBindViewHolder()에서 holder에 position에 맞는 데이터를 전달한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;CustomViewHolder&lt;/p&gt;&lt;p&gt;- Adapter의 onCreateViewHolder에서 인자로 넘어오는 ViewGroup으로 View를 생성하여&amp;nbsp;RecyclerView.ViewHolder의 생성자에 전달한다.&lt;/p&gt;&lt;p&gt;- Adapter의 onBindViewHolder에서 넘어오는 데이터를 set한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 CustomAdapter를 따로 만들게 되면 새로운 화면에서 새로운 리스트를 보여줘야 할 때마다 계속 만들어 줘야 하는 번거로움이 있습니다.&lt;/p&gt;&lt;p&gt;조금 다르게 말하자면 ArrayList를 Generic을 사용하지 않고 Int를 저장하는 IntArrayList, String을 저장하는 StringArrayList를 만드는 것과 동일합니다.&lt;strike&gt;(조금 억지인가..)&lt;/strike&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그러면 위에 Step1Adpater와 비슷한 형태로 다른 데이터를 다른 layout으로 보여주는 CustomAdapter를 만들어본다고 가정해보겠습니다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;class &lt;/span&gt;CustomAdapter : RecyclerView.Adapter&amp;lt;CustomAdapter.ViewHolder&amp;gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;items &lt;/span&gt;= &lt;span style=&quot;font-style:italic;&quot;&gt;mutableListOf&lt;/span&gt;&amp;lt;CustomItem&amp;gt;()&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;replaceAll&lt;/span&gt;(newItems: List&amp;lt;CustomItem&amp;gt;?) {&lt;br /&gt;        newItems?.&lt;span style=&quot;color:#ffc66d;font-style:italic;&quot;&gt;let &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;items&lt;/span&gt;.clear()&lt;br /&gt;            &lt;span style=&quot;color:#9876aa;&quot;&gt;items&lt;/span&gt;.addAll(&lt;span style=&quot;font-weight:bold;&quot;&gt;it&lt;/span&gt;)&lt;br /&gt;        &lt;span style=&quot;font-weight:bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;    &lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onCreateViewHolder&lt;/span&gt;(parent: ViewGroup&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;viewType: Int) = ViewHolder(parent)&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;getItemCount&lt;/span&gt;() = &lt;span style=&quot;color:#9876aa;&quot;&gt;items&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;&quot;&gt;size&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onBindViewHolder&lt;/span&gt;(holder: ViewHolder&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;position: Int) {&lt;br /&gt;        holder.onBindViewHolder(&lt;span style=&quot;color:#9876aa;&quot;&gt;items&lt;/span&gt;[position])&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;inner class &lt;/span&gt;ViewHolder(parent: ViewGroup) : RecyclerView.ViewHolder(&lt;br /&gt;        LayoutInflater.from(parent.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;context&lt;/span&gt;).inflate(R.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;layout&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;custom_item&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;parent&lt;span style=&quot;color:#cc7832;&quot;&gt;, false&lt;/span&gt;)&lt;br /&gt;    ) {&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onBindViewHolder&lt;/span&gt;(item: CustomItem) {&lt;br /&gt;            &lt;span style=&quot;font-style:italic;&quot;&gt;with&lt;/span&gt;(itemView) &lt;span style=&quot;font-weight:bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;tvTitle&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;text &lt;/span&gt;= item.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;title&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;                tvContent&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;text &lt;/span&gt;= item.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;content&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;                tvTail&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;text &lt;/span&gt;= item.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;tail&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;        &lt;/span&gt;}&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;여기서 Step1Adapter와 CustomAdapter의 차이점은&lt;/p&gt;&lt;p&gt;1. items의&amp;nbsp;Class&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;items &lt;/span&gt;= &lt;span style=&quot;font-style:italic;&quot;&gt;mutableListOf&lt;/span&gt;&amp;lt;LanguageCode&amp;gt;()&lt;/pre&gt;&lt;p&gt;2. ViewHolder 생성자에 인자로 들어가는&amp;nbsp;layout res&amp;nbsp;id&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;LayoutInflater.from(parent.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;context&lt;/span&gt;).inflate(R.layout.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;language_code_item&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;parent&lt;span style=&quot;color:#cc7832;&quot;&gt;, false&lt;/span&gt;)&lt;/pre&gt;&lt;p&gt;3. ViewHolder에 onBindViewHolder()의 처리&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onBindViewHolder&lt;/span&gt;(item: LanguageCode) {&lt;br /&gt;    &lt;span style=&quot;font-style:italic;&quot;&gt;with&lt;/span&gt;(&lt;span style=&quot;color:#9876aa;&quot;&gt;itemView&lt;/span&gt;) &lt;span style=&quot;font-weight:bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;        &lt;/span&gt;tvCode.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;text &lt;/span&gt;= item.&lt;span style=&quot;color:#9876aa;&quot;&gt;code&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;        &lt;/span&gt;tvLanguage.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;text &lt;/span&gt;= item.&lt;span style=&quot;color:#9876aa;&quot;&gt;language&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;}&lt;/pre&gt;&lt;p&gt;입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그러면 어떻게 해야 위 3가지의 차이점을 공통처리할 수 있게 만들 수 있을까요?&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1. Generic으로 처리&lt;/p&gt;&lt;p&gt;2. 매개변수로 처리&lt;/p&gt;&lt;p&gt;3. DataBinding으로 처리&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;제가 생각한 방식으로 구현한 BaseRecyclerView입니다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;abstract class &lt;/span&gt;BaseRecyclerView {&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;abstract class &lt;/span&gt;Adapter&amp;lt;&lt;span style=&quot;color:#20999d;&quot;&gt;ITEM &lt;/span&gt;: Any&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#20999d;&quot;&gt;B &lt;/span&gt;: ViewDataBinding&amp;gt;(&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;@LayoutRes private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;layoutResId&lt;/span&gt;: Int&lt;span style=&quot;color:#cc7832;&quot;&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;        private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;bindingVariableId&lt;/span&gt;: Int? = &lt;span style=&quot;color:#cc7832;&quot;&gt;null&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;) : RecyclerView.Adapter&amp;lt;ViewHolder&amp;lt;&lt;span style=&quot;color:#20999d;&quot;&gt;B&lt;/span&gt;&amp;gt;&amp;gt;() {&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;items &lt;/span&gt;= &lt;span style=&quot;font-style:italic;&quot;&gt;mutableListOf&lt;/span&gt;&amp;lt;&lt;span style=&quot;color:#20999d;&quot;&gt;ITEM&lt;/span&gt;&amp;gt;()&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;replaceAll&lt;/span&gt;(items: List&amp;lt;&lt;span style=&quot;color:#20999d;&quot;&gt;ITEM&lt;/span&gt;&amp;gt;?) {&lt;br /&gt;            items?.&lt;span style=&quot;color:#ffc66d;font-style:italic;&quot;&gt;let &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;&quot;&gt;items&lt;/span&gt;.&lt;span style=&quot;color:#ffc66d;font-style:italic;&quot;&gt;run &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;                    &lt;/span&gt;clear()&lt;br /&gt;                    addAll(&lt;span style=&quot;font-weight:bold;&quot;&gt;it&lt;/span&gt;)&lt;br /&gt;                &lt;span style=&quot;font-weight:bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;            }&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;        &lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onCreateViewHolder&lt;/span&gt;(parent: ViewGroup&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;viewType: Int) =&lt;br /&gt;            &lt;span style=&quot;color:#cc7832;&quot;&gt;object &lt;/span&gt;: ViewHolder&amp;lt;&lt;span style=&quot;color:#20999d;&quot;&gt;B&lt;/span&gt;&amp;gt;(&lt;br /&gt;                &lt;span style=&quot;color:#467cda;&quot;&gt;layoutResId = &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;layoutResId&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#467cda;&quot;&gt;parent = &lt;/span&gt;parent&lt;span style=&quot;color:#cc7832;&quot;&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#467cda;&quot;&gt;bindingVariableId = &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;bindingVariableId&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;            &lt;/span&gt;) {}&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;getItemCount&lt;/span&gt;() = &lt;span style=&quot;color:#9876aa;&quot;&gt;items&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;&quot;&gt;size&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onBindViewHolder&lt;/span&gt;(holder: ViewHolder&amp;lt;&lt;span style=&quot;color:#20999d;&quot;&gt;B&lt;/span&gt;&amp;gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;position: Int) {&lt;br /&gt;            holder.onBindViewHolder(&lt;span style=&quot;color:#9876aa;&quot;&gt;items&lt;/span&gt;[position])&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;abstract class &lt;/span&gt;ViewHolder&amp;lt;&lt;span style=&quot;color:#20999d;&quot;&gt;B &lt;/span&gt;: ViewDataBinding&amp;gt;(&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;@LayoutRes &lt;/span&gt;layoutResId: Int&lt;span style=&quot;color:#cc7832;&quot;&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;        &lt;/span&gt;parent: ViewGroup&lt;span style=&quot;color:#cc7832;&quot;&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;        private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;bindingVariableId&lt;/span&gt;: Int?&lt;br /&gt;    ) : RecyclerView.ViewHolder(&lt;br /&gt;        LayoutInflater.from(parent.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;context&lt;/span&gt;).inflate(layoutResId&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;parent&lt;span style=&quot;color:#cc7832;&quot;&gt;, false&lt;/span&gt;)&lt;br /&gt;    ) {&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;protected val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;binding&lt;/span&gt;: &lt;span style=&quot;color:#20999d;&quot;&gt;B &lt;/span&gt;= DataBindingUtil.bind(&lt;span style=&quot;color:#9876aa;&quot;&gt;itemView&lt;/span&gt;)!!&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onBindViewHolder&lt;/span&gt;(item: Any?) {&lt;br /&gt;            &lt;span style=&quot;color:#cc7832;&quot;&gt;try &lt;/span&gt;{&lt;br /&gt;                &lt;span style=&quot;color:#9876aa;&quot;&gt;bindingVariableId&lt;/span&gt;?.&lt;span style=&quot;color:#ffc66d;font-style:italic;&quot;&gt;let &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;binding&lt;/span&gt;.setVariable(&lt;span style=&quot;font-weight:bold;&quot;&gt;it&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;item)&lt;br /&gt;                &lt;span style=&quot;font-weight:bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;            &lt;/span&gt;} &lt;span style=&quot;color:#cc7832;&quot;&gt;catch &lt;/span&gt;(e: Exception) {&lt;br /&gt;                e.printStackTrace()&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;BaseRecyclerView.Adapter는&lt;/p&gt;&lt;p&gt;Generic으로&lt;/p&gt;&lt;p&gt;1. Item Class&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#20999d;&quot;&gt;ITEM &lt;/span&gt;: Any&lt;/pre&gt;&lt;p&gt;2. ViewHolder의 Layout에 해당하는 ViewDataBinding Class&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#20999d;&quot;&gt;B &lt;/span&gt;: ViewDataBinding&lt;/pre&gt;&lt;p&gt;매개변수로&lt;/p&gt;&lt;p&gt;1. ViewHolder의 layout res id&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;@LayoutRes private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;layoutResId&lt;/span&gt;: Int&lt;/pre&gt;&lt;p&gt;2. ViewHolder의 layout에 variable로 정의한 Item의 변수명&amp;nbsp;id&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;bindingVariableId&lt;/span&gt;: Int? = &lt;span style=&quot;color:#cc7832;&quot;&gt;null&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;받게 됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;BaseRecyclerView.ViewHolder는&lt;/p&gt;&lt;p&gt;Generic으로&lt;/p&gt;&lt;p&gt;1. ViewHolder의 Layout에 해당하는 ViewDataBinding Class&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#20999d;&quot;&gt;B &lt;/span&gt;: ViewDataBinding&lt;/pre&gt;&lt;p&gt;매개변수로&lt;/p&gt;&lt;p&gt;1. ViewHolder의 layout res id&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;@LayoutRes &lt;/span&gt;layoutResId: Int&lt;/pre&gt;&lt;p&gt;2. ViewGroup&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;parent: ViewGroup&lt;/pre&gt;&lt;p&gt;3. ViewHolder의 layout에 variable로 정의한 Item의 변수명&amp;nbsp;id&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;bindingVariableId&lt;/span&gt;: Int&lt;/pre&gt;&lt;p&gt;받게 됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;ViewHolder에서 itemView를 통해 binding객체를 생성하고&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;protected val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;binding&lt;/span&gt;: &lt;span style=&quot;color:#20999d;&quot;&gt;B &lt;/span&gt;= DataBindingUtil.bind(&lt;span style=&quot;color:#9876aa;&quot;&gt;itemView&lt;/span&gt;)!!&lt;/pre&gt;&lt;p&gt;onBindViewHolder()에서 binding.setVariable(bindingVariableId, item)으로 layout에 variable로 선언한 변수에 데이터를 set하게 됩니다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onBindViewHolder&lt;/span&gt;(item: Any?) {&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;try &lt;/span&gt;{&lt;br /&gt;        &lt;span style=&quot;color:#9876aa;&quot;&gt;bindingVariableId&lt;/span&gt;?.&lt;span style=&quot;color:#ffc66d;font-style:italic;&quot;&gt;let &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;binding&lt;/span&gt;.setVariable(&lt;span style=&quot;font-weight:bold;&quot;&gt;it&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;item)&lt;br /&gt;        &lt;span style=&quot;font-weight:bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;    &lt;/span&gt;} &lt;span style=&quot;color:#cc7832;&quot;&gt;catch &lt;/span&gt;(e: Exception) {&lt;br /&gt;        e.printStackTrace()&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그러면 layout xml에서 처리한 방식대로 data를 binding 시켜주게 됩니다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;xml version=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;1.0&quot; &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;encoding=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;?&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;layout&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;xmlns:&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;xmlns:&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;tools&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;http://schemas.android.com/tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;data&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;variable&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;languageCode&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;type=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;com.googry.googrybaserecyclerview.LanguageCode&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;/data&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;LinearLayout&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;60dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:orientation=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;horizontal&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;TextView&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:id=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@+id/tvCode&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;120dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:gravity=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;center&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@{languageCode.code}&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:textSize=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;20sp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;tools&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;ko&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;TextView&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:id=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@+id/tvLanguage&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:gravity=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;center&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@{languageCode.language}&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:textSize=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;20sp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;tools&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;한국어&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/layout&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;class &lt;/span&gt;Step2Activity : AppCompatActivity() {&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onCreate&lt;/span&gt;(savedInstanceState: Bundle?) {&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;super&lt;/span&gt;.onCreate(savedInstanceState)&lt;br /&gt;        setContentView(R.layout.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;step2_activity&lt;/span&gt;)&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;val &lt;/span&gt;adapter = &lt;span style=&quot;color:#cc7832;&quot;&gt;object &lt;/span&gt;: BaseRecyclerView.Adapter&amp;lt;LanguageCode&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;LanguageCodeItemBinding&amp;gt;(&lt;br /&gt;            &lt;span style=&quot;color:#467cda;&quot;&gt;layoutResId = &lt;/span&gt;R.layout.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;language_code_item&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#467cda;&quot;&gt;bindingVariableId = &lt;/span&gt;BR.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;languageCode&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;        &lt;/span&gt;) {}&lt;br /&gt;        adapter.replaceAll(&lt;span style=&quot;font-style:italic;&quot;&gt;getLanguageCodeList&lt;/span&gt;())&lt;br /&gt;        rvContent.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;adapter &lt;/span&gt;= adapter&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Activity에서 RecyclerView에 adapter를 set 할 때는 위와 같이만 처리해주면 됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 하면 매번 단순한 RecyclerView를 만들 때마다 CustomAdapter를 따로 만들지 않아도 되는 장점이 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그리고 저는 DataBinding과 MVVM구조를 사용해서 프로젝트를 만드는데 그 부분에 대한 코드는 아래와 같습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Activity&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;class &lt;/span&gt;Step3Activity : AppCompatActivity() {&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onCreate&lt;/span&gt;(savedInstanceState: Bundle?) {&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;super&lt;/span&gt;.onCreate(savedInstanceState)&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;val &lt;/span&gt;binding = DataBindingUtil.setContentView&amp;lt;Step3ActivityBinding&amp;gt;(&lt;span style=&quot;color:#cc7832;&quot;&gt;this, &lt;/span&gt;R.layout.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;step3_activity&lt;/span&gt;)&lt;br /&gt;        binding.&lt;span style=&quot;color:#ffc66d;font-style:italic;&quot;&gt;run &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;            &lt;/span&gt;setLifecycleOwner(&lt;span style=&quot;color:#cc7832;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#467cda;&quot;&gt;@Step3Activity&lt;/span&gt;)&lt;br /&gt;            &lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;vm &lt;/span&gt;= ViewModelProviders.of(&lt;span style=&quot;color:#cc7832;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#467cda;&quot;&gt;@Step3Activity&lt;/span&gt;)[LanguageCodeViewModel::&lt;span style=&quot;color:#cc7832;&quot;&gt;class&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;java&lt;/span&gt;]&lt;br /&gt;            &lt;span style=&quot;color:#9876aa;&quot;&gt;rvContent&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;adapter &lt;/span&gt;= &lt;span style=&quot;color:#cc7832;&quot;&gt;object &lt;/span&gt;: BaseRecyclerView.Adapter&amp;lt;LanguageCode&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;LanguageCodeItemBinding&amp;gt;(&lt;br /&gt;                &lt;span style=&quot;color:#467cda;&quot;&gt;layoutResId = &lt;/span&gt;R.layout.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;language_code_item&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#467cda;&quot;&gt;bindingVariableId = &lt;/span&gt;BR.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;languageCode&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;            &lt;/span&gt;) {}&lt;br /&gt;        &lt;span style=&quot;font-weight:bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;    &lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Activity는&lt;/p&gt;&lt;p&gt;1. binding 객체 생성&lt;/p&gt;&lt;p&gt;2. binding 객체에 LifecycleOwner 전달&lt;/p&gt;&lt;p&gt;3. layout.xml에 선언한 ViewModel 전달&lt;/p&gt;&lt;p&gt;4. adapter 셋팅&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;View(layout)&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;layout&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;xmlns:&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;xmlns:&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;app&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;http://schemas.android.com/apk/res-auto&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;data&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;variable&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;vm&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;type=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;com.googry.googrybaserecyclerview.step3.LanguageCodeViewModel&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;/data&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;android.support.v7.widget.RecyclerView&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:id=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@+id/rvContent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;replaceAll=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@{vm.liveLanguageCodeList}&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:orientation=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;vertical&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;app&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layoutManager=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;android.support.v7.widget.LinearLayoutManager&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/layout&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;layout에서는 activity에서 전달 받은 ViewModel을 variable로 가지고 있고&lt;/p&gt;&lt;p&gt;ViewModel에 있는 data를 RecyclerView의 BindingAdapter로 선언한 replaceAll에 전달합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;ViewModel&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;class &lt;/span&gt;LanguageCodeViewModel : ViewModel() {&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;liveLanguageCodeList &lt;/span&gt;= MutableLiveData&amp;lt;List&amp;lt;LanguageCode&amp;gt;&amp;gt;()&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;init &lt;/span&gt;{&lt;br /&gt;        &lt;span style=&quot;color:#9876aa;&quot;&gt;liveLanguageCodeList&lt;/span&gt;.postValue(&lt;span style=&quot;font-style:italic;&quot;&gt;getLanguageCodeList&lt;/span&gt;())&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;ViewModel에는 data를 LiveData에 감싸서 가지고 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;RecyclerViewExt&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;@BindingAdapter&lt;/span&gt;(&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;replaceAll&quot;&lt;/span&gt;)&lt;br /&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;fun &lt;/span&gt;RecyclerView.&lt;span style=&quot;color:#ffc66d;&quot;&gt;replaceAll&lt;/span&gt;(list: List&amp;lt;Any&amp;gt;?) {&lt;br /&gt;    (&lt;span style=&quot;color:#cc7832;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;adapter &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;as? &lt;/span&gt;BaseRecyclerView.Adapter&amp;lt;Any&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;*&amp;gt;)?.&lt;span style=&quot;color:#ffc66d;font-style:italic;&quot;&gt;run &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;        &lt;/span&gt;replaceAll(list)&lt;br /&gt;        notifyDataSetChanged()&lt;br /&gt;    &lt;span style=&quot;font-weight:bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;replaceAll함수는 List&amp;lt;Any&amp;gt;? 타입으로 list를 받고 RecyclerView의 adapter를 safe type cast를 하여&amp;nbsp;BaseRecyclerView.Adapter에 list를 전달하고 notifyDataSetChanged()를 호출합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;데이터의 흐름으로 보면 ViewModel -&amp;gt; layout.xml -&amp;gt; BindingAdapter -&amp;gt; BaseRecyclerView.Adapter.replaceAll() 입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;예제 프로젝트는 아래 링크에서 확인 할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/sjjeong/GoogryBaseRecyclerView&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/sjjeong/GoogryBaseRecyclerView&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래의 링크를 참고하여 만들었습니다.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://thdev.tech/android/2018/01/31/Recycler-Adapter-Distinguish/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://thdev.tech/android/2018/01/31/Recycler-Adapter-Distinguish/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/googlesamples/android-architecture/tree/todo-mvvm-databinding&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/googlesamples/android-architecture/tree/todo-mvvm-databinding&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;의견이 있거나 문의점이 있다면 댓글로 남겨주시거나 카카오톡ID googry로 톡주세요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Android/Android</category>
      <author>sjjeong1225</author>
      <guid isPermaLink="true">https://googry.tistory.com/45</guid>
      <comments>https://googry.tistory.com/45#entry45comment</comments>
      <pubDate>Fri, 28 Dec 2018 16:45:47 +0900</pubDate>
    </item>
    <item>
      <title>2018-11-25 안드로이드 컨퍼런스 at 마루180 역삼</title>
      <link>https://googry.tistory.com/44</link>
      <description>&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;권태환&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5; font-size: 15px; font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; color: rgba(0, 0, 0, 0.87);&quot;&gt;&lt;script async=&quot;&quot; class=&quot;speakerdeck-embed&quot; data-id=&quot;170f7f7521f349b4b3aae80d94876b28&quot; data-ratio=&quot;1.77777777777778&quot; src=&quot;//speakerdeck.com/assets/embed.js&quot;&gt;&lt;/script&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5; font-size: 15px; font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; color: rgba(0, 0, 0, 0.87);&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;정석준&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/9977804B5C07CEEE02&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/pdf.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;정석준_나의 안드로이드 프로젝트.pdf&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;제꺼는 SpeckerDeck과 SlideShare에 업로드 되지 않아서 파일로 올려요&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;박미륵&lt;/p&gt;&lt;div style=&quot;margin-bottom:5px&quot;&gt; &lt;strong&gt; &lt;a href=&quot;//www.slideshare.net/MireukPark/kotlin-puzzler&quot; title=&quot;Kotlin puzzler&quot; target=&quot;_blank&quot;&gt;Kotlin puzzler&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/MireukPark&quot; target=&quot;_blank&quot;&gt;MireukPark&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5; font-size: 15px; font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; color: rgba(0, 0, 0, 0.87);&quot;&gt;&lt;iframe src=&quot;//www.slideshare.net/slideshow/embed_code/key/uesTfDVn8DfMTP&quot; width=&quot;595&quot; height=&quot;485&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot; style=&quot;border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;&quot; allowfullscreen=&quot;&quot;&gt; &lt;/iframe&gt; &lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5; font-size: 15px; font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; color: rgba(0, 0, 0, 0.87);&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;박상권&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5; font-size: 15px; font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; color: rgba(0, 0, 0, 0.87);&quot;&gt;&lt;a href=&quot;https://medium.com/prnd/%ED%97%A4%EC%9D%B4%EB%94%9C%EB%9F%AC%EC%97%90%EC%84%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9D%BC%ED%95%98%EB%82%98%EC%9A%94-1fa02b4361b5&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;헤이딜러에서는 어떻게 일하나요?&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;오민식&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;오민식님 발표자료는 따로 공유되지 않았어요&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;노현석&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;script async=&quot;&quot; class=&quot;speakerdeck-embed&quot; data-id=&quot;c70638f426da4a70999acf80cc3c0901&quot; data-ratio=&quot;1.78086956521739&quot; src=&quot;//speakerdeck.com/assets/embed.js&quot;&gt;&lt;/script&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;img src=&quot;https://eventusstorage.blob.core.windows.net/evs/Image/ted/3700/ProjectInfo/b349620a6b514a34bab0a605a1c538ce.jpg&quot; style=&quot;box-sizing: inherit; border: 0px; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14pt;&quot;&gt;당신의 안드로이드는 안녕하신가요?&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 우리는 항상 궁금했습니다.&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- '지금 이 안드로이드 구조가 맞을까?', '코틀린..해야하나?', 'MVP인가 MVVM인가?'&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 안드로이드 개발자들이 본인들의 이야기를 공유하는 시간을 갖습니다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 주니어 개발자부터 시니어 개발자까지 다양한 경험과 분야의 개발자들이 이야기합니다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14pt;&quot;&gt;이 행사는 강의가 아닙니다&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 이 행사는 각 발표자분들의 안드로이드 이야기와 경험담을 공유하고 개발자 여러분 모두가 함께하는 행사입니다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- ‘그래서 어쩌라고?’ 라는 생각이 드는 발표가 있을수도 있습니다. 하지만 꼭 잘하는사람, 유명한사람, 연차가 높은사람의 이야기가 정답은 아닙니다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 다양한 개발자들의 이야기를 듣고 간접경험 해보면서 본인만의 안드로이드 개발세계를 정리해보는 기회를 갖게 되실겁니다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 평소에 궁금했던 해당 안드로이드 개발분야에 대해서 알게되고 또한 묻고 답할 수 있습니다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14pt;&quot;&gt;이런분들이 오시면 많은 도움이 됩니다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 자신의 커리어에 대해서 고민이 있으신 분&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 취업,이직,창업을 준비중이신 분&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 다른 분야,회사,환경에서는 어떻게 개발하고 있는지 궁금하신 분&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 안드로이드 개발자는 아니지만 안드로이드 개발자에 대해서 이해하고 싶은 다른 플랫폼 개발자, 기획자, 디자이너, 회사 대표님&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14pt;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;여러분의 이야기를 들려주세요&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;strike style=&quot;box-sizing: inherit;&quot;&gt;- 10분간의 짧은 시간동안 여러분의 이야기를 들려주실 라이트닝 토크 발표자를 모집합니다.&lt;/strike&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;strike style=&quot;box-sizing: inherit;&quot;&gt;- 거창한 이야기가 아니어도 좋습니다. 실패담, 삽질기는 더 환영합니다.&lt;/strike&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;strike style=&quot;box-sizing: inherit;&quot;&gt;- 라이트닝 토크 발표자분은 당연히 참가비가 면제됩니다.&amp;nbsp;&lt;/strike&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;strike style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 10분발표 신청:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 238);&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;a href=&quot;https://open.kakao.com/o/sZADYd2&quot; style=&quot;box-sizing: inherit; background-color: transparent; -webkit-tap-highlight-color: transparent; word-break: break-word; color: rgb(3, 155, 229) !important;&quot;&gt;https://open.kakao.com/o/sZADYd2&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strike&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;라이트닝 토크 발표자 신청은 마감되었습니다.&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;img src=&quot;https://eventusstorage.blob.core.windows.net/evs/Image/ted/3700/ProjectInfo/3a4415e4eaad43e0814c9fc4e7824325.png&quot; style=&quot;box-sizing: inherit; border: 0px; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14pt;&quot;&gt;1. 시간 및 장소&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 시간:&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&amp;nbsp;2018년 11월 25일(일요일&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;) 13:00 ~ 18:40&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 장소:&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&amp;nbsp;마루180&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;지하1층&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;이벤트홀&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;a href=&quot;http://naver.me/Fku4zrs6&quot; target=&quot;_self&quot; style=&quot;box-sizing: inherit; background-color: transparent; -webkit-tap-highlight-color: transparent; word-break: break-word; color: rgb(3, 155, 229) !important;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;(지도보기)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span apple=&quot;&quot; sd=&quot;&quot; gothic=&quot;&quot; neo&quot;,=&quot;&quot; sans-serif;=&quot;&quot; font-size:=&quot;&quot; 11pt;&quot;=&quot;&quot; style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;서울특별시 강남구 역삼로 180 (역삼역 도보 10분)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;img src=&quot;https://eventusstorage.blob.core.windows.net/evs/Image/ted/2350/ProjectInfo/d36183d0dc5540889a0db0ff802cd4e9.jpg&quot; style=&quot;box-sizing: inherit; border: 0px; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 2;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit; font-size: 18.6667px;&quot;&gt;2. 발표자 소개&lt;/b&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14pt;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14pt;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;img src=&quot;https://eventusstorage.blob.core.windows.net/evs/Image/ted/3700/ProjectInfo/a74163e25e0a4fa8ac600a148f232e37.PNG&quot; style=&quot;box-sizing: inherit; border: 0px; max-width: 100%;&quot;&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; text-align: center;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 12pt; color: rgb(255, 0, 0);&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;안드로이드 AAC-ViewModel 자세히 살펴보기&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; text-align: center;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;div align=&quot;left&quot; style=&quot;box-sizing: inherit; text-align: left; line-height: 1.5;&quot;&gt;- 안드로이드 AAC-ViewModel을 상세하게 살펴보고, 코틀린에서 간단하게 inject하기 위한 방법들을 살펴봅니다.&lt;/div&gt;&lt;div align=&quot;left&quot; style=&quot;box-sizing: inherit; text-align: left; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;img src=&quot;https://eventusstorage.blob.core.windows.net/evs/Image/ted/3700/ProjectInfo/41037024e41a447cbdb10832f3cf7305.jpg&quot; style=&quot;box-sizing: inherit; border: 0px; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;권태환&lt;/b&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;현) RPG코리아 '요기요' 안드로이드 개발자&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;6년차 안드로이드 개발자로 GDG Seoul 운영진&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 2년전부터 코틀린 학습 및 실 프로젝트에 적용하여 사용중&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- '꿈 많은 개발자가 되자!' 블로그를 통해 안드로이드 개발에 관련한 다양한 글 업로드중&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 16px;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;나의 안드로이드 프로젝트 구조&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 작년 5월부터 안드로이드 개발자로 일하면서 안드로이드 프로젝트 구조에 대해 고민해왔던 경험에 관해 이야기 합니다.&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;img src=&quot;https://eventusstorage.blob.core.windows.net/evs/Image/ted/3700/ProjectInfo/b6d5abcb329047dcbda038b5e5eeb250.jpg&quot; style=&quot;box-sizing: inherit; border: 0px; max-width: 100%;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;정석준&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 현) 코인원 안드로이드 개발자&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 안드로이드 개발 2년차&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 코인헬퍼(코인 가격 간편 보기 앱) 개발&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 16px;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;Kotlin puzzler&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 코틀린 퀴즈들을 통해서 문법에 조금 더 익숙해지기&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;img src=&quot;https://eventusstorage.blob.core.windows.net/evs/Image/ted/3700/ProjectInfo/908137253e4e4fe78f3bac624bd1acbd.jpg&quot; style=&quot;box-sizing: inherit; border: 0px; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;박미륵&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;현) 레이니스트 '뱅크샐러드' 안드로이드 개발자&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;안드로이드 개발 5년차&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 컨퍼런스에서 세션듣기를 좋아하고 함수형 프로그래밍과 테스팅에 관심을 가지고 있습니다.&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 12pt; color: rgb(255, 0, 0);&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;헤이딜러에서는 어떻게 일하나요?&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 헤이딜러 서비스를 운영중인 PRND컴퍼니에서 피쳐가 시작되서 끝나는 과정에 대해서 이야기 합니다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 기획 -&amp;gt; 디자인 -&amp;gt;&amp;nbsp; 개발 -&amp;gt; 리뷰 -&amp;gt; QA -&amp;gt; 배포 -&amp;gt; 테스트 의 프로세스에 대해 이야기 합니다.&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;img src=&quot;https://eventusstorage.blob.core.windows.net/evs/Image/ted/3700/ProjectInfo/8252aba827d34a4895fddb6051d87483.png&quot; style=&quot;box-sizing: inherit; border: 0px; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;박상권&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;현) PRND컴퍼니 안드로이드 개발팀장&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;- 안드로이드 개발 8년차&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;- 대기업, 증권회사, 스타트업 근무&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;- 중고폰 관련 서비스 '셀폰' 창업 경험&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;- 개발자대회 및 창업대회 다수 수상&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;- 박상권의 삽질블로그 운영(&lt;a href=&quot;https://gun0912.tistory.com%29/&quot; style=&quot;box-sizing: inherit; background-color: transparent; -webkit-tap-highlight-color: transparent; word-break: break-word; color: rgb(3, 155, 229) !important;&quot;&gt;https://gun0912.tistory.com)&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;- 30개이상의 개인앱 출시 및 운영&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 16px;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;Kotlin, AAC 및 RxJava2와 함께한 신규 어플리케이션 개발기&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 큰 팀에서 열심히 일하던 개발자가, 혼자서 밑바닥 부터 개발을 하겠다고 팀을 뛰쳐 나왔습니다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;- 마치 망망대해에 던져진 느낌입니다. 어떻게 해야 혼자서 유지 보수가 가능한 꿈만 같은 코드를 짤 수 있을까요?&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;- 반복 작업에 질린 개발자가 깨끗한 코드를 목표로 신기술을 적용해가는 과정을 다룹니다.&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;img src=&quot;https://eventusstorage.blob.core.windows.net/evs/Image/ted/3700/ProjectInfo/c677418641a849849376a30f86e24c35.jpg&quot; style=&quot;box-sizing: inherit; border: 0px; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;오민식&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;현) 하이퍼커넥트 안드로이드 개발자&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 신사업 안드로이드 1인 개발&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 자칭 코틀린 덕후&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 밑바닥 부터 만들며 고통 받기를 즐김&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 16px;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;Android + DI + Koin = Easy?!&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- Android 개발시 DI 적용은 하고 싶은데 Dagger는 진입 장벽이 높아서 고민하고 계시지 않으신가요?&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 좀 더 쉽게 DI 적용이 가능한 KOIN을 알려드립니다. 본 발표에서는 Library 소개 및 사용한 경험에 대해서 이야기 합니다.&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;p style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px;&quot;&gt;&lt;img src=&quot;https://eventusstorage.blob.core.windows.net/evs/Image/ted/3700/ProjectInfo/142812c23f6e43288bae808af9943be7.jpg&quot; style=&quot;box-sizing: inherit; border: 0px; max-width: 100%;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;노현석&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;현) 야놀자 안드로이드 개발자&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- GDG Korea Android Organizer&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 활동명: 프루(Pluu)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: &amp;quot;Noto Sans KR&amp;quot;, sans-serif; font-size: 15px; line-height: 1.5;&quot;&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit; font-size: 14pt;&quot;&gt;&lt;br class=&quot;Apple-interchange-newline&quot; style=&quot;box-sizing: inherit;&quot;&gt;3. 행사 시간표&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit; font-size: 14pt;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/b&gt;&lt;/p&gt;&lt;table class=&quot;__se_tbl&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;box-sizing: inherit; border-collapse: collapse; border-spacing: 0px; border: 1px solid rgb(166, 188, 209); min-width: 100%; width: initial !important;&quot;&gt;&lt;tbody style=&quot;box-sizing: inherit;&quot;&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: none; border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 108px; height: 36px; background-color: rgb(246, 248, 250);&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;시간&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: none; border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 86px; height: 36px; background-color: rgb(246, 248, 250);&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;발표자&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: none; border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 207px; height: 36px; background-color: rgb(246, 248, 250);&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;제목&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: none; border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 515px; height: 36px; background-color: rgb(246, 248, 250);&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;설명&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 108px; height: 36px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;13:00 ~ 13:30&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;(30분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 86px; height: 36px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;권태환&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 207px; height: 36px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;안드로이드 AAC-ViewModel 자세히 살펴보기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 515px; height: 36px;&quot;&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;안드로이드 AAC-ViewModel을 상세하게 살펴보고,&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;코틀린에서 간단하게 inject하기 위한 방법들을 살펴봅니다.&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 9px; height: 5px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;휴식시간&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;(10분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 10px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 108px; height: 36px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;13:40 ~ 14:00&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;(20분)&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 86px; height: 36px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 14.6667px;&quot;&gt;정석준&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 207px; height: 36px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;나의 안드로이드 프로젝트 구조&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 515px; height: 36px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 작년 5월부터 안드로이드 개발자로 일하면서 안드로이드 프로젝트 구조에 대해 고민해왔던 경험에 관해 이야기 합니다.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 9px; height: 5px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt; color: rgb(0, 0, 0);&quot;&gt;휴식시간&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;(10분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 10px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 13px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;14:10 ~ 14:40&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;(30분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 10px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 14.6667px;&quot;&gt;박미륵&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;Kotlin puzzler&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 127px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;코틀린 퀴즈들을 통해서 문법에 조금 더 익숙해지기&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;-&amp;nbsp;&lt;a href=&quot;https://www.slideshare.net/MireukPark/kotlin-puzzler&quot; style=&quot;box-sizing: inherit; background-color: transparent; -webkit-tap-highlight-color: transparent; word-break: break-word; color: rgb(3, 155, 229) !important;&quot;&gt;https://www.slideshare.net/MireukPark/kotlin-puzzler&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 13px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt; color: rgb(0, 0, 0);&quot;&gt;휴식시간&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;(10분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 10px; height: 5px;&quot;&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; text-align: center;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 127px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 13px; height: 5px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;14:50 ~ 15:10&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;(20분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 10px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 5px; height: 5px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 14.6667px;&quot;&gt;발표자 Q&amp;amp;A&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 127px; height: 5px;&quot;&gt;&lt;p noto=&quot;&quot; sans=&quot;&quot; kr&quot;,=&quot;&quot; sans-serif;=&quot;&quot; font-size:=&quot;&quot; 15px;=&quot;&quot; color:=&quot;&quot; rgb(61,=&quot;&quot; 118,=&quot;&quot; 171);&quot;=&quot;&quot; style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 발표자분들에게 궁금한점을 남겨주시면 답변해드립니다.&lt;/span&gt;&lt;/p&gt;&lt;p noto=&quot;&quot; sans=&quot;&quot; kr&quot;,=&quot;&quot; sans-serif;=&quot;&quot; font-size:=&quot;&quot; 15px;=&quot;&quot; color:=&quot;&quot; rgb(61,=&quot;&quot; 118,=&quot;&quot; 171);&quot;=&quot;&quot; style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;a href=&quot;http://slido.com%2C/&quot; style=&quot;box-sizing: inherit; background-color: transparent; -webkit-tap-highlight-color: transparent; word-break: break-word; color: rgb(3, 155, 229) !important;&quot;&gt;http://slido.com,&lt;/a&gt;&amp;nbsp;코드: ted1&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 9px; height: 5px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt; color: rgb(0, 0, 0);&quot;&gt;휴식시간&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;(10분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 10px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 9px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;15:20 ~ 15:50&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;(30분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 10px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;박상권&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(61, 118, 171);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 5px; height: 5px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;헤이딜러에서는 어떻게 일하나요?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 헤이딜러 서비스를 운영중인 PRND컴퍼니에서 피쳐가 시작되서 끝나는 과정에 대해서 이야기 합니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 기획 -&amp;gt; 디자인 -&amp;gt;&amp;nbsp; 개발 -&amp;gt; 리뷰 -&amp;gt; QA -&amp;gt; 배포 -&amp;gt; 테스트 의 프로세스에 대해 이야기 합니다.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 5px; height: 5px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;휴식시간(10분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 10px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 108px; height: 36px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;16:00 ~ 16:30&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;(30분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 86px; height: 36px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;오민식&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 207px; height: 36px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;b style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;Kotlin, AAC 및 RxJava2와 함께한 신규 어플리케이션 개발기&lt;/b&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 515px; height: 36px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 큰 팀에서 열심히 일하던 개발자가, 혼자서 밑바닥 부터 개발을 하겠다고 팀을 뛰쳐 나왔습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 마치 망망대해에 던져진 느낌입니다. 어떻게 해야 혼자서 유지 보수가 가능한 꿈만 같은 코드를 짤 수 있을까요?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 반복 작업에 질린 개발자가 깨끗한 코드를 목표로 신기술을 적용해가는 과정을 다룹니다.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 9px; height: 5px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt; color: rgb(0, 0, 0);&quot;&gt;휴식시간(10분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 10px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;16:40 ~ 17:10&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;(30분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;노현석&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;Android + DI + Koin = Easy?!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; width: 5px; height: 5px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- Android 개발시 DI 적용은 하고 싶은데 Dagger는 진입 장벽이 높아서 고민하고 계시지 않으신가요?&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 좀 더 쉽게 DI 적용이 가능한 KOIN을 알려드립니다. 본 발표에서는 Library 소개 및 사용한 경험에 대해서 이야기 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171);&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt; color: rgb(0, 0, 0);&quot;&gt;휴식시간(10분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171);&quot;&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&amp;nbsp;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt; text-align: center;&quot;&gt;17:20 ~ 18:00&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;(40분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&amp;nbsp;-&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;라이트닝 토크&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;1. 나윤호: 머테리얼 디자인 2.0 적용해보기&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;- 지난 5월에 발표된 구글 머테리얼 디자인 2.0을 간단하게 알아보고, 이를 개인 프로젝트에 적용했던 경험을 공유합니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;2. 최예찬: Android 개발자가 왜 거기서 나와...?&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 개발에 입문하고 4년간 안드로이드 외 다양한 분야들을 오고가며 공부한 경험, 그 안에서 느꼈던 장점과 시각을 공유드리고자 합니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;3. 백수사랑: 텍스트에 스타일 끼얹기 Part1&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;-&amp;nbsp;마크업 태그와 Spannable 을 활용하여 안드로이드의 여러 뷰 컴포넌트내에 HTML 스타일의 시각적 효과를 적용할 수 있는 방법을 공유해보려고 합니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;4. 윤정현:&amp;nbsp;스타트업 에서 주니어 개발자 혼자 하나의 서비스를 책임지는 방법&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 14.6667px;&quot;&gt;- 주니어 개발자가 스타트업에서 일하면서 쉽게 겪어보지 못한 경험에 대해 얘기합니다.&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171);&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;휴식시간(10분)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px;&quot;&gt;&lt;p style=&quot;box-sizing: inherit;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit;&quot;&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 108px; height: 60px;&quot;&gt;&lt;div align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;:10 ~ 18:30&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;&lt;div align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; font-size: 11pt;&quot;&gt;(20분)&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 86px; height: 60px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;-&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 207px; height: 60px;&quot;&gt;&lt;p align=&quot;center&quot; style=&quot;box-sizing: inherit; text-align: center; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;&lt;b style=&quot;box-sizing: inherit;&quot;&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;b style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 14.6667px;&quot;&gt;발표자 Q&amp;amp;A&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td class=&quot;&quot; style=&quot;box-sizing: inherit; padding: 3px 4px 2px; border-top: 1px solid rgb(225, 238, 247); border-right: 1px solid rgb(225, 238, 247); border-bottom: none; border-left: none; border-image: initial; vertical-align: middle; border-radius: 2px; color: rgb(61, 118, 171); width: 515px; height: 60px;&quot;&gt;&lt;p noto=&quot;&quot; sans=&quot;&quot; kr&quot;,=&quot;&quot; sans-serif;=&quot;&quot; font-size:=&quot;&quot; 15px;&quot;=&quot;&quot; style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;- 발표자분들에게 궁금한점을 남겨주시면 답변해드립니다.&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p noto=&quot;&quot; sans=&quot;&quot; kr&quot;,=&quot;&quot; sans-serif;=&quot;&quot; font-size:=&quot;&quot; 15px;&quot;=&quot;&quot; style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 14.6667px;&quot;&gt;&lt;a href=&quot;http://slido.com%2C/&quot; style=&quot;box-sizing: inherit; background-color: transparent; -webkit-tap-highlight-color: transparent; word-break: break-word; color: rgb(3, 155, 229) !important;&quot;&gt;http://slido.com,&lt;/a&gt;&amp;nbsp;코드: ted2&lt;/span&gt;&lt;span style=&quot;box-sizing: inherit; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;box-sizing: inherit; line-height: 1.5;&quot;&gt;&lt;br style=&quot;box-sizing: inherit;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;제 발표는 아래와 같은 피드백이 있었어요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;#좋았던점&lt;/p&gt;&lt;p&gt;적용하는 방법에 대한 예시를 들어 설명해 주셔서 많은 도움이 되었습니다&lt;/p&gt;&lt;p&gt;recyclerview의 반복되는 함수를 base로 만든 경험을 잘 들었습니다.&lt;/p&gt;&lt;p&gt;본인의 경험을 살려 재미있게 설명을 잘 해주셨고 개인적으로 원하는 내용이여서 만족스럽습니다&amp;nbsp;&lt;/p&gt;&lt;p&gt;발표가 귀에 쏙쏙 편하게 들림&lt;/p&gt;&lt;p&gt;Adapter 클래스를 예로 들어 모듈화 처리하는 내용이 흥미로웠습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;자신의 힘들었던 내용의 고민&lt;/p&gt;&lt;p&gt;타인의 고민을 통해 배움&lt;/p&gt;&lt;p&gt;프로젝트를 진행할때 어떠한구조로 진행되야하는지 알아서 좋았습니다&lt;/p&gt;&lt;p&gt;개인 경험의 공유 중심&lt;/p&gt;&lt;p&gt;지금 고민하는 것과 비슷했다&lt;/p&gt;&lt;p&gt;안드로이드 구조 변화에 대한 내용을 들어서 좋았습니다.&lt;/p&gt;&lt;p&gt;한 번쯤 고민할만한 공감되는 이야기라서 좋았습니다.&lt;/p&gt;&lt;p&gt;MVP, MVVM 패턴을 모두 겪으면서 각각의 장단점을 잘 설명해주셔서 좋았습니다. 현재 MVP로 개발하고 있는 저로써는 차후 MVVM으로의 전환 또한 생각하게 된 계기가 되었습니다.&lt;/p&gt;&lt;p&gt;다른 곳에서 보지 못했던 유용한 예제&lt;/p&gt;&lt;p&gt;저 또한 주니어 개발자로서 안드로이드 처음 메인을 맡으면서 겪고 있는 비슷한 이야기들을 공유해 주셔서 좋았습니다.&lt;/p&gt;&lt;p&gt;안드로이드 아키텍처 입문자의 시선으로 구조를 변경하게 된 계기나 내용 구성이 알아듣기 쉽고 공감이 많이 되었습니다. 향후 개발을 함에 있어서 많은 도움이 될 것 같습니다. 재미있게 잘 들었습니다.&lt;/p&gt;&lt;p&gt;기본을 잘 설명해줘서 좋았습니다.&lt;/p&gt;&lt;p&gt;프로젝트 전반적으로 고민했던 부분에 대해서 공감했습니다.&lt;/p&gt;&lt;p&gt;&quot;자신의 사례를 통해서 현업에서는 어떻게 하는지 알 수 있어 좋았다.&lt;/p&gt;&lt;p&gt;특히 리싸이클러뷰는 매우 만족했다.&quot;&lt;/p&gt;&lt;p&gt;MVVM + Databinding에 대한 개념과 적용하면서 겪은 내용들을 잘 설명해주심&lt;/p&gt;&lt;p&gt;프로젝트 구조경험을 들어서 좋았습니다.&lt;/p&gt;&lt;p&gt;MVP 페턴을 적용했을때 좋았던 점이랑 문제점을 지적하고 그 해결책으로 MVVM패턴을 적용한 방식이 좋았습니다&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;#아쉬웠던점&lt;/p&gt;&lt;p&gt;코드가 잘 보이지 않아 아쉬웠습니다.&lt;/p&gt;&lt;p&gt;조금 설명이 부족한 부분이 있어서 아쉬웠습니다&lt;/p&gt;&lt;p&gt;코드로만 접근하는 방식보다는 쉬운 개념정도부터 정리해주시면서 접근해주신다면 더 좋지 않을까 하는 피드백 드려봅니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;정리가 될던 느낌이다.&lt;/p&gt;&lt;p&gt;&quot;단순 유행하니까? 쓴다 라는 등의 초급자 스피커같았다. 보다 명확한이유. 아키텍처를 통해 이로운점이나 단점도 소개필요 하다고 생각합니다. 또한 BaseAdaper는 저는 매우비효율적이라고 생각합니다. 실무에서 새로운사람이왔을경우 저러한 랩핑 클래스를 익히고 쓰려면 그만큼의 시간이듭니다. 강의에서 소개시켜준 랩핑코드는 필요한코드인지 한번 되새김이 필요해보입니다. 내년에는 좀더 퀄리티있는 스피커가&lt;/p&gt;&lt;p&gt;되시길.. 아키택쳐 패턴을 하면서 테스트코드 짜기 쉽다. 실무에서 쓰는방법등 이런 소개를 개인적으로는 듣고싶네요&quot;&lt;/p&gt;&lt;p&gt;결론을 알 수가 없어서 아쉬웠습니다.&lt;/p&gt;&lt;p&gt;조금 시간이 짧았던게 아쉬웠습니다.&lt;/p&gt;&lt;p&gt;조그만 더 상세하게 해줬으면 했습니다.&lt;/p&gt;&lt;p&gt;MVP, MVVM을 사용한 경험에 대해서는 예전부터 많은 세션들이 있었기에 특별한 인사이트를 경험하진 못했던 것 같아요&lt;/p&gt;</description>
      <category>Android/세미나</category>
      <author>sjjeong1225</author>
      <guid isPermaLink="true">https://googry.tistory.com/44</guid>
      <comments>https://googry.tistory.com/44#entry44comment</comments>
      <pubDate>Wed, 5 Dec 2018 22:01:11 +0900</pubDate>
    </item>
    <item>
      <title>(Android) 키보드가 보여질 때 화면 스크롤하기</title>
      <link>https://googry.tistory.com/43</link>
      <description>&lt;p&gt;Activity에서 키보드가 올라오고 화면크기를 변경하기 위해 AndroidManifest.xml에 android:windowSoftInputMode에 adjustResize를 설정해줍니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 266px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F519495B56EAB110&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F519495B56EAB110&quot; width=&quot;266&quot; height=&quot;464&quot; filename=&quot;keyboard_scroll_01.gif&quot; filemime=&quot;image/gif&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;위에 화면처럼 EditText를 선택하고 키보드가 올라오면 아래 로그인 버튼이 보이지 않아 사용자가 스크롤 해야 하는 문제가 있습니다.&lt;/p&gt;&lt;p&gt;&lt;strike&gt;(스크롤 하기 완전 귀찮아..)&lt;/strike&gt;&lt;/p&gt;&lt;p&gt;&lt;br class=&quot;Apple-interchange-newline&quot;&gt;이번 포스팅에서는 키보드가 보여질 때 화면을 키보드 크기 만큼 위로 스크롤 하는 방법에 대해 설명하고자 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;andorid softkeyboard height라는 키워드로&amp;nbsp;구글링을 하던 중에 &lt;a href=&quot;https://pspdfkit.com/blog/2016/keyboard-handling-on-android/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Keyboard Handling on Android&lt;/a&gt; 글을 보고 키보드가 보이고 사라지는 이벤트를 만들었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;제가 예제로 만든 앱의 layout은 아래와 같습니다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;xml version=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;1.0&quot; &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;encoding=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;?&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;ScrollView &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;xmlns:&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:id=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@+id/sv_root&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;LinearLayout&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:gravity=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;center_horizontal&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:orientation=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;vertical&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:paddingBottom=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;20dp&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;ImageView&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;240dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;240dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_marginTop=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;40dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:src=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@mipmap/ic_launcher&quot; &lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;EditText&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;200dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_marginTop=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;20dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:hint=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@string/hint_id&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:inputType=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;text&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:lines=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;1&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:textSize=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;24sp&quot; &lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;EditText&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;200dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_marginTop=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;4dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:hint=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@string/hint_password&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:inputType=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;textPassword&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:lines=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;1&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:textSize=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;24sp&quot; &lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;Button&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;200dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_marginTop=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;3dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@string/login&quot; &lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;LinearLayout&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;200dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_marginTop=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;8dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:paddingEnd=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;8dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:paddingStart=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;8dp&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &amp;lt;TextView&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@string/sign_up&quot; &lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &amp;lt;View&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;0dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;0dp&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_weight=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;1&quot; &lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &amp;lt;TextView&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@string/forgot_your_password&quot; &lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/ScrollView&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;키보드가 보여질 때 화면을 스크롤 하기 위해서 최상단에는 ScrollView를 추가했습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;저는 KeyboardVisibilityUtils라는 클래스를 만들고 Activity에서 가져다 사용 했습니다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;import &lt;/span&gt;android.graphics.Rect&lt;br /&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;import &lt;/span&gt;android.view.ViewTreeObserver&lt;br /&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;import &lt;/span&gt;android.view.Window&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;class &lt;/span&gt;KeyboardVisibilityUtils(&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;window&lt;/span&gt;: Window&lt;span style=&quot;color:#cc7832;&quot;&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;        private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;onShowKeyboard&lt;/span&gt;: ((keyboardHeight: Int) -&amp;gt; Unit)? = &lt;span style=&quot;color:#cc7832;&quot;&gt;null,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;        private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;onHideKeyboard&lt;/span&gt;: (() -&amp;gt; Unit)? = &lt;span style=&quot;color:#cc7832;&quot;&gt;null&lt;br /&gt;&lt;/span&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;MIN_KEYBOARD_HEIGHT_PX &lt;/span&gt;= &lt;span style=&quot;color:#6897bb;&quot;&gt;150&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;windowVisibleDisplayFrame &lt;/span&gt;= Rect()&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;private var &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;lastVisibleDecorViewHeight&lt;/span&gt;: Int = &lt;span style=&quot;color:#6897bb;&quot;&gt;0&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;private val &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;onGlobalLayoutListener &lt;/span&gt;= ViewTreeObserver.OnGlobalLayoutListener &lt;span style=&quot;font-weight:bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;window&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;decorView&lt;/span&gt;.getWindowVisibleDisplayFrame(&lt;span style=&quot;color:#9876aa;&quot;&gt;windowVisibleDisplayFrame&lt;/span&gt;)&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;val &lt;/span&gt;visibleDecorViewHeight = &lt;span style=&quot;color:#9876aa;&quot;&gt;windowVisibleDisplayFrame&lt;/span&gt;.height()&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color:#808080;&quot;&gt;// Decide whether keyboard is visible from changing decor view height.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;if &lt;/span&gt;(&lt;span style=&quot;color:#9876aa;&quot;&gt;lastVisibleDecorViewHeight &lt;/span&gt;!= &lt;span style=&quot;color:#6897bb;&quot;&gt;0&lt;/span&gt;) {&lt;br /&gt;            &lt;span style=&quot;color:#cc7832;&quot;&gt;if &lt;/span&gt;(&lt;span style=&quot;color:#9876aa;&quot;&gt;lastVisibleDecorViewHeight &lt;/span&gt;&amp;gt; visibleDecorViewHeight + &lt;span style=&quot;color:#9876aa;&quot;&gt;MIN_KEYBOARD_HEIGHT_PX&lt;/span&gt;) {&lt;br /&gt;                &lt;span style=&quot;color:#808080;&quot;&gt;// Calculate current keyboard height (this includes also navigation bar height when in fullscreen mode).&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;val &lt;/span&gt;currentKeyboardHeight = &lt;span style=&quot;color:#9876aa;&quot;&gt;window&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;decorView&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;height &lt;/span&gt;- &lt;span style=&quot;color:#9876aa;&quot;&gt;windowVisibleDisplayFrame&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;&quot;&gt;bottom&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;// Notify listener about keyboard being shown.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;onShowKeyboard&lt;/span&gt;?.invoke(currentKeyboardHeight)&lt;br /&gt;            } &lt;span style=&quot;color:#cc7832;&quot;&gt;else if &lt;/span&gt;(&lt;span style=&quot;color:#9876aa;&quot;&gt;lastVisibleDecorViewHeight &lt;/span&gt;+ &lt;span style=&quot;color:#9876aa;&quot;&gt;MIN_KEYBOARD_HEIGHT_PX &lt;/span&gt;&amp;lt; visibleDecorViewHeight) {&lt;br /&gt;                &lt;span style=&quot;color:#808080;&quot;&gt;// Notify listener about keyboard being hidden.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;onHideKeyboard&lt;/span&gt;?.invoke()&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style=&quot;color:#808080;&quot;&gt;// Save current decor view height for the next call.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;lastVisibleDecorViewHeight &lt;/span&gt;= visibleDecorViewHeight&lt;br /&gt;    &lt;span style=&quot;font-weight:bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;init &lt;/span&gt;{&lt;br /&gt;        &lt;span style=&quot;color:#9876aa;&quot;&gt;window&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;decorView&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;viewTreeObserver&lt;/span&gt;.addOnGlobalLayoutListener(&lt;span style=&quot;color:#9876aa;&quot;&gt;onGlobalLayoutListener&lt;/span&gt;)&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;detachKeyboardListeners&lt;/span&gt;() {&lt;br /&gt;        &lt;span style=&quot;color:#9876aa;&quot;&gt;window&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;decorView&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;viewTreeObserver&lt;/span&gt;.removeOnGlobalLayoutListener(&lt;span style=&quot;color:#9876aa;&quot;&gt;onGlobalLayoutListener&lt;/span&gt;)&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;visibleDecorViewHeight는 현재 화면의 height 값입니다.&lt;/p&gt;&lt;p&gt;만약 키보드가 올라와 있는 상태라면 visibleDecorViewHeight는 키보드가 올라오기 전 height보다 작습니다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;if &lt;/span&gt;(&lt;span style=&quot;color:#9876aa;&quot;&gt;lastVisibleDecorViewHeight &lt;/span&gt;&amp;gt; visibleDecorViewHeight + &lt;span style=&quot;color:#9876aa;&quot;&gt;MIN_KEYBOARD_HEIGHT_PX&lt;/span&gt;) {&lt;br /&gt;    &lt;span style=&quot;color:#808080;&quot;&gt;// Calculate current keyboard height (this includes also navigation bar height when in fullscreen mode).&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;val &lt;/span&gt;currentKeyboardHeight = &lt;span style=&quot;color:#9876aa;&quot;&gt;window&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;decorView&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;height &lt;/span&gt;- &lt;span style=&quot;color:#9876aa;&quot;&gt;windowVisibleDisplayFrame&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;&quot;&gt;bottom&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;// Notify listener about keyboard being shown.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;onShowKeyboard&lt;/span&gt;?.invoke(currentKeyboardHeight)&lt;br /&gt;} &lt;span style=&quot;color:#cc7832;&quot;&gt;else if &lt;/span&gt;(&lt;span style=&quot;color:#9876aa;&quot;&gt;lastVisibleDecorViewHeight &lt;/span&gt;+ &lt;span style=&quot;color:#9876aa;&quot;&gt;MIN_KEYBOARD_HEIGHT_PX &lt;/span&gt;&amp;lt; visibleDecorViewHeight) {&lt;br /&gt;    &lt;span style=&quot;color:#808080;&quot;&gt;// Notify listener about keyboard being hidden.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;onHideKeyboard&lt;/span&gt;?.invoke()&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;b&gt;이전에 보여준 화면 height&lt;/b&gt;가 &lt;b&gt;현재 화면 height&lt;/b&gt; + &lt;b&gt;최소 키보드 크기 값&lt;/b&gt; 보다 크면 키보드가 올라온 것으로 보고 키보드가 보였다는 이벤트를 전달하고&lt;/p&gt;&lt;p&gt;&lt;b&gt;이전에 보여준 화면 height&lt;/b&gt; + &lt;b&gt;최소 키보드 크기 값&lt;/b&gt;이 &lt;b&gt;현재 화면 height&lt;/b&gt; 보다 작으면 키보드가 내려간 것으로 보고 키보드가 사라졌다는 이벤트를 전달 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그리고 MainActivity는 아래처럼 작성했습니다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;import &lt;/span&gt;android.os.Bundle&lt;br /&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;import &lt;/span&gt;android.support.v7.app.AppCompatActivity&lt;br /&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;import &lt;/span&gt;kotlinx.android.synthetic.main.activity_main.*&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;class &lt;/span&gt;MainActivity : AppCompatActivity() {&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;private lateinit var &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;keyboardVisibilityUtils&lt;/span&gt;: KeyboardVisibilityUtils&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onCreate&lt;/span&gt;(savedInstanceState: Bundle?) {&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;super&lt;/span&gt;.onCreate(savedInstanceState)&lt;br /&gt;        setContentView(R.layout.&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;activity_main&lt;/span&gt;)&lt;br /&gt;        &lt;span style=&quot;color:#9876aa;&quot;&gt;keyboardVisibilityUtils &lt;/span&gt;= KeyboardVisibilityUtils(&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color:#467cda;&quot;&gt;onShowKeyboard = &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;{ &lt;/span&gt;keyboardHeight &lt;span style=&quot;font-weight:bold;&quot;&gt;-&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;                    &lt;/span&gt;sv_root.&lt;span style=&quot;color:#ffc66d;font-style:italic;&quot;&gt;run &lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;                        &lt;/span&gt;smoothScrollTo(&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;scrollX&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9876aa;font-style:italic;&quot;&gt;scrollY &lt;/span&gt;+ keyboardHeight)&lt;br /&gt;                    &lt;span style=&quot;font-weight:bold;&quot;&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;                }&lt;/span&gt;)&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;override fun &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onDestroy&lt;/span&gt;() {&lt;br /&gt;        &lt;span style=&quot;color:#9876aa;&quot;&gt;keyboardVisibilityUtils&lt;/span&gt;.detachKeyboardListeners()&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;super&lt;/span&gt;.onDestroy()&lt;br /&gt;    }&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;onCreate에서 KeyboardVisibilityUtils클래스를 만들 때 인자로 window를 전달하고 onShowKeyboard(키보드가 보여질 때 해당 코드가 호출)를 통해 키보드가 보여지는 이벤트를 받아서 ScrollView를 keyboardHeight만큼 스크롤 하고 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 251px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E2DE465B56F1392E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E2DE465B56F1392E&quot; width=&quot;251&quot; height=&quot;435&quot; filename=&quot;keyboard_scroll_02.gif&quot; filemime=&quot;image/gif&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 EditText를 선택하면 자동으로 화면이 위로 스크롤 됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;출처:&amp;nbsp;&lt;a href=&quot;https://pspdfkit.com/blog/2016/keyboard-handling-on-android/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://pspdfkit.com/blog/2016/keyboard-handling-on-android/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br class=&quot;Apple-interchange-newline&quot;&gt;android keyboard handling&lt;/p&gt;&lt;p&gt;android keyboard scroll up&lt;/p&gt;&lt;p&gt;android keyboard event&lt;/p&gt;</description>
      <category>Android/Android</category>
      <author>sjjeong1225</author>
      <guid isPermaLink="true">https://googry.tistory.com/43</guid>
      <comments>https://googry.tistory.com/43#entry43comment</comments>
      <pubDate>Tue, 24 Jul 2018 17:11:25 +0900</pubDate>
    </item>
    <item>
      <title>(Android) DataBinding Two Way Binding</title>
      <link>https://googry.tistory.com/40</link>
      <description>&lt;p&gt;이 글은 &lt;a href=&quot;https://github.com/googlesamples/android-architecture/tree/todo-mvp/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;MVP&lt;/a&gt;&amp;nbsp;패턴과&amp;nbsp;&lt;a href=&quot;http://gun0912.tistory.com/71&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;DataBinding&lt;/a&gt;&amp;nbsp;라이브러리를&amp;nbsp;모르면 이해하기 힘든 글입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Android에서 DataBinding은&amp;nbsp;ButterKnife, KotlinExtension과 같이 편리하고 유용하게&amp;nbsp;사용할 수 있는 Library 입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;저는 MVP+DataBinding 구조로 개인프로젝트를 진행하고 있습니다.&lt;/p&gt;&lt;p&gt;&lt;strike&gt;&lt;a href=&quot;https://github.com/googlesamples/android-architecture/tree/deprecated-todo-databinding&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;(실제로 이 방식은 deprecated 된 방식입니다.)&lt;/a&gt;&lt;/strike&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 MVP와 DataBinding을 사용하게 되면 View에 Click Listener를 등록한 다음&amp;nbsp;Presenter의 함수를 호출하지 않고 바로 xml에서 Presenter의 함수를 호출하는 효과를 볼 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;strike&gt;(내부적으로는 앞에 이야기&amp;nbsp;한 방식으로 하고 있습니다.)&lt;/strike&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하지만 layout에 EditText가 있고 값을 가져와서 저장해야 할 때 저는 Presenter가 아닌 View의 함수를 호출해서 사용했습니다.(ㅠㅠ)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그래서 억지로 억지로 사용하다가 오늘 Two Way Binding에 대해 알게 되었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그럼 이제 예를 통해 오늘의 주제인 DataBinding Two Way Binding에 대해 알아보겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 533px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99FD873359EF3A4919&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99FD873359EF3A4919&quot; width=&quot;300&quot; height=&quot;533&quot; filename=&quot;ui-MainActivity-10242017220237.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 300px; height: 533px;&quot; original=&quot;yes&quot;/&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 533px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DFC73359EF3A4A35&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DFC73359EF3A4A35&quot; width=&quot;300&quot; height=&quot;533&quot; filename=&quot;ui-MainActivity-10242017220243.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 300px; height: 533px;&quot; original=&quot;yes&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이번 글에서 예제로 사용할 화면입니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;왼쪽 화면처럼 이름, 이메일, 폰번호를 입력하고 저장 버튼을 누르면 오른쪽 화면처럼 요약을 보여주려고 합니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;먼저 Two Way Binding을 모른다고 가정하고 진행해보겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 380px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992C183359EF436407&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992C183359EF436407&quot; width=&quot;380&quot; height=&quot;196&quot; filename=&quot;스크린샷 2017-10-24 오후 10.40.09.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;xml version=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;1.0&quot; &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;encoding=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;?&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;layout &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;xmlns:&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;data&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;variable&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;view&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;type=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;com.googry.googrydatabindingtwowaybinding.ui.unknown.UnknownContract.View&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;variable&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;user&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;type=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;com.googry.googrydatabindingtwowaybinding.data.User&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;/data&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;LinearLayout&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:orientation=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;vertical&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:padding=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;16dp&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;background-color:#344134;&quot;&gt;EditText&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:id=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@+id/et_name&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:hint=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@string/name&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@{user.name}&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;background-color:#344134;&quot;&gt;EditText&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:id=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@+id/et_email&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:hint=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@string/email&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@{user.email}&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;background-color:#344134;&quot;&gt;EditText&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:id=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@+id/et_phone&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:hint=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@string/phone&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@{user.phone}&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;Button&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:onClick=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@{() -&amp;gt; view.onSaveClick()}&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@string/save&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/layout&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;layout 입니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;User를 받아와서 각 EditText에 값을 넣어줍니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;UnknownContract.View를 받아와서 onClick 이벤트를 받아줍니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;public interface &lt;/span&gt;UnknownContract {&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;interface &lt;/span&gt;Presenter &lt;span style=&quot;color:#cc7832;&quot;&gt;extends &lt;/span&gt;BasePresenter {&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;save&lt;/span&gt;(String name&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;String email&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;String phone)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;interface &lt;/span&gt;View &lt;span style=&quot;color:#cc7832;&quot;&gt;extends &lt;/span&gt;BaseView&amp;lt;Presenter&amp;gt; {&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;setUser&lt;/span&gt;(User user)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;        void &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;showSaveResult&lt;/span&gt;(User user)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;        void &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onSaveClick&lt;/span&gt;()&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;UnknownContract 입니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;Presenter는 name, email, phone을 입력받는 save()를 선언합니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;View는 setUser(), showSaveResult()와 버튼 클릭 이벤트를 받는 onSaveClick()을 선언합니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#bbb529;&quot;&gt;@Override&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;public void &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;onSaveClick&lt;/span&gt;() {&lt;br /&gt;    &lt;span style=&quot;color:#9876aa;&quot;&gt;mPresenter&lt;/span&gt;.save(&lt;br /&gt;            &lt;span style=&quot;color:#9876aa;&quot;&gt;mBinding&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;&quot;&gt;etName&lt;/span&gt;.getText().toString()&lt;span style=&quot;color:#cc7832;&quot;&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;mBinding&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;&quot;&gt;etEmail&lt;/span&gt;.getText().toString()&lt;span style=&quot;color:#cc7832;&quot;&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;mBinding&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;&quot;&gt;etPhone&lt;/span&gt;.getText().toString()&lt;br /&gt;    )&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;}&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;UnknownFragment안에 onSaveClick()를 구현했습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이 부분에서 EditText의 내용을 가져와 Presenter에 save()함수를 통해 전달해 줍니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#bbb529;&quot;&gt;@Override&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;public void &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;save&lt;/span&gt;(String name&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;String email&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;String phone) {&lt;br /&gt;    &lt;span style=&quot;color:#9876aa;&quot;&gt;mUser&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;&quot;&gt;name &lt;/span&gt;= name&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;mUser&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;&quot;&gt;email &lt;/span&gt;= email&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;mUser&lt;/span&gt;.&lt;span style=&quot;color:#9876aa;&quot;&gt;phone &lt;/span&gt;= phone&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;mUserDataSource&lt;/span&gt;.saveUser(&lt;span style=&quot;color:#9876aa;&quot;&gt;mUser&lt;/span&gt;)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;mView&lt;/span&gt;.showSaveResult(&lt;span style=&quot;color:#9876aa;&quot;&gt;mUser&lt;/span&gt;)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;}&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;UnknownPresenter안에 save()를 구현했습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;내부적으로 mUser에 값을 넣어주고 UserDataSource에 User를 저장하고 View에 결과를 보여주라고 showSaveResult()함수를 호출 합니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#bbb529;&quot;&gt;@Override&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;public void &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;showSaveResult&lt;/span&gt;(User user) {&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;new &lt;/span&gt;AlertDialog.Builder(getContext())&lt;br /&gt;            .setMessage(user.toString())&lt;br /&gt;            .show()&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;}&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;그리고 UnknownFragment에서 AlertDialog를 통해 결과를 보여주게 됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이렇게 순서가 xml -&amp;gt; View.onSaveClick() -&amp;gt; Presenter.save() -&amp;gt; View.showSaveResult() 입니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;하지만 버튼 클릭을 했을 때 각 EditText내용의 값을 가져오면서 View의 함수를 호출하는 것이 아닌 바로 Presenter의 함수를 호출 할 수 있을까요?&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;다르게 말하자면 View.onSaveClick()을 호출하지 않고 xml -&amp;gt; Presetner.save() -&amp;gt; View.showSaveResult()를 할 수 있을까요?&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;네, 바로 Two Way Binding을 하게 되면 할 수 있습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;그럼 이제 Two Way Binding을 하는 방법에 대해 알아보겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;private &lt;/span&gt;User &lt;span style=&quot;color:#9876aa;&quot;&gt;mUser&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#bbb529;&quot;&gt;@Override&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;public void &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;start&lt;/span&gt;() {&lt;br /&gt;    &lt;span style=&quot;color:#9876aa;&quot;&gt;mView&lt;/span&gt;.setUser(&lt;span style=&quot;color:#9876aa;&quot;&gt;mUser&lt;/span&gt;)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;Presenter안에 User가 있고 View에 User객체를 전달해줍니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;그리고 Contract.View에 있는 setUser()라는 함수의 구현부분은 이렇게 생겼습니다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color:#bbb529;&quot;&gt;@Override&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;public void &lt;/span&gt;&lt;span style=&quot;color:#ffc66d;&quot;&gt;setUser&lt;/span&gt;(User user) {&lt;br /&gt;    &lt;span style=&quot;color:#9876aa;&quot;&gt;mBinding&lt;/span&gt;.setUser(user)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;}&lt;/p&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;xml version=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;1.0&quot; &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;encoding=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;?&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;layout &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;xmlns:&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;data&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;variable&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;presenter&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;type=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;com.googry.googrydatabindingtwowaybinding.ui.known.KnownContract.Presenter&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;variable&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;user&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;type=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;com.googry.googrydatabindingtwowaybinding.data.User&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;/data&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;LinearLayout&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:orientation=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;vertical&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:padding=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;16dp&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;EditText&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:hint=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@string/name&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@={user.name}&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;EditText&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:hint=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@string/email&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@={user.email}&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;EditText&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:hint=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@string/phone&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@={user.phone}&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;Button&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_width=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;match_parent&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:layout_height=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;wrap_content&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:onClick=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@{() -&amp;gt; presenter.save()}&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;android&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;:text=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;@string/save&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/layout&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;저렇게 binding에 넣어준 User를 @{}가 아닌 @={}로 각 EditText에 binding 하면 됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이렇게 했을 경우 EditText에서 text가 변경 될 때 마다 User안에 값을 변경하게 됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;User객체는 Presenter에서 관리하고 있기 때문에&amp;nbsp;그럼 각 EditText에서 값을 가져와 Presenter에 전달해줄 필요가 없게 됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;그래서 바로 버튼에 onClick에서 presenter.save()를 호출 할 수 있게 되는 것입니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이렇게 Two Way Binding을 사용하게 되면 바로 Presenter의 함수를 호출하여 함수 호출의 depth가 낮아지게 되는 효과를 볼 수 있습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;예제 코드는&amp;nbsp;&lt;a href=&quot;https://github.com/sjjeong/GoogryDataBindingTwoWay&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/sjjeong/GoogryDataBindingTwoWay&lt;/a&gt; 에서 확인하실 수 있습니다.&lt;/p&gt;</description>
      <category>Android/Android</category>
      <author>sjjeong1225</author>
      <guid isPermaLink="true">https://googry.tistory.com/40</guid>
      <comments>https://googry.tistory.com/40#entry40comment</comments>
      <pubDate>Tue, 24 Oct 2017 23:06:36 +0900</pubDate>
    </item>
    <item>
      <title>(DB) Sql문의 기본 CRUD 및 결합</title>
      <link>https://googry.tistory.com/39</link>
      <description>&lt;p&gt;이번 포스팅에서는 Mysql에서 Sql문을 사용해서 데이터를 CRUD하는 방법에 대해 알아보려고 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;일단 CRUD는 Create(생성), Read(읽기), Update(갱신), Delete(삭제)의 앞글자만 따서 CRUD라고 부릅니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;먼저 읽기에 대해 알아보겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;여기서 사용할 샘플 데이터는&amp;nbsp;&lt;a href=&quot;http://futurists.tistory.com/19&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://futurists.tistory.com/19&lt;/a&gt;를 참고했습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;sql에서 읽기는 SELECT명령어를 사용합니다.&lt;/p&gt;&lt;p&gt;문법은 SELECT 열명 FROM 테이블명; 입니다.&lt;/p&gt;&lt;p&gt;열명에 *를 넣게 되면 테이블에서 전체 열을 가져올 수 있고 ,를 사용하게 되면 복수의 열을 가져 올 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하지만 이렇게 사용하면 테이블에 있는 모든 데이터를 가져오게 되는데 특정 조건에 해당하는 데이터만 가져오기 위해서 WHERE을 추가해 줘야합니다.&lt;/p&gt;&lt;p&gt;문법은 SELECT 열명 FROM 테이블명&amp;nbsp;WHERE 조건; 입니다.&lt;/p&gt;&lt;p&gt;여기서 조건에 들어가는 비교연산자는 다음과 같습니다.&lt;/p&gt;&lt;p&gt;= 같다&lt;/p&gt;&lt;p&gt;&amp;lt;&amp;gt; 같지않다&lt;/p&gt;&lt;p&gt;&amp;gt;= 크거나 같다&lt;/p&gt;&lt;p&gt;&amp;gt; 크다&lt;/p&gt;&lt;p&gt;&amp;lt;= 작거나 같다&lt;/p&gt;&lt;p&gt;&amp;lt; 작다&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;SELECT * FROM employees&amp;nbsp;WHERE gender&amp;nbsp;= 'M';&lt;/p&gt;&lt;p&gt;이렇게 명령어를 작성하면 employees 테이블에서 gender가 M인 데이터를 전부 가져오는 것입니다.&lt;/p&gt;&lt;p&gt;특정 조건에 해당하는 데이터만 가져올 수 있게 됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 600px; width: 600px; height: 281px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F15F3359E3030C0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F15F3359E3030C0A&quot; width=&quot;600&quot; height=&quot;281&quot; filename=&quot;스크린샷 2017-10-15 오후 3.39.57.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 600px; height: 281px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;SELECT * FROM employees&amp;nbsp;WHERE gender&amp;nbsp;= 'M' AND hire_date &amp;gt; '1999-01-01';&lt;/p&gt;&lt;p&gt;이렇게 명령어를 작성하면 employees&amp;nbsp;테이블에서 gender가 M이며 hire_date가 1991-01-01이상인 데이터만 가져오게 됩니다.&lt;/p&gt;&lt;p&gt;조건에 AND나 OR를 사용하면 여러개의 조건을 붙일 수 있습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 600px; width: 600px; height: 269px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99109F3359E3032D0B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99109F3359E3032D0B&quot; width=&quot;600&quot; height=&quot;269&quot; filename=&quot;스크린샷 2017-10-15 오후 3.40.13.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 600px; height: 269px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;데이터를 읽어오면서 정렬을 하기 위해선 ORDER BY 명령어를 추가해주면 됩니다.&lt;/p&gt;&lt;p&gt;SELECT * FROM employees&amp;nbsp;WHERE gender&amp;nbsp;= 'M' AND hire_date &amp;gt; '1999-01-01' ORDER BY hire_date DESC;&lt;/p&gt;&lt;p&gt;데이터를 가져오면서 hire_date를 내림차순으로 가져오게 됩니다.&lt;/p&gt;&lt;p&gt;그럼 가장 처음데이터가 최신이고 마지막데이터는 마지막이 되는 것입니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 600px; width: 600px; height: 220px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9958E73359E303441B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9958E73359E303441B&quot; width=&quot;600&quot; height=&quot;220&quot; filename=&quot;스크린샷 2017-10-15 오후 3.40.25.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 600px; height: 220px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다음은 테이블을 요약하는 함수입니다.&lt;/p&gt;&lt;p&gt;count, sum, avg는 복수개의 값들의 개수, 합, 평균을 계산하는 함수이고&lt;/p&gt;&lt;p&gt;max, min은 복수개의 값중에 최대값과 최소값을 구하는 함수입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;SELECT avg(salary) FROM salaries;&lt;/p&gt;&lt;p&gt;salaries테이블의 salary의 평균을 구하는 명령어 입니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 200px; width: 200px; height: 106px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992B643359E3035B20&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992B643359E3035B20&quot; width=&quot;200&quot; height=&quot;106&quot; filename=&quot;스크린샷 2017-10-15 오후 3.40.36.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 200px; height: 106px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;SELECT max(salary) FROM salaries;&lt;/p&gt;&lt;p&gt;salaries테이블의 salary의 최대값을 구하는 명령어 입니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 200px; width: 200px; height: 98px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99583A3359E303711A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99583A3359E303711A&quot; width=&quot;200&quot; height=&quot;98&quot; filename=&quot;스크린샷 2017-10-15 오후 3.40.51.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 200px; height: 98px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;데이터를 그룹화 해서 가져오기 위해서 GROUP BY 명령어를 사용합니다.&lt;/p&gt;&lt;p&gt;SELECT dept_no, count(*) FROM dept_manager GROUP BY dept_no;&lt;/p&gt;&lt;p&gt;dept_no와 count(*)를 dept_manager에서 가져오고 dept_no로 그룹화해서 보여주는 것입니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 200px; width: 200px; height: 231px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99AE283359E3012108&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99AE283359E3012108&quot; width=&quot;200&quot; height=&quot;231&quot; filename=&quot;스크린샷 2017-10-15 오후 3.25.18.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 200px; height: 231px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그리고 GROUP BY에서 조건을 걸고 싶다면 HAVING 명령어를 사용합니다.&lt;/p&gt;&lt;p&gt;SELECT dept_no, count(*) FROM dept_manager GROUP BY dept_no HAVING count(*) = 4;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 200px; width: 200px; height: 131px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/994F3B3359E3019F3A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F994F3B3359E3019F3A&quot; width=&quot;200&quot; height=&quot;131&quot; filename=&quot;스크린샷 2017-10-15 오후 3.34.45.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 200px; height: 131px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그리고 SELECT 명령어를 사용 할 때 1. SELECT 2. FROM 3. WHERE 4. GROUP BY 5. HAVING 6. ORDER BY 순서대로 써야합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 생성(CREATE)를 하는 INSERT 명령어에 대해 알아보겠습니다.&lt;/p&gt;&lt;p&gt;INSERT의 기본 구조는 INSERT INTO 테이블명 VALUES 데이터; 입니다.&lt;/p&gt;&lt;p&gt;우선 DESC dempartments;로 테이블의 형태를 보겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 600px; width: 600px; height: 148px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9969373359E304D71C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9969373359E304D71C&quot; width=&quot;600&quot; height=&quot;148&quot; filename=&quot;스크린샷 2017-10-15 오후 3.48.21.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 600px; height: 148px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;dept_no는 char(4)타입이며 primary key입니다.&lt;/p&gt;&lt;p&gt;dept_name은 varchar(40)타입입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;SELECT * FROM departments ORDER BY dept_no;로 값들을 확인합니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 257px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9996D93359E3053228&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9996D93359E3053228&quot; width=&quot;300&quot; height=&quot;257&quot; filename=&quot;스크린샷 2017-10-15 오후 3.47.50.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 300px; height: 257px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그럼 이제 dept_no가 d010이고 dept_name이 Mobile App인 값을 넣어보겠습니다.&lt;/p&gt;&lt;p&gt;INSERT INTO departments VALUES ('d010', 'Mobile App');&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9981B43359E305CE35&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9981B43359E305CE35&quot; width=&quot;500&quot; height=&quot;34&quot; filename=&quot;스크린샷 2017-10-15 오후 3.52.10.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;데이터 생성에 성공했습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;SELECT * FROM departments ORDER BY dept_no;로 확인해보면&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 271px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A1A83359E305FC22&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A1A83359E305FC22&quot; width=&quot;300&quot; height=&quot;271&quot; filename=&quot;스크린샷 2017-10-15 오후 3.52.15.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 300px; height: 271px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;d010에 Mobile App이 추가된 것을 확인 할 수 있습니다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;한번에 복수개를 넣고 싶다면 INSERT INTO departments VALUES (), (), (), ... (); 로 작성하면 됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이제 데이터를 변경하는 UPDATE에 대해 알아보겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;UPDATE의 기본 구조는 UPDATE 테이블명 SET 열명 = 값; 입니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;UPDATE에도 WHERE을 사용해 특정 조건에 해당하는 값만 갱신 할 수 있습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;그럼 우리는 d010의 dept_name을 Mobile App에서 Mobile Development로 변경하겠습니다.&lt;/p&gt;&lt;p&gt;UPDATE departments SET dept_name = 'Mobile Deveopment' WHERE dept_no = 'd010';&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 35px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99784C3359E309E22A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99784C3359E309E22A&quot; width=&quot;300&quot; height=&quot;35&quot; filename=&quot;스크린샷 2017-10-15 오후 4.09.40.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 300px; height: 35px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;데이터 변경에 성공했습니다.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;SELECT * FROM departments ORDER BY dept_no;로 확인해보겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 274px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9984553359E30A0835&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9984553359E30A0835&quot; width=&quot;300&quot; height=&quot;274&quot; filename=&quot;스크린샷 2017-10-15 오후 4.09.35.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 300px; height: 274px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;d010의 dept_name이 Mobile App에서 Mobile Development로 변경된 것을 확인 할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 데이터를 지워보겠습니다.&lt;/p&gt;&lt;p&gt;제거 명령어는 DELETE이고 기본구조는 DELETE FROM 테이블명; 입니다.&lt;/p&gt;&lt;p&gt;저렇게하면 테이블의 모든 데이터가 다 지워지게 됩니다.&lt;/p&gt;&lt;p&gt;그래서 WHERE를 추가해 원하는 조건의 데이터만 지우게 해야 합니다.&lt;/p&gt;&lt;p&gt;그럼 아까 추가한 d010의 데이터를 지워보겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;DELETE FROM departments WHERE dept_no = 'd010';&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 20px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99656F3359E30BBF09&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99656F3359E30BBF09&quot; width=&quot;300&quot; height=&quot;20&quot; filename=&quot;스크린샷 2017-10-15 오후 4.17.45.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 300px; height: 20px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;데이터 삭제에 성공했습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;SELECT * FROM departments ORDER BY dept_no;로 확인해보겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 255px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E9053359E30BC011&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E9053359E30BC011&quot; width=&quot;300&quot; height=&quot;255&quot; filename=&quot;스크린샷 2017-10-15 오후 4.18.03.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 300px; height: 255px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;데이터가 지워진 것을 확인 할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 다음은 결합에 대해 알아보겠습니다.&lt;/p&gt;&lt;p&gt;결합은 두개이상의 테이블에서 값을 동시에 가져올 때 사용합니다.&lt;/p&gt;&lt;p&gt;그리고 결합에는 내부결합과 외부결합 2가지가 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;내부결합은 INNER JOIN 테이블명 ON 조건으로 가져옵니다.&lt;/p&gt;&lt;p&gt;예제는 dept_manager 테이블에 departments테이블의 dept_name을 붙여서 가져오는 것을 해보겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;SELECT dept_manager.*, departments.dept_name FROM dept_manager INNER JOIN departments ON dept_manager.dept_no = departments.dept_no;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 600px; width: 600px; height: 513px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99277B3359E3166A27&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99277B3359E3166A27&quot; width=&quot;600&quot; height=&quot;513&quot; filename=&quot;스크린샷 2017-10-15 오후 5.03.17.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 600px; height: 513px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;INNER JOIN은 FROM에 있는 테이블에 있고 ON뒤에 조건에 만족하는 값들만 가져오게 됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;OUTTER JOIN을 쓰게 되면 FROM에 있는 테이블은 모두 가져오고 OUTER JOIN에 있는 테이블의 값만 추출해서 넣게 됩니다.&lt;/p&gt;&lt;p&gt;기본 형태는 SELECT 열명 FROM 왼쪽테이블 LEFT OUTTER JOIN 오른쪽테이블 ON 조건; 입니다.&lt;/p&gt;&lt;p&gt;이렇게 하면 왼쪽 테이블에 있고 오른쪽 테이블에 없는 것들은 NULL로 들어가게 됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Development/Database</category>
      <author>sjjeong1225</author>
      <guid isPermaLink="true">https://googry.tistory.com/39</guid>
      <comments>https://googry.tistory.com/39#entry39comment</comments>
      <pubDate>Sun, 15 Oct 2017 15:43:08 +0900</pubDate>
    </item>
    <item>
      <title>(Swift) 스위프트 연산자(Operator) 기초</title>
      <link>https://googry.tistory.com/37</link>
      <description>&lt;p&gt;저번 포스팅에서 다뤘던 스위프트의 속성을 사용해서 다양한 연산자(Operator)를 처리하는 방법에 대해 설명하고자 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;연산자를 사용하면 값을 합치고, 변경하고, 검사 할 수 있습니다.&lt;/p&gt;&lt;p&gt;예를 들면 1 + 2처럼 +라는 연산자를 사용할 수 있고 &amp;amp;&amp;amp;를 사용해 Bool 값을 연산할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;연산자는 단항, 이항, 삼항으로 분류 할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;단항은 single target(-a), prefix operator(!b), postfix operator(c!)와 같은 것이 있습니다.&lt;/p&gt;&lt;p&gt;이항은 two targets(2 + 3)와&amp;nbsp;같은 것이 있습니다.&lt;/p&gt;&lt;p&gt;삼항은 three targets(a ? b : c)와 같은 것이 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;연산자에 영향을 주는 Value를 operand라고 부릅니다.&lt;/p&gt;&lt;p&gt;1 + 2에서 +는 binary operator이며 1과 2는 operand라고 말할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Assignment Operator&lt;/p&gt;&lt;p&gt;할당 연산자는 값을 초기화하거나 갱신하는 역할을 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; b = &lt;span class=&quot;s2&quot;&gt;10&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;var&lt;/span&gt; a = &lt;span class=&quot;s2&quot;&gt;5&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s3&quot;&gt;a&lt;/span&gt; = &lt;span class=&quot;s3&quot;&gt;b&lt;/span&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #272ad8}
span.s3 {color: #4f8187}
&lt;/style&gt;





&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;// a is now equal to 10&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Arithmetic Operators&lt;/p&gt;&lt;p&gt;스위프트는 4개의 Arithmetic Operator를 제공합니다.&lt;/p&gt;&lt;p&gt;- Addition +&lt;/p&gt;&lt;p&gt;- Subtraction -&lt;/p&gt;&lt;p&gt;- Multiplication *&lt;/p&gt;&lt;p&gt;- Division /&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; + &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/span&gt;// equals 3&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; - &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/span&gt;// equals 2&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; * &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/span&gt;// equals 6&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff}
span.s1 {color: #272ad8}
span.s2 {color: #000000}
&lt;/style&gt;





&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;10.0&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; / &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;2.5&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;nbsp; &lt;/span&gt;// equals 4.0&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그리고 Addition Operator는 String를 합칠때 사용 할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #000000}
span.s3 {color: #d12f1b}
&lt;/style&gt;


&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; helloworld = &lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&quot;hello, &quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; + &lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&quot;world&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;nbsp; &lt;/span&gt;// equals &quot;hello, world&quot;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Remainder Operator&lt;/p&gt;&lt;p&gt;나머지 연산자는 %를 사용하고 left value를 right value로 나누고 남은 나머지를 반환합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff}
span.s1 {color: #272ad8}
span.s2 {color: #000000}
&lt;/style&gt;


&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; % &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;// equals 1&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Compound Assignment Operator&lt;/p&gt;&lt;p&gt;합성 할당 연산자는 Assignment와 이항연산자를 합친 연산자입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;var&lt;/span&gt; a = &lt;span class=&quot;s2&quot;&gt;1&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s3&quot;&gt;a&lt;/span&gt; += &lt;span class=&quot;s2&quot;&gt;2&lt;/span&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #272ad8}
span.s3 {color: #4f8187}
&lt;/style&gt;




&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;// a is now equal to 3&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;a += 2는 실제로 a = a + 2로 볼 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Comparison Operators&lt;/p&gt;&lt;p&gt;비교 연산자는 6개가 있습니다.&lt;/p&gt;&lt;p&gt;- Equal to ==&lt;/p&gt;&lt;p&gt;- Not equal to !=&lt;/p&gt;&lt;p&gt;- Greater than &amp;gt;&lt;/p&gt;&lt;p&gt;- Less than &amp;lt;&lt;/p&gt;&lt;p&gt;- Greater than or equal to &amp;gt;=&lt;/p&gt;&lt;p&gt;- Less than or equal to &amp;lt;=&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; == &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;// true because 1 is equal to 1&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; != &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;// true because 2 is not equal to 1&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &amp;gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/span&gt;// true because 2 is greater than 1&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &amp;lt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/span&gt;// true because 1 is less than 2&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &amp;gt;= &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;// true because 1 is greater than or equal to 1&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff}
span.s1 {color: #272ad8}
span.s2 {color: #000000}
&lt;/style&gt;







&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &amp;lt;= &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;// false because 2 is not less than or equal to 1&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ternary Conditional Operator&lt;/p&gt;&lt;p&gt;삼항 연산자는 if..else와 비슷합니다.&lt;/p&gt;&lt;p&gt;form은 question ? answer1 : answer2 의 형태입니다.&lt;/p&gt;&lt;p&gt;question이 true이면 answer1을, false이면 answer2를 반환합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; contentHeight = &lt;span class=&quot;s2&quot;&gt;40&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; hasHeader = &lt;span class=&quot;s1&quot;&gt;true&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; rowHeight = &lt;span class=&quot;s3&quot;&gt;contentHeight&lt;/span&gt; + (&lt;span class=&quot;s3&quot;&gt;hasHeader&lt;/span&gt; ? &lt;span class=&quot;s2&quot;&gt;50&lt;/span&gt; : &lt;span class=&quot;s2&quot;&gt;20&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #272ad8}
span.s3 {color: #4f8187}
&lt;/style&gt;





&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;// rowHeight is equal to 90&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Nil-Coalescing Operator&lt;/p&gt;&lt;p&gt;nil 결합&amp;nbsp;연산자는 Optional value가 값을 가지고 있는지 확인해서 값을 리턴하는 연산자 입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {color: #4f8187}
&lt;/style&gt;


&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;a&lt;/span&gt; ?? &lt;span class=&quot;s1&quot;&gt;b&lt;/span&gt;&lt;/p&gt;&lt;p&gt;a가 nil이 아니면 a를, nil이면 b를 반환합니다.&lt;/p&gt;&lt;p&gt;이 코드는 아래와 같이 나타낼 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {color: #4f8187}
span.s2 {color: #ba2da2}
&lt;/style&gt;


&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;a&lt;/span&gt; != &lt;span class=&quot;s2&quot;&gt;nil&lt;/span&gt; ? &lt;span class=&quot;s1&quot;&gt;a&lt;/span&gt;! : &lt;span class=&quot;s1&quot;&gt;b&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Range Operators&lt;/p&gt;&lt;p&gt;범위 연산자는 3가지 종류가 있습니다.&lt;/p&gt;&lt;p&gt;- Closed Range Operator a...b&lt;/p&gt;&lt;p&gt;- Half-Open Range Operator a..&amp;lt;b&lt;/p&gt;&lt;p&gt;- One-Sided Ranges Operator a... / ...b&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Logical Operators&lt;/p&gt;&lt;p&gt;논리 연산자는 operand가 Boolean인 것들의 Operator입니다.&lt;/p&gt;&lt;p&gt;- Logical Not !a&lt;/p&gt;&lt;p&gt;- Logical And a &amp;amp;&amp;amp; b&lt;/p&gt;&lt;p&gt;- Logical OR a || b&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Language/Swift</category>
      <author>sjjeong1225</author>
      <guid isPermaLink="true">https://googry.tistory.com/37</guid>
      <comments>https://googry.tistory.com/37#entry37comment</comments>
      <pubDate>Mon, 9 Oct 2017 15:23:44 +0900</pubDate>
    </item>
    <item>
      <title>(Swift) 스위프트 속성(Property)기초</title>
      <link>https://googry.tistory.com/36</link>
      <description>&lt;p&gt;스위프트는 정수형 타입인 Int와 실수형 타입인 Double, Float와 참과 거짓을 나타내는 Bool과 문자열을 나타내는 String의 데이터 타입이 있고 Collection 타입인 Array, Set, Dictionary도 제공합니다. 또한 Objective-C에서 제공하던 Tuple도 제공합니다. 그리고 새로 추가된 Optional을 제공합니다. Optional타입은 nil값을 저장 할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;스위프트에서 데이터는 상수 또는 변수로 나타낼 수 있습니다. 상수는 let 키워드를 사용하고 변수는 var 키워드를 사용합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; maximumNumberOfLoginAttempts = &lt;span class=&quot;s2&quot;&gt;10&lt;/span&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #272ad8}
&lt;/style&gt;



&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;var&lt;/span&gt; currentLoginAttempt = &lt;span class=&quot;s2&quot;&gt;0&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 코드는 아래와 같이 해석 할 수 있습니다.&lt;/p&gt;&lt;p&gt;maximumNumberOfLoginAttempts 상수를 선언 했고 10으로 초기화 했다.&lt;/p&gt;&lt;p&gt;currentLoginAttempt 변수를 선언 했고 0으로 초기화 했다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그리고 한 줄에 여러개의 변수를 선언함과 동시에 초기화도 같이 할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #272ad8}
&lt;/style&gt;


&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;var&lt;/span&gt; x = &lt;span class=&quot;s2&quot;&gt;0.0&lt;/span&gt;, y = &lt;span class=&quot;s2&quot;&gt;0.0&lt;/span&gt;, z = &lt;span class=&quot;s2&quot;&gt;0.0&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;만약에 우리가 변수를 선언하고 값을 초기화 하지 않으면 어떤 일이 발생할까요?&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;&amp;nbsp;x&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px; width: 500px; height: 60px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A08D3359D98F9D13&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A08D3359D98F9D13&quot; width=&quot;500&quot; height=&quot;60&quot; filename=&quot;스크린샷 2017-10-08 오전 11.37.34.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 500px; height: 60px;&quot; original=&quot;yes&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;이렇게 type annotation이 빠졌다고 에러를 보여주게 됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그럼 Type Annotation이란 무엇일까요?&lt;/p&gt;&lt;p&gt;Type Annotation은 변수나 상수의 이름 뒤에 &quot;이것이 어떤 타입이다&quot;라고 명시적으로 알려주는 것입니다.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #703daa}
&lt;/style&gt;


&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;var&lt;/span&gt; welcomeMessage: &lt;span class=&quot;s2&quot;&gt;String&lt;/span&gt;&lt;/p&gt;&lt;p&gt;바로 이렇게 말이죠.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;여기서 :은 of type라는 의미를 가지고 있습니다. welcomeMessage는 String type의 var라는 거죠.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Integer(정수)는 소수점이 없는 숫자를 나타낼 수 있습니다.&lt;/p&gt;&lt;p&gt;기본적으로 Int는 32비트 플랫폼에서는 Int32처럼 동작하고 64비트 플랫폼에서는 Int64처럼 동작합니다.&lt;/p&gt;&lt;p&gt;UInt는 unsigned int로 0이상의 자연수를 나타낼 수 있습니다. 다른말로 음수값은 가질 수 없는 거죠.&lt;/p&gt;&lt;p&gt;UInt도 Int와 마찬가지로 32비트, 64비트 플랫폼에 따라 UInt32, UInt64로 동작합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;실수는 Double과 Float로 나타낼 수 있습니다.&lt;/p&gt;&lt;p&gt;Double은 64비트 범위를 나타낼 수 있고 Float는 32비트 범위를 나타낼 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;정수는 Literal을 이용하면 2진수, 8진수, 16진수로 나타낼 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; decimalInteger = &lt;span class=&quot;s2&quot;&gt;17&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; binaryInteger = &lt;span class=&quot;s2&quot;&gt;0b10001&lt;/span&gt; &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;// 17 in binary notation&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; octalInteger = &lt;span class=&quot;s2&quot;&gt;0o21&lt;/span&gt; &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;// 17 in octal notation&lt;/span&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #272ad8}
span.s3 {color: #008400}
span.s4 {color: #000000}
&lt;/style&gt;





&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt; hexadecimalInteger = &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;0x11&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt; &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/span&gt;// 17 in hexadecimal notation&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;실수도 Literal을 이용해서 만들 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; literalDecimal1 = &lt;span class=&quot;s2&quot;&gt;1.25e2&lt;/span&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;// 125&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; literalDecimal2 = &lt;span class=&quot;s2&quot;&gt;1.25e-2&lt;/span&gt; &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;// 0.0125&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; literalDecimal3 = &lt;span class=&quot;s2&quot;&gt;0xfp0&lt;/span&gt; &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;// 15&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; literalDecimal4 = &lt;span class=&quot;s2&quot;&gt;0xfp2&lt;/span&gt; &lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;// 60&lt;/span&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #272ad8}
span.s3 {color: #008400}
&lt;/style&gt;






&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; literalDecimal5 = &lt;span class=&quot;s2&quot;&gt;0xfp-2&lt;/span&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;// 3.75&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;e는 10^이고 p는 2^ 입니다.&lt;/p&gt;&lt;p&gt;1번은 1.25 * 10^2&lt;/p&gt;&lt;p&gt;2번은 1.25 * 10^-2&lt;/p&gt;&lt;p&gt;3번은 15&amp;nbsp;* 2^0&lt;/p&gt;&lt;p&gt;4번은 15 * 2^2&lt;/p&gt;&lt;p&gt;5번은 15 * 2^-2&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;튜플은 여러개의 값을 그룹화 시킬 수 있습니다.&lt;/p&gt;&lt;p&gt;예를 들어서 HTTP status code인&amp;nbsp;404는 &quot;Not Found&quot; 입니다.&lt;/p&gt;&lt;p&gt;이것은 (404, &quot;Not Found&quot;)라고 튜플형태로 만들 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #272ad8}
span.s3 {color: #d12f1b}
&lt;/style&gt;


&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; http404Error = (&lt;span class=&quot;s2&quot;&gt;404&lt;/span&gt;, &lt;span class=&quot;s3&quot;&gt;&quot;Not Found&quot;&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이것을 사용하기 위해서는&lt;/p&gt;&lt;p&gt;1.&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; (statusCode, statusMessage) = &lt;span class=&quot;s2&quot;&gt;http404Error&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s3&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;(&lt;/span&gt;&quot;The status code is &lt;span class=&quot;s4&quot;&gt;\&lt;/span&gt;(&lt;span class=&quot;s2&quot;&gt;statusCode&lt;/span&gt;)&quot;&lt;span class=&quot;s4&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p3&quot;&gt;// Prints &quot;The status code is 404&quot;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s3&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;(&lt;/span&gt;&quot;The status message is &lt;span class=&quot;s4&quot;&gt;\&lt;/span&gt;(&lt;span class=&quot;s2&quot;&gt;statusMessage&lt;/span&gt;)&quot;&lt;span class=&quot;s4&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b; background-color: #ffffff}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #4f8187}
span.s3 {color: #3e1e81}
span.s4 {color: #000000}
&lt;/style&gt;






&lt;/p&gt;&lt;p class=&quot;p3&quot;&gt;// Prints &quot;The status message is Not Found&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2.&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; (justTheStatusCode, &lt;span class=&quot;s1&quot;&gt;_&lt;/span&gt;) = &lt;span class=&quot;s2&quot;&gt;http404Error&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s3&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;(&lt;/span&gt;&quot;The status code is &lt;span class=&quot;s4&quot;&gt;\&lt;/span&gt;(&lt;span class=&quot;s2&quot;&gt;justTheStatusCode&lt;/span&gt;)&quot;&lt;span class=&quot;s4&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b; background-color: #ffffff}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #4f8187}
span.s3 {color: #3e1e81}
span.s4 {color: #000000}
&lt;/style&gt;




&lt;/p&gt;&lt;p class=&quot;p3&quot;&gt;// Prints &quot;The status code is 404&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3.&amp;nbsp;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&quot;The status code is &lt;span class=&quot;s2&quot;&gt;\&lt;/span&gt;(&lt;span class=&quot;s3&quot;&gt;http404Error&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;0&lt;/span&gt;)&quot;&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;// Prints &quot;The status code is 404&quot;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&quot;The status message is &lt;span class=&quot;s2&quot;&gt;\&lt;/span&gt;(&lt;span class=&quot;s3&quot;&gt;http404Error&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;1&lt;/span&gt;)&quot;&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff}
span.s1 {color: #3e1e81}
span.s2 {color: #000000}
span.s3 {color: #4f8187}
span.s4 {color: #272ad8}
&lt;/style&gt;





&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;// Prints &quot;The status message is Not Found&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4.&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;let&lt;/span&gt; http200Status = (statusCode: &lt;span class=&quot;s2&quot;&gt;200&lt;/span&gt;, description: &lt;span class=&quot;s3&quot;&gt;&quot;OK&quot;&lt;/span&gt;)&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s4&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;s5&quot;&gt;(&lt;/span&gt;&quot;The status code is &lt;span class=&quot;s5&quot;&gt;\&lt;/span&gt;(&lt;span class=&quot;s6&quot;&gt;http200Status&lt;/span&gt;&lt;span class=&quot;s5&quot;&gt;.statusCode&lt;/span&gt;)&quot;&lt;span class=&quot;s5&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p3&quot;&gt;// Prints &quot;The status code is 200&quot;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s4&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;s5&quot;&gt;(&lt;/span&gt;&quot;The status message is &lt;span class=&quot;s5&quot;&gt;\&lt;/span&gt;(&lt;span class=&quot;s6&quot;&gt;http200Status&lt;/span&gt;&lt;span class=&quot;s5&quot;&gt;.description&lt;/span&gt;)&quot;&lt;span class=&quot;s5&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b; background-color: #ffffff}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #272ad8}
span.s3 {color: #d12f1b}
span.s4 {color: #3e1e81}
span.s5 {color: #000000}
span.s6 {color: #4f8187}
&lt;/style&gt;






&lt;/p&gt;&lt;p class=&quot;p3&quot;&gt;// Prints &quot;The status message is OK&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이런식으로 사용 할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;튜플을 사용하게 되면 함수에서 여러개의 값을 한번에 리턴 시킬 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Optional은 C나 Objective-C에서는 없던 개념입니다.&lt;/p&gt;&lt;p&gt;이것은 값의 부재를 나타냅니다. 다른 말로 값이 있던지, 값이 없던지 입니다.&lt;/p&gt;&lt;p&gt;값이 있는 것은 정수형에서는 0이나 19로 나타내는 것이고 값이 없다는 것은 nil로 값을 설정해주는 것입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;var&lt;/span&gt; serverResponseCode: &lt;span class=&quot;s2&quot;&gt;Int&lt;/span&gt;? = &lt;span class=&quot;s3&quot;&gt;404&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;// serverResponseCode contains an actual Int value of 404&lt;/p&gt;&lt;p class=&quot;p3&quot;&gt;serverResponseCode&lt;span class=&quot;s4&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;nil&lt;/span&gt;&lt;/p&gt;&lt;p&gt;




&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; background-color: #ffffff}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #4f8187; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #703daa}
span.s3 {color: #272ad8}
span.s4 {color: #000000}
&lt;/style&gt;





&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;// serverResponseCode now contains no value&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Optional은 타입뒤에 ?를 붙여줍니다.&lt;/p&gt;&lt;p&gt;serverResponseCode는 Optional Int타입이며 404 값으로 초기화 되었습니다.&lt;/p&gt;&lt;p&gt;그 다음에 nil로 값을 비워줬습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;nil은 Optional 타입이 아닌 변수에 설정 할 수 없습니다.&lt;/p&gt;&lt;p&gt;Optional 타입의 변수에 값을 초기화 해주지 않으면 스위프트는 자동으로 nil값으로 초기화 해줍니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Language/Swift</category>
      <author>sjjeong1225</author>
      <guid isPermaLink="true">https://googry.tistory.com/36</guid>
      <comments>https://googry.tistory.com/36#entry36comment</comments>
      <pubDate>Sun, 8 Oct 2017 17:22:45 +0900</pubDate>
    </item>
    <item>
      <title>(Swift) 스위프트 맛보기</title>
      <link>https://googry.tistory.com/35</link>
      <description>&lt;p&gt;예전에 Objective-C언어를 사용해서 iOS, MacOS위에서 동작하는 앱을 개발했습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그리고 2014년 6월 2일 WWDC를 통해 스위프트가 소개되었고 그 이후로 스위프트를 통해 많은 앱들이 개발 되었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;스위프트를 사용해 개발하기&amp;nbsp;위해서는 MacOS기반 개발환경이 필요하고 XCode가 설치되어있어야 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그리고 playground에서 스위프트를 사용해서 코드를 작성하면 결과를 즉시 확인 할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9974213359D8C17701&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9974213359D8C17701&quot; width=&quot;820&quot; height=&quot;551&quot; filename=&quot;스크린샷 2017-10-07 오후 8.58.02.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 말이죠.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;앞으로의 포스팅에서는 스위프트언어에&amp;nbsp;대해서 알아보고 아이폰 개발에 대해 알아보겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;제가 참고하는 자료는&amp;nbsp;&lt;span style=&quot;color: rgb(71, 71, 71); font-family: &amp;quot;Lucida Grande&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;, Arial, Verdana, sans-serif; font-size: 22px; font-weight: bold;&quot;&gt;&lt;a href=&quot;https://itunes.apple.com/kr/book/the-swift-programming-language-swift-4/id881256329?mt=11&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;The Swift Programming Language (Swift 4)&lt;/a&gt;&amp;nbsp;&lt;/span&gt;입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Language/Swift</category>
      <author>sjjeong1225</author>
      <guid isPermaLink="true">https://googry.tistory.com/35</guid>
      <comments>https://googry.tistory.com/35#entry35comment</comments>
      <pubDate>Sat, 7 Oct 2017 21:06:30 +0900</pubDate>
    </item>
    <item>
      <title>(Kotlin) Break, Continue</title>
      <link>https://googry.tistory.com/34</link>
      <description>&lt;p&gt;이전 글에서 흐름제어에 대해 알아보았습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이번에는 흐름제어에서 반복문을&amp;nbsp;좀 더 유연하게 사용할 수 있게 하는 break와 continue에 대해 알아보겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;먼저 간단하게 개념에 대해 이야기하겠습니다.&lt;/p&gt;&lt;p&gt;break는 멈춘다는 의미로 가장 가까이에 있는 반복문을 멈추고 밖으로 나가는 명령어입니다.&lt;/p&gt;&lt;p&gt;continue는 계속한다는 의미로 반복문의 한 사이클을 중간에 멈추고 다음 사이클을 실행하라는 명령어입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;간단한 예로 시작 하겠습니다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;for &lt;/span&gt;(i &lt;span style=&quot;color:#cc7832;&quot;&gt;in &lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;1&lt;/span&gt;..&lt;span style=&quot;color:#6897bb;&quot;&gt;3&lt;/span&gt;) {&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;for &lt;/span&gt;(j &lt;span style=&quot;color:#cc7832;&quot;&gt;in &lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;1&lt;/span&gt;..&lt;span style=&quot;color:#6897bb;&quot;&gt;3&lt;/span&gt;) {&lt;br /&gt;        &lt;span style=&quot;font-style:italic;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;i&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;j&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;i * j&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;&lt;/span&gt;)&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 158px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99708A3359D6684605&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99708A3359D6684605&quot; width=&quot;158&quot; height=&quot;284&quot; filename=&quot;스크린샷 2017-10-06 오전 2.13.04.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;i가 1부터 3까지 반복하면서&lt;/p&gt;&lt;p&gt;j가 1부터 3까지 반복하면서&lt;/p&gt;&lt;p&gt;${i} * ${j} = ${i * j}를 출력하는 코드입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그러면 중간에 변화를 주겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;for &lt;/span&gt;(i &lt;span style=&quot;color:#cc7832;&quot;&gt;in &lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;1&lt;/span&gt;..&lt;span style=&quot;color:#6897bb;&quot;&gt;3&lt;/span&gt;) {&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;for &lt;/span&gt;(j &lt;span style=&quot;color:#cc7832;&quot;&gt;in &lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;1&lt;/span&gt;..&lt;span style=&quot;color:#6897bb;&quot;&gt;3&lt;/span&gt;) {&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;if &lt;/span&gt;(i * j == &lt;span style=&quot;color:#6897bb;&quot;&gt;6&lt;/span&gt;) {&lt;br /&gt;            &lt;span style=&quot;color:#cc7832;&quot;&gt;break&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;        &lt;/span&gt;}&lt;br /&gt;        &lt;span style=&quot;font-style:italic;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;i&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;j&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;i * j&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;&lt;/span&gt;)&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 150px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D7B93359D669950A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D7B93359D669950A&quot; width=&quot;150&quot; height=&quot;192&quot; filename=&quot;스크린샷 2017-10-06 오전 2.18.58.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2 * 3 = 6&lt;/p&gt;&lt;p&gt;3 * 2 = 6&lt;/p&gt;&lt;p&gt;3 * 3 = 9&lt;/p&gt;&lt;p&gt;이렇게 3개의 결과가 출력되지 않는 것을 확인 할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그 이유는 i * j가 6이 되는 시점에 j가 속해있는 for문을 break로 인해 멈추기 밖으로 나가기 때문입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;for &lt;/span&gt;(i &lt;span style=&quot;color:#cc7832;&quot;&gt;in &lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;1&lt;/span&gt;..&lt;span style=&quot;color:#6897bb;&quot;&gt;3&lt;/span&gt;) {&lt;br /&gt;    &lt;span style=&quot;color:#cc7832;&quot;&gt;for &lt;/span&gt;(j &lt;span style=&quot;color:#cc7832;&quot;&gt;in &lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;1&lt;/span&gt;..&lt;span style=&quot;color:#6897bb;&quot;&gt;3&lt;/span&gt;) {&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;if &lt;/span&gt;(i * j == &lt;span style=&quot;color:#6897bb;&quot;&gt;6&lt;/span&gt;) {&lt;br /&gt;            &lt;span style=&quot;color:#cc7832;&quot;&gt;continue&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;        &lt;/span&gt;}&lt;br /&gt;        &lt;span style=&quot;font-style:italic;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;i&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;j&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;i * j&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;&lt;/span&gt;)&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 150px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C3D13359D66A711B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C3D13359D66A711B&quot; width=&quot;150&quot; height=&quot;224&quot; filename=&quot;스크린샷 2017-10-06 오전 2.22.42.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이번에는 break와는 다르게&lt;/p&gt;&lt;p&gt;3 * 3 = 9&lt;/p&gt;&lt;p&gt;가 출력이 되었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그 이유는 continue는 반복문 자체를 멈추는 것이 아니라 현재 반복문의 한 사이클을 멈추고 다음 사이클을 실행하기 때문입니다.&lt;/p&gt;&lt;p&gt;그래서 i * j의 값이 6이 되는 부분만 출력하지 않고 나머지 반복문을 계속 진행하는 것입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다음은&amp;nbsp;java에는 없고 c를 배울 때 사용 했던 goto문과 비슷한 것에 대해 알아보겠습니다.&lt;/p&gt;&lt;p&gt;바로 break와 continue에 label를 붙이는 것입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#467cda;&quot;&gt;loop1@ &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;for &lt;/span&gt;(i &lt;span style=&quot;color:#cc7832;&quot;&gt;in &lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;1&lt;/span&gt;..&lt;span style=&quot;color:#6897bb;&quot;&gt;3&lt;/span&gt;) {&lt;br /&gt;    &lt;span style=&quot;color:#467cda;&quot;&gt;loop2@ &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;for &lt;/span&gt;(j &lt;span style=&quot;color:#cc7832;&quot;&gt;in &lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;1&lt;/span&gt;..&lt;span style=&quot;color:#6897bb;&quot;&gt;3&lt;/span&gt;) {&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;if &lt;/span&gt;(i * j == &lt;span style=&quot;color:#6897bb;&quot;&gt;6&lt;/span&gt;) {&lt;br /&gt;            &lt;span style=&quot;color:#cc7832;&quot;&gt;continue&lt;/span&gt;&lt;span style=&quot;color:#467cda;&quot;&gt;@loop1&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#467cda;&quot;&gt;        &lt;/span&gt;}&lt;br /&gt;        &lt;span style=&quot;font-style:italic;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;i&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;j&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;i * j&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;&lt;/span&gt;)&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 152px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D31A3359D66C5A01&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D31A3359D66C5A01&quot; width=&quot;152&quot; height=&quot;198&quot; filename=&quot;스크린샷 2017-10-06 오전 2.29.53.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;for앞에 loop1@라는 라벨이 생겼습니다.&lt;/p&gt;&lt;p&gt;continue뒤에 @loop1라는 라벨이 생겼습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;결과값은 break문과 동일합니다.&lt;/p&gt;&lt;p&gt;그 이유는 i가 속해있는 for문에 loop1라는 라벨을 넣어주고 continue에서 loop1 라벨을 붙여주었고 그로 인해&amp;nbsp;loop1으로 점프한 효과를 볼 수 있기 때문입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:9.0pt;&quot;&gt;&lt;span style=&quot;color:#467cda;&quot;&gt;loop1@ &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;for &lt;/span&gt;(i &lt;span style=&quot;color:#cc7832;&quot;&gt;in &lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;1&lt;/span&gt;..&lt;span style=&quot;color:#6897bb;&quot;&gt;3&lt;/span&gt;) {&lt;br /&gt;    &lt;span style=&quot;color:#467cda;&quot;&gt;loop2@ &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;for &lt;/span&gt;(j &lt;span style=&quot;color:#cc7832;&quot;&gt;in &lt;/span&gt;&lt;span style=&quot;color:#6897bb;&quot;&gt;1&lt;/span&gt;..&lt;span style=&quot;color:#6897bb;&quot;&gt;3&lt;/span&gt;) {&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;if &lt;/span&gt;(i * j == &lt;span style=&quot;color:#6897bb;&quot;&gt;6&lt;/span&gt;) {&lt;br /&gt;            &lt;span style=&quot;color:#cc7832;&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color:#467cda;&quot;&gt;@loop1&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#467cda;&quot;&gt;        &lt;/span&gt;}&lt;br /&gt;        &lt;span style=&quot;font-style:italic;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;i&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;j&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;${&lt;/span&gt;i * j&lt;span style=&quot;color:#cc7832;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;&lt;/span&gt;)&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 150px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9924983359D66E8905&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9924983359D66E8905&quot; width=&quot;150&quot; height=&quot;162&quot; filename=&quot;스크린샷 2017-10-06 오전 2.40.08.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제는 continue대신 break에 라벨을 붙여봤습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제는 i * j가 6일 때 loop1라벨이 붙은 반복문을 break해버립니다.&lt;/p&gt;&lt;p&gt;그래서 결과가 2 * 3 = 6일 때 i가 속해있는 반복문이 멈추게 됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 라벨을 사용하게 되면 이중포문 혹은 삼중포문에서 탈출을 한번에 할 수 있는 효과를 볼 수 있습니다.&lt;/p&gt;</description>
      <category>Language/Kotlin</category>
      <author>sjjeong1225</author>
      <guid isPermaLink="true">https://googry.tistory.com/34</guid>
      <comments>https://googry.tistory.com/34#entry34comment</comments>
      <pubDate>Fri, 6 Oct 2017 02:42:21 +0900</pubDate>
    </item>
    <item>
      <title>(DB) 테이블 설계의 기초와 정규형</title>
      <link>https://googry.tistory.com/33</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;테이블 설계의 기초&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;테이블은 관계형 데이터베이스에서 데이터를 저장하기 위한 저장소 입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;테이블을 어떻게 설계 하는지에 따라 성능&amp;nbsp;차이가 있고 나중에 머리가 아파지는&amp;nbsp;일이 줄어들게 됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;여기서 말하는 테이블은 2차원 표와 같이 행과 열이 있는 형태입니다. 하지만 단순히 행과 열을 가지고 데이터가 들어가는 것은 아니고 어떠한 규칙이나 공통적인 요소를 모은 집합이라고 생각해야 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;테이블 예 &lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:Gungsuh, 궁서, serif;font-size:12px&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;과목번호&lt;/u&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt; 과목명&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;강사명&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;CSE001&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;데이터베이스&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;에덴&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;CSE002&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;운영체제 &amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;휴&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;CSE003&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;네트워크&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;아담&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 테이블은 컴퓨터 사이언스 과목을 공통적인 요소로 보고 만든 테이블입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;'과목번호', '과목명', '강사명'은 테이블의 속성이라고 불리며 테이블에 어떤 값들이 저장되어야 하는지 나타냅니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그리고 '과목번호'는 테이블의 기본기(Primary key)라고 볼 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;기본키는 테이블 설계 원칙 중에 하나인 '반드시 기본키를 설정'를 나타내기 위해 필요한 것입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;기본키를 사용하게 되면 데이터의 중복을 방지할 수 있고 유일성을 나타낼 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;또한 유일성을 가지고 있기 때문에 다른 테이블에서 데이터를 찾을 때 사용되기도 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그러므로 이 기본키 값이 중복이 되면 안됩니다. 만약 중복이 된다면 위에서 말한 내용들이 다 쓸모가 없어질 것입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;기본키는 값이 변동되면 안되는데 그 이유는 값의 유일성을 증명하지 못하고 과거의 데이터와 매칭을 할 수 없기 때문입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;또한 기본키는 NULL값이 들어 갈 수 없습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;정규형&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;정규형은 테이블을 어떤 기준으로 나눠서 데이터를 관리하게 만들지 기준이 되는 개념입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;정규형은 제1정규형부터 제5정규형까지 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하지만 제3정규형까지 적용하더라도 어느정도 사용을 할 수 있을 정도의 수준이 됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;제1정규형&lt;/span&gt;은 '테이블 셀에 여러개의 데이터를 말자' 입니다.&lt;/p&gt;&lt;p&gt;다르게 말하면 '모든 속성은 원자값을 가져야 한다' 입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border: none; border-collapse: collapse; font-size: 12px;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 261px; height: 24px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;과목번호&lt;/u&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 261px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;과목명&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 261px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;강사명&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 261px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;CSE001&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 261px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;데이터베이스&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 261px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;에덴&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 261px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;CSE002&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 261px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;운영체제&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 261px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;휴&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 261px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;CSE003&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 261px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;네트워크&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 261px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;아담, 휴&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 네트워크 과목이 아담과 휴 강사가 강의를 한다고 나타낼 수도 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하지만 이렇게 하는 것은 관리하기도 어렵고 추천하고 싶은 방법은 아닙니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;과목 테이블&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:Gungsuh, 궁서, serif;font-size:12px&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 391px; height: 24px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;과목번호&lt;/u&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:392;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;과목명&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 391px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;CSE001&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:392;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;데이터베이스&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 391px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;CSE002&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:392;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;운영체제&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 391px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;CSE003&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:392;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;네트워크&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;과목 강사 테이블&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:Gungsuh, 궁서, serif;font-size:12px&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&lt;u&gt;&lt;/u&gt;&amp;nbsp;&lt;u&gt;과목번호&lt;/u&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;과목반&lt;/u&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;강사면&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;CSE001&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;A&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;에덴&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;CSE002&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;A&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;휴&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;CSE003&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;A&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;아담&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;CSE003&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;B&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;휴&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 만들게 되면 한 셀에 여러개의 값이 들어가지 않아서 제1정규형을 지킬 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;제2정규형&lt;/span&gt;은 '종속성을 띄고 있는 데이터를 분리하자' 입니다.&lt;/p&gt;&lt;p&gt;다르게 말하면 '키를 제외한 나머지 속성들은 키에만 종속되어야 한다' 입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;수강신청 테이블&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:Gungsuh, 궁서, serif;font-size:12px&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;학번&lt;/u&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;과목번호&lt;/u&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;신청일&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;학생명&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017012987&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;CSE001&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017/09/28&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;배수지&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;컴퓨터공학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017012987&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;CSE003&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017/09/30&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;배수지&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;컴퓨터공학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017023112&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;MSE005&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017/09/30&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;김우빈&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;시각디자인학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017023114&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;MSE005&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017/09/30&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;김고은&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;시각디자인학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017012987&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;MSE005&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017/10/02&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;배수지&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:156;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;컴퓨터공학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 경우는 여러개의 속성을 기본키로 만든 경우입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;각 데이터들은 각 셀에 데이터가 하나씩 들어가 있기 때문에 제1정규형은 지켜지고 있지만 제2정규형을 지켰다고 볼 수 없습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;데이터를 잘 보면 '학번', '학생명', '학과'가 서로 종속성을 보여주고 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 종속성을 보여주는 형태가 있으면 제2정규형이라고 말할 수 없습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그럼 종속성이 있는 부분만 따로 빼서 테이블을 만들면 제2정규형을 지킬 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;수강신청 테이블&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:Gungsuh, 궁서, serif;font-size:12px&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;학번&lt;/u&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;과목번호&lt;/u&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;신청일&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017012987&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;CSE001&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017/09/28&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017012987&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;CSE003&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017/09/30&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017023112&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;MSE005&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017/09/30&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017023114&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;MSE005&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017/09/30&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017012987&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;MSE005&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017/10/02&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;학생 테이블&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:Gungsuh, 궁서, serif;font-size:12px&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;학번&lt;/u&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;학생명&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017012987&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;배수지&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;컴퓨터공학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017023112&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;김우빈&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;시각디자인학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017023114&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;김고은&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;시각디자인학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 구성 했을 때 제2정규형을 지켰다고 말할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그리고 데이터를 수정 했을 경우 한개의 테이블로 관리했을 때&amp;nbsp;수정해야 할 셀이 많지만 두개의 테이블로 관리 한다면 수정해야 할 셀이 적어지게 되고 관리가 편리해 집니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;제3정규형&lt;/span&gt;은 '테이블 안에 두번&amp;nbsp;이상 연결 된&amp;nbsp;종속을 가지지 말자' 입니다.&lt;/p&gt;&lt;p&gt;다른 말로 '이행 종속이 있으면 안된다' 입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;학생 테이블&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:Gungsuh, 궁서, serif;font-size:12px&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;학번&lt;/u&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;학생명&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;교수코드&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;교수명&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017012987&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;배수지&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;컴퓨터공학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;PROF001&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;김로빈&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017023112&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;김우빈&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;시각디자인학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;PROF002&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;소우진&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017023114&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;김고은&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;시각디자인학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;PROF002&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;소우진&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;학생 테이블에 교수코드와 교수명이 추가가 되었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이럴 경우 '학번'이 '교수코드'와 종속관계이고 '교수코드'와 '교수명'이 종속관계이므로 한 테이블에 연결된 종속관계가 존재하게 됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이럴 경우는 제3 정규형을 지키지 못하는 형태 입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;학생 테이블&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:Gungsuh, 궁서, serif;font-size:12px&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;학번&lt;/u&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;학생명&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;교수코드(FK)&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017012987&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;배수지&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;컴퓨터공학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;PROF001&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017023112&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;김우빈&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;시각디자인학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;PROF002&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;2017023114&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;김고은&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;시각디자인학과&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:261;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;PROF002&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;교수 테이블&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:Gungsuh, 궁서, serif;font-size:12px&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:392;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;교수코드&lt;/u&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:392;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;교수명&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:392;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;PROF001&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:392;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;김로빈&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:392;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;PROF002&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:392;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;소우진&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 두개로 나눌 경우 한 테이블에 연결된 종속관계를 끊을 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 때 제3정규형을 지켰다고 말 할 수 있습니다.&lt;/p&gt;</description>
      <category>Development/Database</category>
      <author>sjjeong1225</author>
      <guid isPermaLink="true">https://googry.tistory.com/33</guid>
      <comments>https://googry.tistory.com/33#entry33comment</comments>
      <pubDate>Wed, 27 Sep 2017 18:24:02 +0900</pubDate>
    </item>
  </channel>
</rss>