{"id":989,"date":"2019-01-08T14:41:42","date_gmt":"2019-01-08T05:41:42","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=989"},"modified":"2019-01-08T14:41:42","modified_gmt":"2019-01-08T05:41:42","slug":"list%ec%99%80-livedata%ec%9d%98-%ec%82%ac%ec%9a%a9%ec%8b%9c-observer-%ec%97%90%ea%b2%8c-notify-%ec%96%b8%ec%a0%9c-%ec%96%b4%eb%96%bb%ea%b2%8c-%ed%95%b4%ec%95%bc%ed%95%a0%ea%b9%8c","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=989","title":{"rendered":"List\uc640 LiveData\uc758 \uc0ac\uc6a9\uc2dc Observer \uc5d0\uac8c Notify \uc5b8\uc81c, \uc5b4\ub5bb\uac8c \ud574\uc57c\ud560\uae4c&#8230;?"},"content":{"rendered":"<p>AAC LiveData\uc758 \ub4f1\uc7a5\uc73c\ub85c \ub370\uc774\ud130\ubc14\uc778\ub529 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc0ac\uc6a9\uc2dc MVVM\uc544\ud0a4\ud14d\ucc98\uc640 \ub9de\ubb3c\ub824 \ub370\uc774\ud130\uc640 UI\uac04\uc758 \ub3d9\uae30\ud654\ud558\ub294 \ucf54\ub4dc\ub97c \ub9ce\uc774 \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/01\/mvvm.png\" alt=\"\" width=\"800\" height=\"400\" class=\"aligncenter size-full wp-image-990\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/01\/mvvm.png 800w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/01\/mvvm-300x150.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/01\/mvvm-768x384.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p>\ub2e8\uc218\uc758 Data\ub97c \ub2e4\ub8e8\ub294\ub370 \uc788\uc5b4\uc11c LiveData\ub294 \ud3b8\ub9ac\ud588\uc2b5\ub2c8\ub2e4.<br \/>\n\uae30\uc874 BaseObservable\uc744 \uad6c\ud604\ud55c \ud074\ub798\uc2a4\uc5d0\uc11c notifyChange \ub610\ub294 notifyPropertyChange\ub97c \ucc98\ub9ac\ud560 \ud544\uc694\ub3c4\uc5c6\uace0,<br \/>\n\uc0dd\uba85\uc8fc\uae30\ub97c \uc54c\uace0\uc788\ub2e4\ub294 \uc810\uc774 \uc88b\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ud558\uc9c0\ub9cc,<\/p>\n<p>\ubcf5\uc218\uc758 Data\uc778 List \ub610\ub294 ArrayList \ud0c0\uc785\uc744 LiveData\ub85c \uac10\uc2f8\uc11c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\uac00 \uc655\uc655 \uc0dd\uae30\uace4 \ud558\ub294\ub370\uc694.<br \/>\n\uc774 \uacbd\uc6b0\uc5d0 List\uc758 Element\ub97c \ucd94\uac00\ud558\uac70\ub098 \uc81c\uac70 \ud560 \ub54c \ub9e4\uc6b0 \uadc0\ucc2e\uc740 \uc77c\uc774 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc608\ub97c \ub4e4\uba74 \uc774\ub7f0\uacbd\uc6b0 \uc785\ub2c8\ub2e4. \uae30\uc874\uc5d0 A,B,C \ub77c\ub294 \uc544\uc774\ud15c\uc774 \uc774\ubbf8 \uc788\uace0,\u00a0<\/p>\n<pre class=\"lang:java decode:true\">MutableLiveData&lt;ArrayList&lt;String&gt;&gt; liveItems = new MutableLiveData&lt;&gt;();\r\nArrayList&lt;String&gt; items = new ArrayList&lt;&gt;();\r\nitems.add(\"A\");\r\nitems.add(\"B\");\r\nitems.add(\"C\");\r\nliveItems.setValue(items);<\/pre>\n<p>\uc5ec\uae30\uc5d0\uc11c \ud558\ub098\uc758 \uc544\uc774\ud15c\uc744 \ucd94\uac00\ud558\uac70\ub098 \uc9c0\uc6b0\uace0 \uc2f6\uc744 \ub54c\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">ArrayList&lt;String&gt; tempItems = liveItems.getValue();\r\ntempItems.remove(\"B\");\r\nliveItems.setValue(tempItems);<\/pre>\n<p>\ub2e8\uc9c0 ArrayList\uc600\ub2e4\uba74 add() \ub610\ub294 remove() \ud638\ucd9c\ub4a4\uc5d0 \ubcc4\ub3c4\uc758 \uc791\uc5c5\uc744 \ud560 \ud544\uc694\ub294 \uc5c6\uc9c0\ub9cc DataBinding\uacfc LiveData\ub97c \uc4f0\ub294 \uacbd\uc6b0 UI\ub3d9\uae30\ud654\ub97c \ud558\uae30 \uc704\ud574 \uc635\uc800\ubc84\uc5d0\uac8c notify\ub97c \ud558\uace0 \uc2f6\uc744 \ub54c\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 LiveData\uc0ac\uc6a9\uc2dc \ub2e4\uc2dc setValue \ub610\ub294 postValue \ud638\ucd9c\uc744 \ud1b5\ud574 \uc635\uc800\ubc84\uc5d0\uac8c \ud1b5\uc9c0\ub97c \ud558\uac8c \ub418\ub294\ub370\uc694.\u00a0<\/p>\n<p>\uc774 \uc791\uc5c5\uc774 \ub9e4\uc6b0 \uadc0\ucc2e\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub798\uc11c \ub450\uac00\uc9c0 \ubc29\ubc95\uc744 \uc0dd\uac01\ud574 \ubcf4\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<h4>LiveData\uc640 List \ub530\ub85c \uad00\ub9ac\ud558\uae30<\/h4>\n<p>add\ub098 remove\ud638\ucd9c \ub4f1\uc740 List\uc5d0\uc11c\ub9cc \ucc98\ub9ac\ud558\uace0 \ucc98\ub9ac\ud55c \ucd5c\uc885\uacb0\uacfc\ub9cc\uc744 LiveData\uc5d0 \ub123\uc5b4\uc8fc\ub294\uac81\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \">MutableLiveData&lt;ArrayList&lt;String&gt;&gt; liveItems = new MutableLiveData&lt;&gt;();\r\nArrayList&lt;String&gt; items = new ArrayList&lt;&gt;();\r\n\r\nvoid add(String item){\r\n    items.add(item);\r\n    liveItems.setValue(items);\r\n}\r\n\r\nvoid remove(String item){\r\n    items.remove(item);\r\n    liveItems.setValue(items);\r\n}<\/pre>\n<p>\uc774 \ucf54\ub4dc\uc5d0\uc11c \uc911\uc810\uc801\uc778 \uc0ac\ud56d\uc740 LiveData\ub85c\ubd80\ud130 getValue()\ub97c \ud638\ucd9c\ud558\uc9c0 \uc54a\ub294 \ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \uadf8\ub0e5 \uc0c8\ub85c\uc6b4 \uacb0\uacfc\ub97c \ub36e\uc5b4\uc50c\uc6cc\uc904 \ubfd0\uc774\uc8e0.<\/p>\n<h4>Custom LiveData \ub9cc\ub4e4\uae30<\/h4>\n<p>\uccab\ubc88\uc9f8 \ubc29\ubc95\ub3c4 \uc88b\uc9c0\ub9cc \uc5b4\uca0c\ub4e0 setValue\ub97c \ub9e4\ubc88 \ud638\ucd9c\ud574\uc8fc\uc5b4\uc57c\ud558\ub294 \ubd80\ub2f4\uac10\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c \uc804 Custom Class\ub97c \ub9cc\ub4e4\uae30\ub85c \ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \">public class ListLiveData&lt;T&gt; extends MutableLiveData&lt;ArrayList&lt;T&gt;&gt; {\r\n\r\n    public ListLiveData(){\r\n        setValue(new ArrayList&lt;&gt;());\r\n    }\r\n\r\n    public void add(T item){\r\n        ArrayList&lt;T&gt; items = getValue();\r\n        items.add(item);\r\n        setValue(items);\r\n    }\r\n\r\n    public void addAll(List&lt;T&gt; list){\r\n        ArrayList&lt;T&gt; items = getValue();\r\n        items.addAll(list);\r\n        setValue(items);\r\n    }\r\n\r\n    public void clear(boolean notify) {\r\n        ArrayList&lt;T&gt; items = getValue();\r\n        items.clear();\r\n        if(notify){\r\n            setValue(items);\r\n        }\r\n    }\r\n\r\n    public void remove(T item){\r\n        ArrayList&lt;T&gt; items = getValue();\r\n        items.remove(item);\r\n        setValue(items);\r\n    }\r\n\r\n    public void notifyChange(){\r\n        ArrayList&lt;T&gt; items = getValue();\r\n        setValue(items);\r\n    }\r\n\r\n}<\/pre>\n<p>\ud2b9\ubcc4\ud55c \ub0b4\uc6a9\uc740 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e8\uc9c0 add \ubc0f remove \ub4f1\uc758 \uad6c\ud604\uc744 MutableLiveData\ub97c \uc0c1\uc18d\ud558\uc5ec \uad6c\ud604\ud55c \uac83\uc785\ub2c8\ub2e4. \ub610\ud55c \uc0dd\uc131\uacfc \ub3d9\uc2dc\uc5d0 ArrayList\ub97c \ub9cc\ub4dc\ubbc0\ub85c NPE\ub85c \ubd80\ud130 \uc548\uc804\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub354 \uc88b\uc740 \ubc29\ubc95\uc774 \uc788\uac70\ub098 \ub2e4\ub978 \ub300\uc548\uc774 \uc788\ub2e4\uba74, \ub313\uae00\uc5d0 \ub0a8\uaca8\uc8fc\uc2dc\uba74 \uac10\uc0ac\ud569\ub2c8\ub2e4!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>AAC LiveData\uc758 \ub4f1\uc7a5\uc73c\ub85c \ub370\uc774\ud130\ubc14\uc778\ub529 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc0ac\uc6a9\uc2dc MVVM\uc544\ud0a4\ud14d\ucc98\uc640 \ub9de\ubb3c\ub824 \ub370\uc774\ud130\uc640 UI\uac04\uc758 \ub3d9\uae30\ud654\ud558\ub294 \ucf54\ub4dc\ub97c \ub9ce\uc774 \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub2e8\uc218\uc758 Data\ub97c \ub2e4\ub8e8\ub294\ub370 \uc788\uc5b4\uc11c LiveData\ub294 \ud3b8\ub9ac\ud588\uc2b5\ub2c8\ub2e4. \uae30\uc874 BaseObservable\uc744 \uad6c\ud604\ud55c \ud074\ub798\uc2a4\uc5d0\uc11c notifyChange \ub610\ub294 notifyPropertyChange\ub97c \ucc98\ub9ac\ud560 \ud544\uc694\ub3c4\uc5c6\uace0, \uc0dd\uba85\uc8fc\uae30\ub97c \uc54c\uace0\uc788\ub2e4\ub294 \uc810\uc774 \uc88b\uc558\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc, \ubcf5\uc218\uc758 Data\uc778 List \ub610\ub294 ArrayList \ud0c0\uc785\uc744 LiveData\ub85c \uac10\uc2f8\uc11c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\uac00 \uc655\uc655 \uc0dd\uae30\uace4 \ud558\ub294\ub370\uc694. \uc774 \uacbd\uc6b0\uc5d0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[25],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/989"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=989"}],"version-history":[{"count":1,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/989\/revisions"}],"predecessor-version":[{"id":991,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/989\/revisions\/991"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}