{"id":1597,"date":"2023-01-02T18:00:16","date_gmt":"2023-01-02T09:00:16","guid":{"rendered":"http:\/\/yoonhada.com\/?p=1597"},"modified":"2023-12-26T21:19:52","modified_gmt":"2023-12-26T12:19:52","slug":"%e3%80%90unity%e3%80%91model-view-reactivepresenter-%ed%8c%a8%ed%84%b4%ec%9d%b4%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80","status":"publish","type":"post","link":"http:\/\/yoonhada.com\/?p=1597","title":{"rendered":"Model-View-(Reactive)Presenter \ud328\ud134\uc774\ub780"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">\ud658\uacbd<a href=\"https:\/\/tech.lonpeach.com\/2019\/11\/02\/UniRx-Getting-Started-1\/#%ED%99%98%EA%B2%BD\"><\/a><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/yoonhada.com\/?p=1425\">UniRx \uc785\ubb38 \uc2dc\ub9ac\uc988 \ubaa9\ucc28\ub294 \uc774\ucabd<\/a><a href=\"https:\/\/qiita.com\/toRisouP\/items\/5365936fc14c7e7eabf9#gui%E5%91%A8%E3%82%8A%E3%81%AE%E8%A8%AD%E8%A8%88%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3\"><\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">GUI \uc8fc\ubcc0\uc758 \ub514\uc790\uc778 \ud328\ud134<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Model-View-(Reactive)Presenter<\/code>\ud328\ud134(\uc57d\uce6d\ud558\uc5ec MV(R)P \ud328\ud134)\uc774\ub780 Unity\uc5d0\uc11c&nbsp;<strong>GUI \uc8fc\ubcc0\uc758 \uc124\uacc4 \ud328\ud134<\/strong>&nbsp;\uc758 \uc77c\uc885\uc785\ub2c8\ub2e4.<br>\u300cGUI\u300d\ub780, \uc774\ub978\ubc14 \u300c\uc720\uc800 \uc778\ud130\ud398\uc774\uc2a4\u300d\ub97c \ub9d0\ud574, \uac8c\uc784\uc911\uc5d0 \uc788\uc5b4\uc11c\uc758 \u300c\ud654\uba74\uc0c1\uc5d0 \ud45c\uc2dc\ub418\ub294 \uc815\ubcf4\u300d\ub098 \u300c\uba54\ub274\u300d\ub098 \u300c\ubc84\ud2bc\u300d\uc774\ub77c\uace0 \ud558\ub294 \uac83\uc744 \uac00\ub9ac\ud0b5\ub2c8\ub2e4.<br>(\uc790\uafb8 \ub9d0\ud558\uba74,&nbsp;<code>uGUI<\/code>\uc77c\uc774\ub77c\uace0 \uc0dd\uac01\ud574 \uc8fc\uc138\uc694)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GUI \uc8fc\uc704\uc758 \uad6c\ud604\uc218\ubc95\uc774\ub77c\uace0 \ud558\ub294 \uac83\uc740 Unity\uc5d0 \ud55c\uc815\ub418\uc9c0 \uc54a\uace0, \ubcf5\uc7a1\ud558\uac8c \ub418\uae30 \uc27d\ub2e4 \uc5b4\ub824\uc6b4 \ubd80\ubd84\uc785\ub2c8\ub2e4.<br>\uadf8 \ub54c\ubb38\uc5d0 \uc5ec\ub7ec\uac00\uc9c0 \uc124\uacc4 \ud328\ud134\uc774 \uace0\uc548\ub418\uc5b4 \uc654\uc2b5\ub2c8\ub2e4.<br>\ub300\ud45c\uc801\uc778 \uac83\uc73c\ub85c \ub9d0\ud558\uba74 \uc57d\uac04&nbsp;<code>MVC<\/code>\ub4f1&nbsp;<code>MVVM<\/code>\uc744 \ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8 \uc911\uc5d0\uc11c\ub3c4&nbsp;<code>MVP<\/code>\ud328\ud134\uc774\ub77c\ub294 \uac83\uc774 \uc788\uace0,&nbsp;<code>Model-View-(Reactive)Presenter<\/code>\ud328\ud134\uc740 \uc774\uac83\uc744 \ubc14\ud0d5\uc73c\ub85c \ud55c \uc124\uacc4 \ud328\ud134\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/qiita.com\/toRisouP\/items\/5365936fc14c7e7eabf9#%E3%81%AA%E3%81%9C%E8%A8%AD%E8%A8%88%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%AE%E3%81%8B\"><\/a>\uc65c \ub514\uc790\uc778 \ud328\ud134\uc774 \ud544\uc694\ud55c\uac00?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GUI \uc8fc\uc704\uc758 \uad6c\ud604\uc2dc\uc5d0 \uc774\ub7ec\ud55c \ubcf5\uc218\uc758 \uc124\uacc4 \ud328\ud134\uc774 \uc65c \ub4f1\uc7a5\ud558\ub294\uac00 \ud558\uba74,&nbsp;<strong>GUI \uc8fc\uc704\ub97c \uae68\ub057\ud558\uac8c \uad6c\ud604\ud558\ub294 \uac83\uc774 \uc911\uc694\ud558\uae30 \ub54c\ubb38<\/strong>&nbsp;\uc785\ub2c8\ub2e4.<br>GUI \uc8fc\ubcc0\uc740 \uadf8 \uc6a9\ub3c4\uc5d0\uc11c \ub9e4\uc6b0 \ubcf5\uc7a1\ud574\uc9c0\uae30 \uc27d\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ud654\uba74\uc0c1\uc758 \uc624\ube0c\uc81d\ud2b8\uc5d0 \ud45c\uc2dc\ud558\ub294 \ub370\uc774\ud130\ub294, \uadf8 \ub4a4\ud3b8\uc5d0\uc11c \uc11c\ub85c \uc5f0\ub3d9\ud558\uace0 \uc788\ub2e4<\/li>\n\n\n\n<li>\uc778\uac04\uc5d0\uac8c&nbsp;<strong>\uc2e4\uc2dc\uac04\uc73c\ub85c<\/strong>&nbsp;\uc815\ubcf4\ub97c \ud45c\uc2dc\ud574\uc57c \ud568<\/li>\n\n\n\n<li>\uc0ac\ub78c\uc774 GUI\ub97c \ud1b5\ud574&nbsp;<strong>\ub370\uc774\ud130 \ucc98\ub9ac\ub97c \ubc29\ud574\ud560<\/strong>&nbsp;\uc218 \uc788\uc74c<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/1-1024x792.jpg\" alt=\"\" class=\"wp-image-1896\" width=\"768\" height=\"594\" srcset=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/1-1024x792.jpg 1024w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/1-300x232.jpg 300w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/1-768x594.jpg 768w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/1-1200x928.jpg 1200w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/1.jpg 1400w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">GUI\ub294 \ub370\uc774\ud130 \uad6c\uc870\uac00 \ubcf5\uc7a1\ud558\uac8c \ub418\uae30 \uc26c\uc6b4 \ubd80\ubd84\uc774 \uc788\ub294\ub370, \uadf8 \uc774\uc678\uc5d0 \uc2e4\uc2dc\uac04\uc131, \uc0c1\ud638 \uc791\uc6a9\uc131\uc774 \ud544\uc694\ud55c \ubd80\ubd84\uc785\ub2c8\ub2e4. \uadf8\ub798\uc11c \ube60\ub974\uac8c \uad6c\ud604\ud558\ub2e4\ubcf4\uba74 \u201c\uc0c1\ud638 \ucc38\uc870&#8221;, \u201c\uc21c\ud658 \ucc38\uc870&#8221;, \u201c\ube44\uc9c0\uc6e8\uc774\ud2b8&#8221;, \u201c\uc774\ubca4\ud2b8\uc758 \ubb34\ud55c \ub8e8\ud504&#8221;\ub4f1\uc774 \ubc1c\uc0dd\ud560 \uc6b0\ub824\uac00 \ub9e4\uc6b0 \ub192\uc740 \uacf3\uc774\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ube44\uc9c0\uc6e8\uc774\ud2b8: \ub2e8\uc9c0 \ub300\uae30\ub9cc \ud558\ub294 \uac83\uc5d0 \ubd88\uacfc\ud55c\ub370 \uc4f8\ub370\uc5c6\uc774 CPU\ub97c \uc18c\ube44\ud558\uc5ec \ub2e4\ub978 \ud504\ub85c\uadf8\ub7a8\uc774\ub098 \uc2a4\ub808\ub4dc\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce58\uac8c \ub418\ub294 \ud604\uc0c1<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ucc98\ub7fc \ubcf5\uc7a1\ud558\uac8c \ub418\uae30 \uc26c\uc6b4 GUI\ub97c \u201c\ucc45\uc784\uc744 \ubd84\ub9ac\ud558\uc5ec \uac1d\uccb4 \uac04\uc758 \uc0c1\ud638 \uc791\uc6a9\uc744 \uad6c\ucd95\ud558\uba74 \uc880\ub354 \ub098\uc544\uc9c0\uc9c0 \uc54a\uc744\uae4c?\u201d\ub77c\ub294 \uc0dd\uac01\uc5d0\uc11c MVC, MVVM, MVP \uc124\uacc4\uac00 \ub098\uc628 \ubc30\uacbd\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ube60\ub974\uac8c \uad6c\ud604\ud55c \uc608<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc124\uacc4\ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uace0 \uc6b0\uc9c1\ud558\uac8c uGUI\ub97c \uc0ac\uc6a9\ud558\uba74 \uc774\ub807\uac8c \ub429\ub2c8\ub2e4\ub294 \uc608\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5c9\uc131\ud558\uac8c \ub9cc\ub4e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \u201c\uac8c\uc784 \uc911\uc5d0 \uc0ac\uc6a9\ud558\ub294 \uc911\uc694\ud55c \uc218\uce58\u201d\uc640 \u201cuGUI\uc5d0 \uc811\uadfc\ud558\ub294 \ubd80\ubd84\u201d\uc774 \uac19\uc740 \ud074\ub798\uc2a4 \uc548\uc5d0 \uadf8\ub300\ub85c \uc4f0\uc5ec\uc9c0\uac70\ub098 \ud558\uac8c \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using UnityEngine;\nusing UnityEngine.UI;\n\nnamespace Yabai\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ UI\uc640 \ub370\uc774\ud130\uc640 \uc5c9\ub9dd\uc774 \ub41c \ud074\ub798\uc2a4\n    \/\/\/ &lt;\/summary>\n    public class Data : MonoBehaviour\n    {\n        [SerializeField] private Slider _slider;\n\n        \/\/ \ud504\ub85c\ud37c\ud2f0 (\uc678\ubd80\uc5d0\uc11c \uc77d\uace0, \uc4f0\uae30 \uac00\ub2a5)\n        public float CurrentValue { get; set; }\n\n        private void Update()\n        {\n            \/\/ Update\ub85c \ub9e4 \ud504\ub808\uc784 \uc4f8\ub370\uc5c6\uc774 \uac12\uc744 \uccb4\ud06c \ud55c\ub2e4 (\ucd5c\uc545).\n            if (_slider.value != CurrentValue)\n            {\n                _slider.value = CurrentValue;\n            }\n        }\n\n        \/\/ \ucf54\ub4dc\uc5d0\uc11c\ub294 \ucc38\uc870\uac00 \uc5c6\uc9c0\ub9cc Unity\uc5d0\uc11c \ud638\ucd9c\ub418\ub294 public \uba54\uc11c\ub4dc\n        public void OnSliderValueChanged()\n        {\n            CurrentValue = _slider.value;\n        }\n    }\n}<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/2-1024x467.jpg\" alt=\"\" class=\"wp-image-1897\" width=\"768\" height=\"350\" srcset=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/2-1024x467.jpg 1024w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/2-300x137.jpg 300w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/2-768x350.jpg 768w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/2-1200x547.jpg 1200w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/2.jpg 1400w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Unity \uc0c1\uc5d0\uc11c \uac1d\uccb4\uc758 \uc0c1\ud638 \ucc38\uc870\uac00 \ubc1c\uc0dd\ud558\ub294 \uc5b4\ub290 \ud55c\ucabd\uc774 \ubd80\uc871\ud558\uba74 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uc5ec \uac8c\uc784\uc774 \uc2dc\uc791\ub418\uc9c0 \uc54a\uac70\ub098 \ud558\ub294 \uacbd\uc6b0\uac00 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ub418\ub294 \uac83\uc744 \ud53c\ud560 \ubaa9\uc801\uc73c\ub85c Unity\uc5d0\uc11c \ud754\ud788 \uc4f0\uc774\ub294 \uac83\uc774 MV(R)P \ud328\ud134\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Model-View-(Reactive)Presenter \ud328\ud134\uc744 \ub9d0\ud558\uae30 \uc804\uc5d0 \uc774\uac83\uc758 \uae30\ucd08\uac00 \ub418\ub294 Model-View-Prsenter \ud328\ud134\uc5d0 \ub300\ud574 \uba3c\uc800 \uc124\uba85\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/qiita.com\/toRisouP\/items\/5365936fc14c7e7eabf9#model-view-presenter%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3\"><\/a><code>Model-View-Presenter<\/code>\ud328\ud134<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Model-View-Presenter<\/code>(MVP) \ud328\ud134\uc740 GUI\uc758 \uc124\uacc4 \ud328\ud134 \uc911 &#8216;&nbsp;<code>Presenter<\/code>&#8216;\uc774\ub77c\ub294 \uac1c\ub150\uc744 \uc0ac\uc6a9\ud55c \uac83\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GUI \uc8fc\ubcc0\uc758 \uad6c\uc131 \uc694\uc18c\ub97c \ub2e4\uc74c\uc758 3\uac1c\ub85c \ub098\ub204\uc5b4 \uc0dd\uac01\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Model: \ub370\uc774\ud130\uc758 \uc2e4\uccb4. GUI\uc640\ub294 \uc9c1\uc811 \uc801\uc778 \uad00\uacc4\uac00 \uc5c6\ub294 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ubcf8\uccb4\uc758 \uc694\uc18c \ubd80\ubd84.<\/li>\n\n\n\n<li>View: GUI\ub97c \uc81c\uc5b4\ud558\ub294 \ubd80\ubd84. \ub370\uc774\ud130\ub97c \ud654\uba74\uc5d0 \ud45c\uc2dc\ud558\uac70\ub098 \ubc18\ub300\ub85c \uc0ac\uc6a9\uc790\uc758 \uc870\uc791\uc744 \ubc1b\ub294 \ubd80\ubd84.<\/li>\n\n\n\n<li>Presenter: Model\uacfc View\ub97c \uc5f0\uacb0\ud558\ub294 \uc911\uc7ac\uc790 \uc5ed\ud560.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/3-2.png\" alt=\"\" class=\"wp-image-1902\" width=\"548\" height=\"172\" srcset=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/3-2.png 730w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/3-2-300x94.png 300w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">MVP\uc5d0\uc11c \uac00\uc7a5 \uc911\uc694\ud55c \ubd80\ubd84\uc740<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u201cPresenter\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc73c\uba74 View\uc640 Model\uc740 \uc644\uc804\ud788 \ub3c5\ub9bd\ub41c \uc0c1\ud0dc\uac00 \ub41c\ub2e4\u201d<\/strong>\ub294 \uac83\uc785\ub2c8\ub2e4.\n<ul class=\"wp-block-list\"><\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">View\uc640 Model\uc744 \uc5f0\uacb0\ud558\ub294 \uc874\uc7ac\ub294 Presenter \ubfd0\uc774\uc5b4\uc11c Presenter\ub97c \ubc30\uc81c\ud558\uba74 \uc774 2\uac1c\ub294 \uc644\uc804\ud788 \ub3c5\ub9bd\uc801\uc774\uac8c \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/4-2.png\" alt=\"\" class=\"wp-image-1903\" width=\"458\" height=\"207\" srcset=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/4-2.png 610w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/4-2-300x136.png 300w\" sizes=\"auto, (max-width: 458px) 100vw, 458px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc989 \u201cView\ub294 Model\uc744 \uc644\uc804\ud788 \ubaa8\ub974\ub294 \uc0c1\ud0dc&#8221;, \u201cModel\uc740 View\ub97c \uc644\uc804\ud788 \ubaa8\ub974\ub294 \uc0c1\ud0dc&#8221;\uac00 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 \uc774 MVP \ud328\ud134\uc740 \uc2e4\uc81c\ub85c \ucf54\ub4dc\ub97c \uad6c\ud604\uc2dc \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\uac83\uc740 \u201cModel\uacfc View\ub97c \uc2e4\uc2dc\uac04 \uc5f0\ub3d9\uc2dc\ud0a4\ub824\uba74 \uc5b4\ub5bb\uac8c \ud558\uba74 \uc88b\uc744\uae4c?\u201d\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cModel\uc758 \ubcc0\ud654\ub97c View\uc5d0 \uc989\uac01 \ubc18\uc601\ud588\ub2e4&#8221; \u201c\uc720\uc800\ub85c\ubd80\ud130 View\uc758 \uc785\ub825\uc744 Model\ub85c \uc989\uc2dc \uc804\ub2ec&#8221;\uc774\ub780, <strong>\uc2e4\uc2dc\uac04 \ub3d9\uc791<\/strong>\uc744 \ubcc4\ub3c4\uc758 \ubc29\ubc95\uc744 \uc0ac\uc6a9\ud558\uc5ec \uad6c\ud604\ud560 \ud544\uc694\uac00 \uc0dd\uae34 \uac83\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ucc98\ub7fc \u201c\uc2e4\uc2dc\uac04\uc73c\ub85c \ub3d9\uc791\uc744 \ud558\ub294 \uac83\u201d\uc744 \ubcc4\ub3c4\ub85c \ub9c8\ub828\ud560 \ud544\uc694\uac00 \uc788\ub294 \uac83\uc774 MVP \ud328\ud134\uc758 \uacb0\uc810\uc774\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a href=\"https:\/\/qiita.com\/toRisouP\/items\/5365936fc14c7e7eabf9#mvp%E3%81%8B%E3%82%89mvrp%E3%81%B8\"><\/a>MVP \uc73c\ub85c MV(R)P<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u201c\uc2e4\uc2dc\uac04\uc73c\ub85c \ub3d9\uc791\ud558\ub294 \uac83&#8221;\uc5d0 \ub300\ud574 \ubcc4\ub3c4\uc758 \ucc98\ub9ac\uac00 \ud544\uc218 \uc600\ub358 Model-View-Presenter \ud328\ud134\uc5d0 UniRx\ub97c \ucd94\uac00\ud568\uc73c\ub85c\uc368 \ud574\ub2f9 \ubb38\uc81c\ub97c \ubcf4\uc644\ud55c \uac83\uc774 Model-View-(Reactive)Presenter \ud328\ud134 \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Unirx\uac00 \uac00\uc9c4 \ub9ac\uc561\ud2f0\ube0c \uac1d\uccb4, \ud2b9\ud788 ReacrtiveProperty\uc758 \ud3b8\ub9ac\uc131\uc5d0 \uc8fc\ubaa9\ud558\uc5ec MVP \ud328\ud134\uc744 \uc751\uc6a9\ud55c \uac83\uc774 MV(R)P \ud328\ud134\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/qiita.com\/toRisouP\/items\/5365936fc14c7e7eabf9#model-view-reactivepresenter%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E8%A7%A3%E8%AA%AC\"><\/a>Model-View-(Reactive)Presenter \ud328\ud134 \uc124\uba85<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\uc2dc \u300c<code>Model-View-(Reactive)Presenter<\/code>\ud328\ud134(&nbsp;<code>MV(R)P<\/code>\ud328\ud134)\u300d\uc758 \ud574\uc124\uc744 \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/qiita.com\/toRisouP\/items\/5365936fc14c7e7eabf9#%E6%A6%82%E8%A6%81\"><\/a>\uac1c\uc694<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Model-View-(Reactive)Presenter<\/code>\ud328\ud134\uc740&nbsp;<strong>MVP \ud328\ud134\uacfc UniRx\ub97c \ubcd1\uc6a9\ud55c Unity\uc5d0\uc11c\uc758 GUI \uc8fc\uc704\uc758 \uad6c\ud604 \uae30\ubc95<\/strong>&nbsp;\uc785\ub2c8\ub2e4.<br>GUI\uc758 \uad6c\uc131 \uc694\uc18c\ub97c&nbsp;<code>Model<\/code>,&nbsp;<code>View<\/code>\uc758&nbsp;<code>Presenter<\/code>\uc138 \uac00\uc9c0\ub85c \ubd84\ud574\ud558\uace0 \uadf8\ub4e4\uc744 UniRx (\uc758&nbsp;<code>ReactiveProperty<\/code>)\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud611\ub825\ud558\ub294 \uae30\uc220\uc774\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5-827x1024.jpg\" alt=\"\" class=\"wp-image-1904\" width=\"620\" height=\"768\" srcset=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5-827x1024.jpg 827w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5-242x300.jpg 242w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5-768x951.jpg 768w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5-1241x1536.jpg 1241w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5-1200x1485.jpg 1200w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5.jpg 1400w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(Model\uc758 \ubcc0\ud654\ub97c Presenter\ub97c \ud1b5\ud574 View\uc5d0 \ubc18\uc601. View\uc758 \ubcc0\ud654\ub97c Presenter\ub97c \ud1b5\ud574 Model\uc5d0 \ubc18\uc601. \uadf8 \uc911\uac1c\uc5d0 UniRx\ub97c \uc0ac\uc6a9\ud55c\ub2e4.)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/qiita.com\/toRisouP\/items\/5365936fc14c7e7eabf9#mvrp%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%8C%E8%A8%80%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E8%A8%80%E3%81%A3%E3%81%A6%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8\"><\/a><code>MV(R)P<\/code>\ud328\ud134\uc774 \ub9d0\ud558\ub294 \uac83 \/ \ub9d0\ud558\uc9c0 \uc54a\uc740 \uac83<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7f0 \uc124\uacc4 \ud328\ud134\uc744 \uc774\uc6a9\ud560 \ub54c\uc5d0 \uc870\uc2ec\ud574\uc57c \ud558\ub294 \ubd80\ubd84\uc740 &#8220;\uc774 \ub514\uc790\uc778 \ud328\ud134\uc740 \ubb34\uc5c7\uc744 \ub9d0\ud558\uace0 \uc788\ub294\uac00&#8221; \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac00\ub054 \ud574\ub2f9 \ud328\ud134\uc5d0 \uae4a\uac8c \ube60\uc838 \ub4e4\uc5b4&nbsp;<strong>\ubcf8\ub798\uc758 \uc758\ubbf8\uc640\ub294 \uc804\ud600 \ub2e4\ub978 \uac83\uc744 \uc8fc\uc7a5\ud558\ub294 \uc0ac\ub78c<\/strong>\uc774 \uc788\uac70\ub098 \ud558\ubbc0\ub85c \uc8fc\uc758\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>MV(R)P<\/code>\ud328\ud134\uc774 \ub9d0\ud558\ub294 \uac83, \ub9d0\ud558\uc9c0 \uc54a\uc740 \uac83\uc744 \uc544\ub798\uc5d0 \uc815\ub9ac \ud588\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/qiita.com\/toRisouP\/items\/5365936fc14c7e7eabf9#mvrp%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%8C%E8%A8%80%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8\"><\/a><code>MV(R)P<\/code>\ud328\ud134\uc774 \ub9d0\ud558\ub294 \uac83<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GUI(\ud2b9\ud788 uGUI)\uc758 \uad6c\ud604 \ud328\ud134\uc774\ub2e4.<\/li>\n\n\n\n<li>View\uc640 Model\uc744 Presenter\ub77c\ub294 \uc587\uc740 \ub808\uc774\uc5b4\ub85c \uc5f0\uacb0 \ud55c\ub2e4.<\/li>\n\n\n\n<li>\uac01 \uac1d\uccb4 \uc5f0\uacb0\uc5d0\ub294 Observable(ReactiveProperty)\uc744 \ud65c\uc6a9\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/qiita.com\/toRisouP\/items\/5365936fc14c7e7eabf9#mvrp%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%8C%E8%A8%80%E3%81%A3%E3%81%A6%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8\"><\/a><code>MV(R)P<\/code>\ud328\ud134\uc774&nbsp;<strong>\ub9d0\ud558\uc9c0 \uc54a\uc740 \uac83<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Unity&nbsp;<code>GameObject<\/code>\ub4f1\uc740 \ubaa8\ub450 View\uc774\ub2e4 (\u2190 \ub9d0\ud558\uc9c0 \uc54a\ub294\ub2e4.&nbsp;<code>Model<\/code>\ud558\uc9c0\ub9cc&nbsp;<code>GameObject<\/code>\uc0ac\uc6a9\ud574\ub3c4 \ubcc4\ub85c \uc88b\ub2e4)<\/li>\n\n\n\n<li><code>MV(R)P<\/code>\ud328\ud134\uc740 Unity \uc885\uc18d \uacc4\uce35\uacfc Unity \uc885\uc18d \uacc4\uce35\uc744 \ubd84\ub9ac\ud558\ub294 \uac83\uc785\ub2c8\ub2e4 (\u2190 \ub9d0\ud558\uc9c0 \uc54a\uc74c).<\/li>\n\n\n\n<li><code>MV(R)P<\/code>\ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74 \uac8c\uc784\uc744 \ubb34\uc5c7\uc774\ub4e0 \uae68\ub057\ud558\uac8c \uad6c\ud604\ud560 \uc218 \uc788\ub2e4(\u2190 \ub9d0\ud558\uc9c0 \uc54a\ub294\ub2e4.)<\/li>\n\n\n\n<li>\uc778\uac8c\uc784\uc5d0&nbsp;<code>MV(R)P<\/code>\ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74 \uc124\uacc4\ub97c \uc798 \ud560 \uc218 \uc788\ub2e4(\u2190 \ub9d0\ud558\uc9c0 \uc54a\ub294\ub2e4. \ud074\ub9b0 \uc544\ud0a4\ud14d\ucc98\ub77c\ub4e0\uc9c0\uc640 \uc774\uc57c\uae30\uac00 \uc11e\uc774\uc9c0 \uc54a\ub294\ub2e4?)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">MV(R)P \ud328\ud134\uc740 GUI \uad6c\ud604\uc744 \uc774\ub807\uac8c \ub9cc\ub4e4\uba74 \uc88b\uc544 \ub77c\ub294 \ub0b4\uc6a9\ubc16\uc5d0 \ub9d0\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8 \uc774\uc0c1\uc758 \uac83\uc740 <strong>MV(R)P \ud328\ud134\uc5d0 \uae30\ub300\ub97c \uc9c0\ub098\uce58\uac8c \uae30\ub300\ud55c<\/strong> \uc5b5\uce21\uc73c\ub85c \ubcf4\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/qiita.com\/toRisouP\/items\/5365936fc14c7e7eabf9#%E5%90%84%E7%A8%AE%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E5%BD%B9%E5%89%B2\"><\/a>\ub2e4\uc591\ud55c \uac1d\uccb4\uc758 \uc5ed\ud560<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>MV(R)P<\/code>\ud328\ud134\uc5d0\ub294 \ub2e4\uc74c\uc758 3\uac1c\uc758 \uc624\ube0c\uc81d\ud2b8\uac00 \ub4f1\uc7a5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Model<\/code><\/li>\n\n\n\n<li><code>View<\/code><\/li>\n\n\n\n<li><code>Presenter<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uac15\uc870\ud558\uba74 \uc88b\uc740 \ubd80\ubd84\uc740 \uc774\ub4e4\uc758 \uac1d\uccb4\ub294 <strong>\uc2e4\uc81c \uad6c\ud604\uc790\uc758 \uad00\uc810\uc5d0\uc11c \uc0c1\ub300\uc801\uc73c\ub85c \uacb0\uc815\ub418\ub294 \uac83<\/strong> \uc774\ub77c\ub294 \uc810\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc989 \u201c\uc55e\uc73c\ub85c Model\uc744 \ub9cc\ub4e4\uc5b4\uc57c\uc9c0!\u201d\ub77c\ub294 \uc5ed\ud560\uc744 \uc815\ud558\uace0 \uac1d\uccb4\ub97c \ub9cc\ub4dc\ub294 \uac83\uc774 \uc544\ub2cc&#8221; \uc774 \uac1d\uccb4\ub294 \uc774 GUI\uc5d0\uac8c Model \uc5ed\ud560\uc744 \ud574\ub77c&#8221;\ub77c\uace0 \uacb0\uc815\ud558\ub294 \ud615\ud0dc\uac00 \ub9de\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc694\uc57d\ud558\uba74 <strong>Model\uacfc View\ub4f1\uc774 \uc5c4\uaca9\ud558\uac8c \uc815\ud574\uc9c4 \ubd80\ubd84\uc774 \uc544\ub2cc \uc2dc\uc2a4\ud15c \uc804\uccb4\uc758 \ud750\ub984\uc744 \ubcf4\uace0 \uacb0\uc815\ud558\ub294<\/strong> \uac83\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Model\uc740<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GUI\uc5d0 \ub300\ud574\uc11c \ud45c\uc2dc\ud558\ub294 \ub370\uc774\ud130\uc758 \uc2e4\uccb4\ub97c \uac00\uc9c0\ub294 \ubd80\ubd84<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">MV(R)P \ud328\ud134\uc5d0\uc11c\uc758 Model\uc740 \ub370\uc774\ud130\uc758 \uc2e4\uccb4\ub97c \uac00\uc9c4 \ubd80\ubd84\uc744 \ub9d0\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc14\uafb8\uc5b4 \ub9d0\ud558\uba74 <strong>GUI\uc5d0 \ud45c\uc2dc\ud558\ub294 \ub370\uc774\ud130\uc758 \uc2e4\uccb4\ub97c \uac00\uc9c4\ub2e4<\/strong> \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc561\uc158 \uac8c\uc784\uc758 \uc608\ub97c \ub4e4\uba74 \u201c\ud50c\ub808\uc774\uc5b4\uc758 \uc88c\ud45c&#8221;, \u201c\ud50c\ub808\uc774\uc5b4\uc758 \uccb4\ub825&#8221;, \u201c\uc801\uc758 \uccb4\ub825&#8221;, \u201c\ud604\uc7ac \uc2a4\ud14c\uc774\uc9c0 \uc815\ubcf4&#8221;, \u201c\ub098\uba38\uc9c0 \uc81c\ud55c \uc2dc\uac04&#8221;\ub4f1\uc744 \ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc870\uae08 \ub354 \uae4a\uc774 \uc788\ub294 \ud45c\ud604\uc744 \ud55c\ub2e4\uba74 Model\uc740 **\u201c\uac8c\uc784\uc758 \uad6c\uc131\uc5d0 \ud544\uc218 \ubd88\uac00\uacb0\ud55c \uc815\ubcf4(\ub3c4\uba54\uc778)\u201d**\uc744 \ub2e4\ub8e8\uace0 \uc788\ub294 \uc624\ube0c\uc81d\ud2b8 \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 MV(R)P \ud328\ud134\uc5d0\uc11c\uc758 Model\uc758 \uc911\uc694\ud55c \ubd80\ubd84\uc740 ReactiveProperty\ub97c \uc0ac\uc6a9\ud558\uc5ec Presenter\uc758 \uc811\uadfc\uc744 \uac00\ub2a5\ud558\uac8c \ud558\uace0 \uc788\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ReactiveProperty\uc744 \uacf5\uac1c\ud568\uc73c\ub85c\uc368 Model\uc758 \ub0b4\ubd80 \uc0c1\ud0dc\uac00 \ubcc0\ud654\ud588\uc744 \ub54c \uadf8\uac83\uc774 Observable\ub85c\uc11c \uc678\ubd80\uc5d0 \ud1b5\ubcf4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Model\uc758 \uad6c\ud604 \ubc29\ubc95<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ud55c \uac1d\uccb4\ub97c MV(R)P \ud328\ud134 Model\ub85c \ub2e4\ub8e8\uae30 \uc704\ud574\uc11c \ud544\uc694\ud55c \uc808\ucc28\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc0c1\ud0dc\ub97c IObservable&lt;T&gt; \ub610\ub294 ReactiveProperty&lt;T&gt;\ub85c \uacf5\uac1c\ud55c\ub2e4.<\/li>\n\n\n\n<li>(\ud544\uc694\ud558\uba74) Model \ub0b4\ubd80 \uc0c1\ud0dc\ub97c \uc218\uc815\ud558\ub294 \ud504\ub85c\ud37c\ud2f0\ub098 \uba54\uc11c\ub4dc\ub97c \uc900\ube44\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc694\uc57d\ud558\uba74 <strong>UniRx\ub97c \uc0ac\uc6a9\ud558\uace0 \uc0c1\ud0dc\ub97c \uacf5\uac1c\ud55c\ub2e4<\/strong> \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uba74, \ub2e4\uc74c\uc758 Player\ub294 \u201c\uccb4\ub825&#8221;\uc744 ReactiveProperty\ub85c \uacf5\uac1c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. (\ub610 \ub3d9\uc2dc\uc5d0 Enemy\uc640 \ucda9\ub3cc\ud558\uba74 \uccb4\ub825\uc774 \uc904\uc5b4\ub4ed\ub2c8\ub2e4)<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using UniRx;\nusing UnityEngine;\n\nnamespace MVRP.Models\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ \uc561\uc158 \uac8c\uc784\uc758 \ud50c\ub808\uc774\uc5b4\n    \/\/\/ \"\ud654\uba74\uc5d0 \uccb4\ub825\uc744 \ub098\ud0c0\ub0b8\ub2e4\"\ub77c\ub294 \uc2dc\uc810\uc5d0\uc11c \ubcf4\uba74 \ubaa8\ub378\n    \/\/\/ &lt;\/summary>\n    public sealed class Player : MonoBehaviour\n    {\n        \/\/\/ &lt;summary>\n        \/\/\/ \uccb4\ub825\n        \/\/\/ Reactive Property\ub85c\uc11c \uc678\ubd80\uc5d0 \uc0c1\ud0dc\ub97c ReadOnly\ub85c \uacf5\uac1c\n        \/\/\/ &lt;\/summary>\n        public IReadOnlyReactiveProperty&lt;int> Health => _health;\n\n        private readonly IntReactiveProperty _health = new IntReactiveProperty(100);\n\n        \/\/\/ &lt;summary>\n        \/\/\/ \ucda9\ub3cc \uc774\ubca4\ud2b8\n        \/\/\/ &lt;\/summary>\n        private void OnCollisionEnter(Collision collision)\n        {\n            \/\/ Enemy\uc640 \ucda9\ub3cc\ud558\uba74 \uccb4\ub825\uc744 \uc904\uc778\ub2e4\n            if (collision.gameObject.TryGetComponent&lt;Enemy>(out var _))\n            {\n                _health.Value -= 10;\n            }\n        }\n\n        private void OnDestroy()\n        {\n            _health.Dispose();\n        }\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub367\ubd99\uc5ec, \uccb4\ub825\uc744 Reactive Property\ub97c public\uc73c\ub85c \uacf5\uac1c\ud558\uc5ec \uac12\uc758 Read\/Write\ub97c \uc9c1\uc811 \uac00\ub2a5\ud558\uac8c \ud558\uac70\ub098, Read \uc804\uc6a9\uc73c\ub85c IReadonly Reactive Property&lt;T&gt;\ub9cc\uc744 \uacf5\uac1c\ud558\uace0 Write\ub294 \ub2e4\ub978 \uba54\uc18c\ub4dc\ub97c \uacbd\uc720 \uc2dc\ud0ac\uc9c0\ub294 \uc5b4\ub290 \ucabd\uc774\ub4e0 \uc0c1\uad00\uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubd80\ubd84\uc740 \ud300\uc758 \uc124\uacc4 \uaddc\uce59\uc774\ub098 \uac1c\uc778 \ucde8\ud5a5 \ub4f1\uc5d0 \ub530\ub77c \uc815\ud574\ub3c4 \ubb34\ubc29 \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">View\ub294<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">MV(R)P \ud328\ud134\uc5d0\uc11c View\ub294 \u201c\uc0ac\uc6a9\uc790(\uc720\uc800)\uc5d0 \uc815\ubcf4\ub97c \ud45c\uc2dc\ud558\uac70\ub098 \uc0ac\uc6a9\uc790\uc758 \uc785\ub825\uc744 \ubc1b\ub294 \ubd80\ubd84&#8221;\uc744 \ub9d0\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub354 \uac04\ub2e8\ud558\uac8c \ub9d0\ud558\uba74, uGUI\ub97c \uc0ac\uc6a9\ud558\ub294 \ubd80\ubd84\uc774\ub77c\uace0 \uc0dd\uac01\ud574\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4(\ubb3c\ub860 uGUI \uc774\uc678\ub97c \uc0ac\uc6a9\ud574\ub3c4 \uad1c\ucc2e\uc2b5\ub2c8\ub2e4)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac04\ub2e8\ud558\uac8c uGUI\uc758 \u201cText\u201d, \u201cButton\u201d, \u201cSlider\u201d\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uadf8\ub300\ub85c View\ub85c \ub2e4\ub8f0 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub610\ud55c Tween\uc744 \ucd94\uac00\ud558\ub294 \ub4f1 UI \uc694\uc18c\uac00 \uc560\ub2c8\uba54\uc774\uc158\ud558\ub294 \uacbd\uc6b0\uc5d0\ub3c4 \uadf8 \uc560\ub2c8\uba54\uc774\uc158\uc744 \uad00\ub9ac\ud558\ub294 \uae30\ub2a5\ub3c4 View\ub85c \ubd10\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">View\uc758 \uad6c\ud604 \ubc29\ubc95<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ud55c \uac1d\uccb4\ub97c View\ub85c \ub2e4\ub8e8\ub3c4\ub85d \ud558\uae30 \uc704\ud574 \ud544\uc694\ud55c \uac83\uc740 Presenter\uc5d0\uc11c \ucc38\uc870 \uac00\ub2a5\ud558\uac8c \ud558\ub3c4\ub85d \ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">uGUI\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc9c1\uc811 View\ub85c \ubcf8\ub2e4\uba74 Presenter\ubd80\ud130 uGUI \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc9c1\uc811 \ucc38\uc870\ud560 \ubfd0\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubb34\uc5b8\uac00 \uc790\uae30\uac00 \ub9cc\ub4e0 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ucc38\uc870\uc2dc\ud0a8\ub2e4\uba74 Presenter\uc5d0\uc11c \ubcf4\uc774\ub294 \uc704\uce58\uc5d0 \uadf8 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ubc30\uce58\ud560 \ud544\uc694\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub294 uGUI\uc758 Slider\ub97c \uc81c\uc5b4\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ud2c0\ub9bc\uc5c6\uc774 View \uc694\uc18c\uc774\ubbc0\ub85c, Presenter\uc5d0\uc11c \ucc38\uc870\ud574\ub3c4 \ubb38\uc81c \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using DG.Tweening;\nusing UnityEngine;\nusing UnityEngine.UI;\n\nnamespace MVRP.Views\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ uGUI\uc758 Slider\ub97c \uc560\ub2c8\uba54\uc774\uc158\uc73c\ub85c \ub9cc\ub4dc\ub294 \ucef4\ud3ec\ub10c\ud2b8(View)\n    \/\/\/ &lt;\/summary>\n    public sealed class AnimationSlider : MonoBehaviour\n    {\n        [SerializeField] private Slider _slider;\n\n        public void SetValue(float value)\n        {\n            \/\/ \uc560\ub2c8\uba54\uc774\uc158\ud558\ub294 \ub3d9\uc548 \uc2ac\ub77c\uc774\ub354\ub97c \uc6c0\uc9c1\uc785\ub2c8\ub2e4.\n            DOTween.To(() => _slider.value,\n                n => _slider.value = n,\n                value,\n                duration: 1.0f);\n        }\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">(\uc2ac\ub77c\uc774\ub354\ub97c \uc560\ub2c8\uba54\uc774\uc158\ud654 \ud558\uba74\uc11c \ubcc0\ud654\uc2dc\ud0a8\ub2e4)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Presenter\ub294<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">MV(R)P \ud328\ud134\uc5d0\uc11c\uc758 Presenter\ub294 Model\uacfc View\ub97c \uc911\uac1c\ud558\ub294 \uac1d\uccb4\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Model \u2192 View: Model \ub0b4\ubd80 \uc0c1\ud0dc\uc758 \ubcc0\ud654\ub97c ReactiveProperty \ud639\uc740 Observable\ub97c \ud1b5\ud574\uc11c \uac10\uc9c0\ud558\uace0, \uadf8\uac83\uc744 View\uc5d0 \ubc18\uc601<\/li>\n\n\n\n<li>View \u2192 Model: View \uc0c1\ud0dc \ubcc0\ud654\ub97c \uac10\uc9c0\ud574\uc11c \uadf8\uac83\uc744 Model\uc5d0 \ubc18\uc601<\/li>\n\n\n\n<li>View\uc640 Model \uc0ac\uc774\uc5d0 \ud544\uc694\ud55c \ub370\uc774\ud130\uc758 \ubcc0\ud658 ( string \u2192 int \ub4f1\uc758 \ud615 \ubcc0\ud658\uc774\ub098 \uac12\uc758 \ud45c\ud604 \ubc94\uc704\uc758 \uc870\uc815 \ub4f1)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uac19\uc740 \uc5ed\ud560\uc744 \uac16\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(\uacbd\uc6b0\uc5d0 \ub530\ub77c\uc11c\ub294 Model \u2192 View\uc758 \ud750\ub984\uc73c\ub85c \ub05d\ub098\ub294 \uacbd\uc6b0\ub3c4 \ub9ce\uc2b5\ub2c8\ub2e4)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Presenter\ub294 <strong>\ub370\uc774\ud130\uc758 \ubcc0\ud658 \uc815\ub3c4\uc758 \ub17c\ub9ac \ubc16\uc5d0 \uc5c6\ub294 \ub9e4\uc6b0 \uc587\uc740 \ub808\uc774\uc5b4<\/strong> \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Presenter\uc5d0\ub294 \uac8c\uc784 \ub85c\uc9c1\uacfc View\uc758 \uad00\ub9ac \ub85c\uc9c1\uc744 \uac00\uc9c0\uace0 \uc788\uc73c\uba74 \uc548\ub418\uba70, \uae30\ubcf8\uc801\uc73c\ub85c \ub370\uc774\ud130\uc758 \uad50\ud658\uacfc \uac04\ub2e8\ud55c \ub370\uc774\ud130 \ubcc0\ud658\ub9cc \ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Presenter\uc758 \uad6c\ud604 \ubc29\ubc95<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Presenter\uc740 \uc778\uc2a4\ud399\ud130\uc758 \uc5f0\uacb0\uc744 \ud1b5\ud574 Model \ubc0f View \uc591\ucabd\uc744 \ubaa8\ub450 \ucc38\uc870\ud560 \ud544\uc694\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c \uc774\ub4e4 2\uac1c\uac00 \ucc38\uc870\ud560 \uc218 \uc788\ub294 \uacc4\uce35 \ubc0f \ubaa8\ub4c8\uc5d0 \uc815\uc758\ud558\uace0 \uac01\uac01\uc744 \uc5f0\uacb0\uc2dc\ud0b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uad6c\ud604\uc740<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Model\uc758 Observable \ud639\uc740 ReactiveProperty\uc744 Subscribe() \ud558\uace0 \uadf8 \uc0c1\ud0dc \ubcc0\ud654\ub97c View\uc5d0 \uc804\ub2ec\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">View\uc758 \uc0c1\ud0dc \ubcc0\ud654\ub97c Model\uc5d0 \uc804\ub2ec\ud55c\ub2e4. \uc774\ub7ec\ud55c \ucc98\ub9ac\ub97c \uad6c\ud604\ud560 \ubfd0\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\uc74c \uad6c\ud604\uc740 \uc55e\uc758 Player\uc640 AnimationSlider\ub97c \uc5f0\uacb0\ud55c Presenter \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using MVRP.Models;\nusing MVRP.Views;\nusing UniRx;\nusing UnityEngine;\n\nnamespace MVRP.Presenters\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ \ud50c\ub808\uc774\uc5b4\uc758 \uccb4\ub825\uc744 View\uc5d0 \ubc18\uc601\ud558\ub294 Presenter\n    \/\/\/ &lt;\/summary>\n    public sealed class PlayerHealthPresenter : MonoBehaviour\n    {\n        \/\/ Model\n        [SerializeField] private Player _player;\n\n        \/\/ View\n        [SerializeField] private AnimationSlider _animationSlider;\n\n        private void Start()\n        {\n            \/\/ Player\uc758 Health \ubaa8\ub2c8\ud130\ub9c1\n            _player.Health\n                .Subscribe(x =>\n                {\n                    \/\/ View\uc5d0 \ubc18\uc601\n                    _animationSlider.SetValue((float)x \/ _player.MaxHealth);\n                }).AddTo(this);\n        }\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Presenter\ub97c \uc798 \ub9cc\ub4dc\ub294 \uc694\ub839\uc740 \u201cPresenter\ub85c \ubcf5\uc7a1\ud55c \ub17c\ub9ac\ub97c \uc791\uc131\ud558\uc9c0 \uc54a\ub294\ub2e4\u201d, \u201cPresenter\uc5d0 \uc0c1\ud0dc\ub97c \uac00\uc9c0\uc9c0 \ubabb\ud558\uac8c \ud55c\ub2e4\u201d \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Presenter\ub294 \uc5b4\ub514\uae4c\uc9c0\ub09c Model\uacfc View\ub97c \uc787\ub294 \ub9cc\ud07c\uc758 \uc874\uc7ac\uc774\uba70, <strong>Presenter\uc758 \uc5ec\ubd80\uac00 \uac8c\uc784\uc758 \ub3d9\uc791\uc5d0 \uc601\ud5a5\uc744 \uc8fc\uc5b4\uc11c\ub294 \uc548\ub429\ub2c8\ub2e4.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(Presenter\ub97c \ubc30\uce58\ud558\uc9c0 \uc54a\uc73c\uba74 Model\uc758 \ub3d9\uc791\uc774 \ubc14\ub00c\uac70\ub098 \uc5d0\ub7ec\ub97c \ub0b4\uc5b4 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294\ub2e4\ub294 \ub4f1\uc740 \uc88b\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cPresenter\uc640 View\ub294 \ubbf8 \uad6c\ud604\uc73c\ub85c\ub3c4 Model\ub9cc \uc788\uc73c\uba74 \uac8c\uc784 \uc790\uccb4\ub294 \uc5d0\ub7ec\ub97c \ub0b4\uc9c0 \uc54a\uace0 \ub3d9\uc791\ud55c\ub2e4(\uc81c\ub300\ub85c \ud50c\ub808\uc774\ub294 \ub418\uc9c0 \uc54a\uc744 \uc9c0\ub77c\ub3c4)\u201d\ub77c\uace0 \uc0dd\uac01\ud558\uc138\uc694.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc0d8\ud50c\uc758 \ub3d9\uc791 \uc608<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc704\uc5d0\uc11c \uc791\uc131\ud55c Player\uc640 AnimationSlider\uc758 \uc870\ud569\uc740 \uc2e4\uc81c\ub85c \ub3d9\uc791\uc2dc\ud0a4\uba74 \uc544\ub798 \ucc98\ub7fc \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/1.webp\" alt=\"\" class=\"wp-image-1909\" width=\"643\" height=\"530\"\/><figcaption class=\"wp-element-caption\">(\u00a0<code>Player<\/code>(\ucea1\uc290)\uc5d0\u00a0<code>Enemy<\/code>(\uc0c1\uc790)\uac00 \ucda9\ub3cc \ud560 \ub54c\ub9c8\ub2e4 \uccb4\ub825\uc774 \uac10\uc18c\ud558\uace0, \uadf8\uac83\uc774 Slider\uc5d0 \ubc18\uc601\ub41c\ub2e4)<\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><a href=\"https:\/\/qiita.com\/toRisouP\/items\/5365936fc14c7e7eabf9#%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AE%E3%82%B7%E3%83%BC%E3%83%B3%E6%A7%8B%E6%88%90\"><\/a>\uc0d8\ud50c\uc758 \uc7a5\uba74 \uad6c\ud604<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5-1024x405.png\" alt=\"\" class=\"wp-image-1910\" width=\"768\" height=\"304\" srcset=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5-1024x405.png 1024w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5-300x119.png 300w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5-768x304.png 768w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5-1200x475.png 1200w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5.png 1310w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Presenter\ub77c\ub294 GameObject\uc5d0 PlayerHealthPresenter\uac00 \ubd80\ucc29\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\uac83\uc774 \uc720\ub2c8\ud2f0\uc758 hierarchy \uc708\ub3c4\uc6b0\uc0c1\uc5d0\uc11c Player\uc640 Animation Slider\ub97c \uc9c1\uc811 \ucc38\uc870\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ubcc4\ucca8 \uc608: Model\u2192View\/View\u2192Model\uc758 \uc0c1\ud638 \uad50\ud658\uc774 \uc788\ub294 \uc0ac\ub840<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc544\uae4c\uc758 \uc608\ub294 Model\u2192View\uc758 \uc77c\ubc29 \ud1b5\ud589\uc774\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc544\ub798\ub294 View\u2192Model\uc758 \uacbd\ub85c\ub3c4 \uc788\ub294 \ud328\ud134 \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/2.webp\" alt=\"\" class=\"wp-image-1911\" width=\"643\" height=\"242\"\/><figcaption class=\"wp-element-caption\">(\uc2ac\ub77c\uc774\ub354\uc758 \uc870\uc791\uc774 Model\uc5d0 \ubc18\uc601\ub418\uace0 Model\uc758 \uc870\uc791\uc774 \uc2ac\ub77c\uc774\ub354\uc640 Text\uc5d0 \ubc18\uc601\ub41c\ub2e4)<\/figcaption><\/figure>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using UniRx;\nusing UnityEngine;\n\nnamespace MVRP.Models\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ \ub370\uc774\ud130\uc758 \uc2e4\uccb4\ub97c \uac00\uc9c4 \ud074\ub798\uc2a4\n    \/\/\/ &lt;\/summary>\n    public sealed class SampleModel : MonoBehaviour\n    {\n        \/\/ Count \uc218\n        public IReadOnlyReactiveProperty&lt;int> Count => _count;\n\n        \/\/ \ucd5c\ub300\uac12\n        public readonly int MaxCount = 100;\n\n        private readonly IntReactiveProperty _count = new IntReactiveProperty(0);\n\n        public void SetCount(int value)\n        {\n            \/\/ \uc22b\uc790 \ubc94\uc704 \uc870\uc815\n            value = Mathf.Clamp(value, 0, MaxCount);\n            _count.Value = value;\n        }\n\n        private void OnDestroy()\n        {\n            _count.Dispose();\n        }\n    }\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using MVRP.Models;\nusing UniRx;\nusing UnityEngine;\nusing UnityEngine.UI;\n\nnamespace MVRP.Presenters\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ Count\uc758 Presenter\n    \/\/\/ &lt;\/summary>\n    public sealed class CountPresenter : MonoBehaviour\n    {\n        \/\/ Views\n        \/\/ uGUI \uad6c\uc131 \uc694\uc18c\ub97c \uc9c1\uc811 \ucc38\uc870\n        [SerializeField] private Slider _slider;\n        [SerializeField] private Text _text;\n\n        \/\/ Model\n        [SerializeField] private SampleModel _model;\n\n        private void Start()\n        {\n            \/\/ Model -> View\n            _model.Count.Subscribe(v =>\n                {\n                    \/\/ Slider\n                    _slider.value = ((float)v \/ _model.MaxCount);\n\n                    \/\/ Text\n                    _text.text = $\"{v}%\";\n                })\n                .AddTo(this);\n\n            \/\/ View -> Model\n            _slider.OnValueChangedAsObservable()\n                .Subscribe(x =>\n                {\n                    \/\/ Slider\ub294 0.0~1.0\uc774\ubbc0\ub85c \ubcf4\uc815\n                    \/\/ \uc774\uc640 \uac19\uc740 Model-View\uac04\uc758 \uac12\uc758 \ubc94\uc704 \ubcf4\uc815\ub3c4\n                    \/\/ Presenter\uc758 \ucc45\uc784\n                    var value = (int)(100 * x);\n\n                    \/\/ \ubaa8\ub378\uc5d0 \ubc18\uc601\n                    _model.SetCount(value);\n                })\n                .AddTo(this);\n        }\n    }\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">MV(R)P \ud328\ud134\uc758 \ud754\ud55c \uc9c8\ubb38\uacfc \ub2f5\ubcc0<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">MV(R)P \ud328\ud134\uc774 \uc798 \uc774\ud574\uac00 \uac00\uc9c0 \uc54a\ub294 \ub2e4\ub294 \uc0ac\ub78c\uc774 \ubaa8\uc544\uc900 \uc9c8\ubb38\uacfc \ub2f5\ubcc0\uc744 \uc815\ub9ac\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">MV(R)P \ud328\ud134\uc740 MonoBehaviour\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\ub098\uc694?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">MV(R)P \ud328\ud134\uc740 <strong>MonoBehaviour\uc758 \uc0ac\uc6a9 \uc5ec\ubd80\ub97c \ub9d0\ud558\uace0 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MonoBehaviour\ub294 \ubaa8\ub4e0 \uac1d\uccb4\uc5d0\uc11c \uc0ac\uc6a9\ud574\ub3c4 \uc88b\uace0 \uc4f0\uc9c0 \uc54a\uc544\ub3c4 \ub429\ub2c8\ub2e4. \uc989 <strong>\uc544\ubb34\ub798\ub3c4 \uc88b\uc2b5\ub2c8\ub2e4.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac00\ub054 Model\uc740 Unity\uc5d0 \ube44 \uc758\uc874\ud560 \ud544\uc694\ub77c\uace0 \uc8fc\uc7a5\ud558\ub294 \uc0ac\ub78c\ub3c4 \uc788\uc9c0\ub9cc \uadf8\ub7f0 \uc77c\uc740 \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc6d0\ub798 MV(R)P \ud328\ud134\uc740 \u201cGUI \uad6c\ud604\uc744 \uae68\ub057\ud558\uac8c \ud558\ub294 \uac83\u201d\uc744 \ubaa9\uc801\uc73c\ub85c \uc124\uacc4 \ud55c \ud328\ud134\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c \u201cGUI\ub97c \uae68\ub057\ud558\uac8c \uad6c\ud604\ud560 \uc218 \uc788\ub2e4\uba74 \uc138\ubd80 \uad6c\ud604\uc740 \uc544\ubb34\ub798\ub3c4 \uad1c\ucc2e\ub2e4&#8221; \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \uc561\uc158\uac8c\uc784\uc5d0\uc11c &#8216;\uac8c\uc784 \uc911\uc5d0 \uc874\uc7ac\ud558\ub294 \uce90\ub9ad\ud130\uc758 \uc0c1\ud0dc\ub97c \ud654\uba74\uc5d0 \uadf8\ub9b0\ub2e4&#8217;\ub77c\ub294 \ud328\ud134\uc740 \ube48\ubc88\ud569\ub2c8\ub2e4. \uc774 \uacbd\uc6b0\ub294 \uac8c\uc784 \uc911 \uce90\ub9ad\ud130\ub3c4 GameObject \uc704\uc5d0 \uc62c\ub824 \uc6c0\uc9c1\uc774\ub294 \uacbd\uc6b0\uac00 \ub9ce\uaca0\uc8e0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub54c MV(R)P\ud328\ud134\uc774 \uc774\ub8e8\uace0 \uc2f6\uc740 \uac83\uc740 &#8216;\uce90\ub9ad\ud130\uc758 \uc0c1\ud0dc\ub97c GUI\uc5d0 \ud45c\uc2dc\ud558\uace0 \uc2f6\ub2e4&#8217;\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"550\" height=\"500\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/6.webp\" alt=\"\" class=\"wp-image-1912\"\/><figcaption class=\"wp-element-caption\">(\ud50c\ub808\uc774\uc5b4\uc758 \uccb4\ub825\ubc14\ub97c \uadf8\ub9ac\ub294 \ub4f1 \uc790\uc8fc \ud558\ub294\ub370 \uc774 \ud50c\ub808\uc774\uc5b4\ub294 GameObject\uc796\uc544?)<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\ub9cc\uc57d \uc5ec\uae30\uc11c \u201cModel\uc5d0 MonoBehaviour\ub97c \uc0ac\uc6a9\ud558\uba74 \uc548 \ub41c\ub2e4\u201d\ub77c\ub294 \uc81c\uc57d\uc744 \ucd94\uac00\ud574 \ubc84\ub9ac\uba74 \u201cGUI\uc5d0 \uc815\ubcf4\ub97c \ud45c\uc2dc \ud558\uace0 \uc2f6\uc744 \ubfd0\uc778\ub370 \uce90\ub9ad\ud130\ub97c MonoBehaviour \ube44 \uc758\uc874\uc5d0\uc73c\ub85c \ub2e4\uc2dc \uc124\uacc4 \ud574\uc57c \ud55c\ub2e4\u201d\ub77c\ub294 \uc0c1\ud669\uc774 \ub418\uc5b4 \ubc84\ub9bd\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;\uc774\ub807\uac8c \ud558\uba74 \uc774\uc57c\uae30\uac00 \ub108\ubb34 \ucee4\uc838\uc11c&#8221; &#8220;GUI \uad6c\ud604\uc744 \uae68\ub057\ud558\uac8c \ud558\uace0 \uc2f6\ub2e4&#8221; \ub77c\ub294 \ubaa9\uc801\uc5d0\uc11c \ubc97\uc5b4\ub098 \ubc84\ub9bd\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uba87 \ubc88\uc774\ub098 \ub9d0\ud560\uac8c\uc694. MV(R)P\ud328\ud134\uc758 \ubaa9\uc801\uc740 \u201cGUI \uad6c\ud604\uc744 \uae68\ub057\ud558\uac8c \ud558\ub294 \uac83\u201d\uc774 \ubaa9\uc801\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MonoBehaviour\uc758 \uc720\ubb34\ub098 \ubb34\uc5c7\uc774 \uc720\ub2c8\ud2f0\uc5d0 \uc758\uc874\ud558\uace0\/\ud558\uc9c0 \uc54a\ub294\ub2e4\ub294 \ub17c\uc758\ub294 \ub9d0\ub3c4 \uc548\ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uac01 \uac1d\uccb4\uc758 \ucd08\uae30\ud654 \ubc29\ubc95\uc744 \ubaa8\ub974\uaca0\ub2e4.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Model<\/code>,&nbsp;<code>View<\/code>,&nbsp;<code>Presenter<\/code>\uc774\ub4e4 \ucd08\uae30\ud654\ub294 \uace0\ubbfc\uc758 \ubb38\uc81c\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\ub7ec\uac00\uc9c0 \ubc29\uc2dd\uc740 \uc788\uc9c0\ub9cc, \ucd5c\uc885\uc801\uc73c\ub85c &#8220;<code>Presenter<\/code>\uac00&nbsp;<code>View<\/code>&nbsp;\uc640&nbsp;<code>Model<\/code>\ub97c \ucc38\uc870\ud558\uace0 \uc788\ub2e4&#8221;\ub77c\ub294 \ud615\ud0dc\ub97c \ub9cc\ub4e4 \uc218 \uc788\uc73c\uba74 \ubb50\ub4e0\uc9c0 \uc88b\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc9c0\uae08 \ub5a0\uc624\ub974\ub294 \ud55c\uc5d0\uc11c 3\uac1c\uc758 \ud328\ud134 \uc815\ub3c4 \uc788\uc73c\ub2c8 \ucc38\uace0\ud558\uc138\uc694.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ucd08\uae30\ud654 \ubc29\ubc95 A: \uc778\uc2a4\ud399\ud130 \uc708\ub3c4\uc6b0 \ud654\uba74 \uc704\uc5d0\uc11c \uc778\uc2a4\ud399\ud130\uc5d0 \ud560\ub2f9<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Model, View, Presenter\uac00 \ubaa8\ub450 \ucc98\uc74c\ubd80\ud130 \uc7a5\uba74\uc5d0 \ubc30\uce58\ub418\uc5b4 \uc788\ub294 \uacbd\uc6b0\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud328\ud134\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub3d9\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uac70\ub098 \uc0ad\uc81c\ub418\ub294 \uc77c\uc774 \uc5c6\ub2e4\uba74 \uc720\ub2c8\ud2f0 \uc778\uc2a4\ud399\ud130 \uc708\ub3c4\uc6b0\uc0c1\uc5d0\uc11c \ucc98\uc74c\ubd80\ud130 \uc5f0\uacb0\ud574 \ub450\uba74 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/7.webp\" alt=\"\" class=\"wp-image-1913\" width=\"640\" height=\"191\"\/><figcaption class=\"wp-element-caption\">(\uc778\uc2a4\ud399\ud130\uc0c1\uc5d0\uc11c\u00a0<code>Presenter<\/code>\uc5d0 \ubbf8\ub9ac \ubb36\uc5b4 \ub450\ub294 \uac83\uc774 \uac00\uc7a5 \uac04\ub2e8)<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\ucd08\uae30\ud654 \ubc29\ubc95 B: DIContainer\ub97c \uc0ac\uc6a9<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc29\ubc95A\uc640 \ubcc4\ub85c \ub2e4\ub974\uc9c0 \uc54a\uc9c0\ub9cc \ub3d9\uc801\uc73c\ub85c \uc624\ube0c\uc81d\ud2b8\uac00 \uc0dd\uc131\/\uc0ad\uc81c\ub418\uc9c0 \uc54a\ub294\ub2e4\uba74 DIContainer(Zenject\ub098 VContainer)\ub97c \ud1b5\ud574 \uc624\ube0c\uc81d\ud2b8\ub97c Presenter\uc5d0\uac8c \uc804\ub2ec\ud574 \ubc84\ub9ac\ub294 \ubc29\ubc95\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ucd08\uae30\ud654 \ubc29\ubc95 C: \ub3d9\uc801\uc73c\ub85c \ubc14\uc778\ub529 \ud55c\ub2e4.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\uac83\uc774 \uac00\uc7a5 \uae4c\ub2e4\ub85c\uc6b4 \ud328\ud134\uc785\ub2c8\ub2e4. \ubaa8\ub378\uc774 \ub098\uc911\uc5d0 \ub3d9\uc801\uc73c\ub85c \ucd94\uac00\ub418\uac70\ub098 \uc0ad\uc81c\ub418\ub294 \uac83\uc744 \uc5b4\ub5bb\uac8c \ub2e4\ub8e8\ub294\uac00\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc81c\uac00 \uc790\uc8fc \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc740 \ubcc4\ub3c4&nbsp;<code>Dispatcher<\/code>\ub77c\ub294 \uac1d\uccb4\ub97c \ubc30\uce58\ud558\uace0 \uadf8\uac83\uc774&nbsp;<code>Model<\/code>\uc758 \uc0dd\uc131\/\uc0ad\uc81c\uc758 \uc774\ubca4\ud2b8\ub97c \uad6c\ub3c5\ud558\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc740 \uac83\uc744 \uc0dd\uac01\ud574 \ubd05\uc2dc\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Player \uccb4\ub825 \ubc14 \ud45c\uc2dc<\/li>\n\n\n\n<li>Player\ub294 \ub3d9\uc801\uc73c\ub85c \ub098\uc911\uc5d0 \ub298\uc5b4\ub09c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7f0 \uc0c1\ud669\uc744, Dispatcher\ub97c \uc0ac\uc6a9\ud558\uace0 \uad6c\ud604\ud574 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Model<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">(\uc704\uc758 Player\uc640 \ub9c8\ucc2c\uac00\uc9c0 \ucf54\ub4dc)<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using System;\nusing UniRx;\nusing UnityEngine;\n\nnamespace MVRP.Models\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ \uc561\uc158 \uac8c\uc784\uc758 \ud50c\ub808\uc774\uc5b4\n    \/\/\/ \u300c\ud654\uba74\uc5d0 \uccb4\ub825\uc744 \ub098\ud0c0\ub0b8\ub2e4\u300d\ub77c\uace0 \ud558\ub294 \uad00\uc810\uc5d0\uc11c \ubcf4\uba74 Model\n    \/\/\/ &lt;\/summary>\n    public sealed class Player : MonoBehaviour\n    {\n        \/\/\/ &lt;summary>\n        \/\/\/ \uccb4\ub825\n        \/\/\/ ReactiveProperty\ub85c \uc678\ubd80\uc5d0 \uc0c1\ud0dc\ub97c ReadOnly\ub85c \uacf5\uac1c\n        \/\/\/ &lt;\/summary>\n        public IReadOnlyReactiveProperty&lt;int> Health => _health;\n\n        \/\/ \uccb4\ub825 \ucd5c\ub300\uce58\n        public readonly int MaxHealth = 100;\n\n        private readonly IntReactiveProperty _health = new IntReactiveProperty(100);\n\n\n        private void Start()\n        {\n            _health.Value = MaxHealth;\n        }\n\n        \/\/\/ &lt;summary>\n        \/\/\/ \ucda9\ub3cc \uc774\ubca4\ud2b8\n        \/\/\/ &lt;\/summary>\n        private void OnCollisionEnter(Collision collision)\n        {\n            \/\/ Enemy\uc640 \ucda9\ub3cc \uc2dc \uccb4\ub825 \uac10\uc18c\n            if (collision.gameObject.TryGetComponent&lt;Enemy>(out var _))\n            {\n                _health.Value -= 10;\n            }\n        }\n\n        private void OnDestroy()\n        {\n            _health.Dispose();\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Model\uc744 \ub3d9\uc801\uc73c\ub85c \uc0dd\uc131\ud558\ub294 Manager<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Player\ub97c \ub3d9\uc801\uc73c\ub85c \uc0dd\uc131\ud558\ub294 Manager\uac00 \uc788\uace0 Player \uc0dd\uc131 \uc774\ubca4\ud2b8\ub97c \ubc1c\ud589\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using System;\nusing Cysharp.Threading.Tasks;\nusing UniRx;\nusing UnityEngine;\nusing Random = UnityEngine.Random;\n\nnamespace MVRP.Models\n{\n    public sealed class PlayerManager : MonoBehaviour\n    {\n        \/\/\/ &lt;summary>\n        \/\/\/ \ud50c\ub808\uc774\uc5b4 \ubaa9\ub85d\n        \/\/\/ ReactiveCollection\uc73c\ub85c \uc778\ud574 \ud50c\ub808\uc774\uc5b4 \uc218\uac00 \uc99d\uac00\ud558\uba74 \uc54c\ub9bc\n        \/\/\/ &lt;\/summary>\n        public IReactiveCollection&lt;Player> Players => _players;\n\n        private readonly ReactiveCollection&lt;Player> _players = new ReactiveCollection&lt;Player>();\n\n        \/\/ Player\uc758 Prefab\n        [SerializeField] private Player _playerPrefab;\n\n        private async UniTaskVoid Start()\n        {\n            \/\/ \ucd08\uae30\ud654 \ucc98\ub9ac\n            \/\/ Player\ub97c \uc2dc\uac04\ucc28\ub85c 4\uac1c \uc0dd\uc131\n\n            await UniTask.Delay(TimeSpan.FromSeconds(1));\n            _players.Add(CreatePlayer(1));\n\n            await UniTask.Delay(TimeSpan.FromSeconds(1));\n            _players.Add(CreatePlayer(2));\n\n            await UniTask.Delay(TimeSpan.FromSeconds(1));\n            _players.Add(CreatePlayer(3));\n\n            await UniTask.Delay(TimeSpan.FromSeconds(1));\n            _players.Add(CreatePlayer(4));\n        }\n\n        private Player CreatePlayer(int id)\n        {\n            \/\/ Player \uc0dd\uc131\n            var player = Instantiate(_playerPrefab, Vector3.right * Random.Range(1f, 2f), Quaternion.identity);\n            player.name = $\"Player{id}\";\n            return player;\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Presenter<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Presenter\ub294 \uc778\uc218\ub85c \ubc16\uc5d0\uc11c Player\uc640 View\uc758 \uc870\ud569\uc744 \ubc1b\uc544 \ubc14\uc778\ub529\ud560 \uc218 \uc788\ub3c4\ub85d \ud574 \ub461\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ubc88\uc5d0\ub294 \ub2e8\uc77c Presenter\ub85c \ubcf5\uc218\uc758 Player\uc640 View\ub97c \ub2e4\ub8e8\uac8c \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using MVRP.Models;\nusing MVRP.Views;\nusing UniRx;\nusing UnityEngine;\n\nnamespace MVRP.Presenters\n{\n    \/\/ Player\uc758 Presenter\n    public sealed class PlayerPresenter : MonoBehaviour\n    {\n        \/\/ Player\uac00 \uc0dd\uc131\ub418\uba74 Bind\n        public void OnCreatePlayer(Player player, PlayerView view)\n        {\n            view.SetName(player.name);\n\n            \/\/ Player\uc758 Health \ubaa8\ub2c8\ud130\ub9c1\n            player.Health\n                .Subscribe(x =>\n                {\n                    \/\/ View\uc5d0 \ubc18\uc601\n                    view.SetHealth((float)x \/ player.MaxHealth);\n                }).AddTo(this);\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">View<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ubc88\uc5d0\ub294 View\ub85c &#8216;\uc774\ub984\ud45c\uc2dc\uacf5\uac04&#8217;\uacfc &#8216;\uccb4\ub825\ubc14&#8217;\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 UI\ub97c \ub2e4\ub8e8\ub294 Canvas\uc640 \uac01 \uc694\uc18c\ub97c \uc81c\uc5b4\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc900\ube44\ud574 Prefab\ud654\ud574 \ub461\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using DG.Tweening;\nusing UnityEngine;\nusing UnityEngine.UI;\n\nnamespace MVRP.Views\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ Player \uc0c1\ud0dc \ud45c\uc2dc View\n    \/\/\/ &lt;\/summary>\n    public sealed class PlayerView : MonoBehaviour\n    {\n        [SerializeField] private Text _nameplate;\n        [SerializeField] private Slider _healthSlider;\n\n        public void SetName(string name)\n        {\n            _nameplate.text = name;\n        }\n\n        public void SetHealth(float value)\n        {\n            \/\/ \uc560\ub2c8\uba54\uc774\uc158\ud558\ub294 \ub3d9\uc548 \uc2ac\ub77c\uc774\ub354\ub97c \uc6c0\uc9c1\uc785\ub2c8\ub2e4.\n            DOTween.To(() => _healthSlider.value,\n                n => _healthSlider.value = n,\n                value,\n                duration: 1.0f);\n        }\n    }\n}<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/8.webp\" alt=\"\" class=\"wp-image-1914\" width=\"700\" height=\"246\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Dispatcher<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">PlayerManager \uc774\ubca4\ud2b8\ub97c \uac10\uc9c0\ud558\uace0 View\ub97c \uc0dd\uc131\ud558\uace0 Presenter\uc5d0 \ubc14\uc778\ub529\ud558\ub294 Dispatcher\ub97c \uc900\ube44\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ubc88\uc5d0\ub294 \uc774 Dispatcher\ub97c \uc7a5\uba74\uc5d0 \ubbf8\ub9ac \ubc30\uce58\ud558\uace0 \uc788\ub294\ub370 DIContainer\ub4f1\uc744 \uc0ac\uc6a9\ud574\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using MVRP.Models;\nusing MVRP.Presenters;\nusing MVRP.Views;\nusing UniRx;\nusing UnityEngine;\n\nnamespace MVRP.Dispatchers\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ Player \uc0dd\uc131\uc744 \uac10\uc9c0\ud558\uace0 View \ud560\ub2f9\n    \/\/\/ &lt;\/summary>\n    public sealed class PlayerDispatcher : MonoBehaviour\n    {\n        \/\/ Model\uc744 \uc81c\uacf5\ud558\ub294 Manager\n        [SerializeField] private PlayerManager _playerManager;\n\n        \/\/ Player\uc758 Presenter\n        [SerializeField] private PlayerPresenter _presenter;\n\n        \/\/ View\uc758 Prefab\n        [SerializeField] private PlayerView _viewPrefab;\n\n        private void Start()\n        {\n            \/\/ \uc9c0\uae08 \ubaa9\ub85d\uc5d0 \uc788\ub294 Player\uc744 Dispatch\n            foreach (var p in _playerManager.Players)\n            {\n                Dispatch(p);\n            }\n\n            \/\/ \uc774\ud6c4 \uc2e0\uaddc \uc791\uc131\ub41c \uac83\uc744 Dispatch\n            _playerManager.Players.ObserveAdd().Subscribe(x => Dispatch(x.Value)).AddTo(this);\n        }\n\n        private void Dispatch(Player player)\n        {\n            \/\/ Player\uc758 \uc790\uc2dd \uc694\uc18c\ub85c View \ub9cc\ub4e4\uae30\n            var view = Instantiate(_viewPrefab, player.transform, true);\n\n            \/\/ \uc704\uce58 \uc870\uc815\n            view.transform.localPosition = Vector3.up * 1.5f;\n\n            \/\/ Presenter\uc640 \uacb0\ud569\ud558\uc5ec \uc54c\ub9bc\n            _presenter.OnCreatePlayer(player, view);\n        }\n    }\n}<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/9-1.webp\" alt=\"\" class=\"wp-image-1916\" width=\"700\" height=\"225\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ubc88\uc5d0\ub294 Presenter\ub97c \ubbf8\ub9ac \uc7a5\uba74\uc5d0 \ubc30\uce58\ud558\uace0 \uc788\uc9c0\ub9cc, Presenter\ub3c4 \ub610\ud55c prefab\ub85c \ub9cc\ub4e4\uc5b4 \ubc84\ub824\uc11c \ub54c\ub9c8\ub2e4 \uc0dd\uc131\ud558\ub294 \ud615\ud0dc\ub85c \ud574\ub3c4 \ubb38\uc81c \uc5c6\uc2b5\ub2c8\ub2e4(\uc5b4\ub5a4 \ubc29\ubc95\uc744 \uc0ac\uc6a9\ud574\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4)<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><a href=\"https:\/\/qiita.com\/toRisouP\/items\/5365936fc14c7e7eabf9#%E5%8B%95%E4%BD%9C%E3%81%AE%E6%A7%98%E5%AD%90\"><\/a>\ub3d9\uc791\uc758 \ubaa8\uc2b5<\/h4>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/3.webp\" alt=\"\" class=\"wp-image-1917\" width=\"700\" height=\"333\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(&nbsp;<code>Player<\/code>\uc774 \ub3d9\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uc5b4\ub3c4 \uccb4\ub825 \ubc14\uac00 \uac01\uac01 \ud45c\uc2dc\ub418\uace0 \uac01\uac01\uc758 \uccb4\ub825\uc774 \ubc18\uc601\ub429\ub2c8\ub2e4)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Presenter\ub97c \uc5b4\ub514\uc5d0 \ub450\uba74 \ub420\uae4c\uc694?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Presenter\ub97c \uc7a5\uba74\uc758 \uc5b4\ub514\uc5d0 \ubc30\uce58\ud560 \uac83\uc778\uac00. \uc544\ub2c8\uba74 MonoBehaviour\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uace0 \ud4e8\uc5b4 \ud074\ub798\uc2a4\ub85c DIContainer\uc5d0 \uad00\ub9ac\ud574\uc57c \ud558\ub294\uac00. \ub77c\ub294 \uc9c8\ubb38\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ub2f5\uc740 \uc790\uc720\ub86d\uac8c \ud574\ub3c4 \ub41c\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uad00\ub9ac\ud560 \uc218 \uc788\ub2e4\uba74 \uc5b4\ub514\uc5d0 Presenter\ub97c \ubc30\uce58\ud574\ub3c4 \ub429\ub2c8\ub2e4. uGUI\uc758 \uce94\ubc84\uc2a4\uc758 \uac8c\uc784 \uc624\ube0c\uc81d\ud2b8\uc5d0 Presenter\ub97c \ubd99\uc5ec\ub3c4 \ub418\uace0, \ube48 \uac8c\uc784 \uc624\ube0c\uc81d\ud2b8\ub97c \ub9cc\ub4e4\uc5b4 \uac70\uae30\uc5d0 \ubd99\uc5ec\ub3c4 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc790\uc2e0\uc774 \uad00\ub9ac\ub9cc \ud560 \uc218 \uc788\ub2e4\uba74 \uc5b4\ub514\uc5d0 \uc5b4\ub5bb\uac8c \ub193\uc544\ub3c4 \uc88b\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Presenter\uc640 View\uc758 \uaddc\ubaa8\uac10\uc744 \ubaa8\ub974\uaca0\uc2b5\ub2c8\ub2e4.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\uac83\uc740 \u201c\ud558\ub098\uc758 Presenter\uac00 \ubcf5\uc218\uc758 View\ub97c \uad00\ub9ac\ud574\ub3c4 \ub418\ub294\uac00?\u201d, \u201cView \ub0b4\ubd80\uc5d0\uc11c \uc0c1\ud0dc\ub97c \uac00\uc9c0\uace0 \uc788\uc5b4\ub3c4 \ub418\ub294\uac00?\u201d\ub77c\ub294 \uc9c8\ubb38\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Presenter\uc758 \uaddc\ubaa8\uac10<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;1\uac1c\uc758 Presenter\uac00 \uc5b4\ub5bb\uac8c View\ub97c \uad00\ub9ac\ud558\ub290\ub0d0\uc778\ub370 \uc774\uac83\uc758 \ub2f5\uc740 &#8220;\uc790\uc2e0\uc774 \uad00\ub9ac\ud560 \uc218 \uc788\ub2e4\uba74 \uc790\uc720\ub86d\uac8c \ud574\ub3c4 \ub41c\ub2e4&#8221; \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1\uac1c\uc758 \uac8c\uc784 \uc624\ube0c\uc81d\ud2b8\uc5d0 1\uac1c\uc758 Presenter\ub9cc \ud560\ub2f9\ud558\ub294 \ubc29\ubc95<\/li>\n\n\n\n<li>1\uac1c\uc758 \uac8c\uc784 \uc624\ube0c\uc81d\ud2b8\uc5d0 \ubcf5\uc218\uc758 Presenter\ub97c \ud560\ub2f9\ud558\ub294 \ubc29\ubc95<\/li>\n\n\n\n<li>1\uac1c\uc758 Presenter\ub85c \ubcf5\uc218\uc758 \ubaa8\ub378\uc774\ub098 \ubdf0\ub97c \ud560\ub2f9\ud558\ub294 \ubc29\ubc95<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"507\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/6-1024x507.jpg\" alt=\"\" class=\"wp-image-1922\" srcset=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/6-1024x507.jpg 1024w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/6-300x149.jpg 300w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/6-768x380.jpg 768w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/6-1200x594.jpg 1200w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/6.jpg 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"498\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/7-1024x498.jpg\" alt=\"\" class=\"wp-image-1923\" srcset=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/7-1024x498.jpg 1024w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/7-300x146.jpg 300w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/7-768x374.jpg 768w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/7-1200x584.jpg 1200w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/7.jpg 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"494\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/8-1024x494.jpg\" alt=\"\" class=\"wp-image-1924\" srcset=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/8-1024x494.jpg 1024w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/8-300x145.jpg 300w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/8-768x371.jpg 768w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/8-1200x579.jpg 1200w, http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/8.jpg 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(\uc5b4\ub5bb\uac8c \ud574\ub3c4 \ubb34\ubc29\ud558\ub2e4.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uba87 \uac00\uc9c0 \ud328\ud134\uc740 \ub4e4 \uc218 \uc788\uc9c0\ub9cc \uc5b4\ub5a4 \uac83\uc744 \uc0ac\uc6a9\ud574\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">View\uc758 \uaddc\ubaa8\uac10<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;View \ub0b4\ubd80\uc5d0\uc11c \uc0c1\ud0dc\ub97c \uac00\uc838\ub3c4 \ub418\ub294\uac00\u201d, \u201cView\ub97c \uad00\ub9ac\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub3c4 View\ub85c \ucde8\uae09\ud574\ub3c4 \ub418\ub294\uc9c0\u201d\uc774\uc9c0\ub9cc<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">View \uc790\uc2e0\uc774 \uc0c1\ud0dc\ub97c \uac00\uc9c0\uace0 View\uac00 \uc790\uae30 \uc790\uc2e0\uc744 \uad00\ub9ac\ud558\ub294 \uac83\uc740 MV(R)P\ud328\ud134\uc801\uc73c\ub85c\ub294 \ubb38\uc81c\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc740 \u201cRGB\uc758 \uc0bc\uc0c9 \uc2ac\ub77c\uc774\ub354\u201d\uac00 \uc788\ub2e4\uace0 \ud569\uc2dc\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"648\" height=\"323\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/4.webp\" alt=\"\" class=\"wp-image-1926\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc5d0\ub294 \u201c3\uac1c\uc758 \uc2ac\ub77c\uc774\ub354\ub97c \uad00\ub9ac\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\u201d\uac00 \ubd80\ucc29\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using UniRx;\nusing UnityEngine;\nusing UnityEngine.UI;\n\nnamespace MVRP.Views\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ RGB \uc2ac\ub77c\uc774\ub354\ub97c \uad00\ub9ac\ud558\ub294 \ubdf0 \ucef4\ud3ec\ub10c\ud2b8\n    \/\/\/ &lt;\/summary>\n    public sealed class ColorSlider : MonoBehaviour\n    {\n        \/\/\/ &lt;summary>\n        \/\/\/ \uc9c0\uae08\uc758 \uc2ac\ub77c\uc774\ub354\uac00 \uac00\ub9ac\ud0a4\ub294 \uc0c9\n        \/\/\/ &lt;\/summary>\n        public readonly ColorReactiveProperty Color\n            = new ColorReactiveProperty(UnityEngine.Color.white);\n\n        [SerializeField] private Slider _red;\n        [SerializeField] private Slider _green;\n        [SerializeField] private Slider _blue;\n\n        private void Start()\n        {\n            Color.Subscribe(c =>\n                {\n                    _red.value = c.r;\n                    _green.value = c.g;\n                    _blue.value = c.b;\n                })\n                .AddTo(this);\n\n            \/\/ \uc2ac\ub77c\uc774\ub354\uac00 \uc5b4\ub290 \ud558\ub098\ub77c\ub3c4 \ubcc0\ud654\ud558\uba74 \ubc18\uc601\n            Observable.Merge(\n                    _red.OnValueChangedAsObservable(),\n                    _green.OnValueChangedAsObservable(),\n                    _blue.OnValueChangedAsObservable())\n                .Subscribe(_ =>\n                {\n                    Color.Value = new Color(_red.value, _green.value, _blue.value);\n                })\n                .AddTo(this);\n        }\n    }\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using MVRP.Models;\nusing MVRP.Views;\nusing UniRx;\nusing UnityEngine;\nusing UnityEngine.UI;\n\nnamespace MVRP.Presenters\n{\n    \/\/ Presenter\n    public class ColorPresenter : MonoBehaviour\n    {\n        [SerializeField] private ColorModel _model;\n        [SerializeField] private ColorSlider _colorSlider;\n        [SerializeField] private Text _text;\n\n        private void Start()\n        {\n            \/\/ Model -> View\n            _model.Color.Subscribe(x =>\n                {\n                    _text.text = x.ToString();\n                    _text.color = x;\n\n                    _colorSlider.Color.Value = x;\n                })\n                .AddTo(this);\n\n            \/\/ View -> Model\n            _colorSlider.Color.Subscribe(x =>\n                {\n                    _model.Color.Value = x;\n                })\n                .AddTo(this);\n        }\n    }\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using UniRx;\nusing UnityEngine;\n\nnamespace MVRP.Models\n{\n    \/\/ Model\n    public class ColorModel : MonoBehaviour\n    {\n        public readonly ColorReactiveProperty Color\n            = new ColorReactiveProperty();\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\uc774 \uac12\uc740 View\ub098 Model \uc911 \uc5b4\ub290 \ucabd\uc774 \uac00\uc838\uc57c \ud560 \uc0c1\ud0dc\uc778\uac00\uc694?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uc9c8\ubb38\uc740 \uc608\ucee8\ub300 &#8220;\ud074\ub9ad\ub418\uba74 \uc0c9\uc774 \ubcc0\uacbd\ub418\ub294 \ubc84\ud2bc\uc774 \uc788\uc744 \ub54c \uc774 &#8220;\uc0c9&#8221; \uc758 \uc815\ubcf4\ub294&nbsp;<code>View<\/code>\uc640&nbsp;<code>Model<\/code>\uc5b4\ub290 \ucabd\uc774 \uac00\uc9c0\ub294 \uac83\uc785\ub2c8\uae4c?&#8221; \uac19\uc740 \uc9c8\ubb38\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"385\" height=\"323\" src=\"http:\/\/yoonhada.com\/wp-content\/uploads\/2023\/02\/5.webp\" alt=\"\" class=\"wp-image-1928\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2f5\uc740 \u201c**\uadf8 \uc0c9 \uc815\ubcf4\uac00 \uac8c\uc784\uc758 \ub3c4\uba54\uc778 \uc694\uc18c\uc5d0 \ud574\ub2f9\ud558\ub294\uc9c0 \uc544\ub2cc\uc9c0\u201d**\ub85c \uacb0\uc815\ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(&#8216;\ub3c4\uba54\uc778&#8217;\uc774\ub780 &#8216;\uac8c\uc784\uc758 \ud575\uc2ec \uc694\uc18c&#8217;\uc640 \uac19\uc740 \uc758\ubbf8\ub77c\uace0 \uc0dd\uac01\ud574 \uc8fc\uc138\uc694)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8 &#8216;\uc0c9 \uc815\ubcf4\u201d\uac00 \uac8c\uc784 \uc131\ub9bd\uc5d0 \ud544\uc218\ubd88\uac00\uacb0\ud55c \uc694\uc18c\ub77c\uba74 \uadf8\uac83\uc740 Model\uc5d0\uc11c \uad00\ub9ac\ud574\uc57c \ub420 \uc815\ubcf4\uac00 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud55c\ud3b8 \uac8c\uc784\uc758 \uc131\ub9bd\uc5d0 \uc9c1\uc811 \uad00\uacc4\uc5c6\uc774 \uc5b4\ub514\uae4c\uc9c0\ub098 \uc5f0\ucd9c\uc758 \ubaa9\uc801\uc73c\ub85c \ubc84\ud2bc\uc758 \uc0c9\uc744 \ubc14\uafb8\ub294 \uc815\ub3c4\ub77c\uba74 \uadf8\uac83\uc740 View\uc5d0\uc11c \uad00\ub9ac\ud560 \uc815\ubcf4\uac00 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \u201c3\uc0c9 \ub9ac\ubc84\uc2dc\u201d \ub4f1\uc740 \uc0c9\uc815\ubcf4\uac00 \uac8c\uc784 \uc131\ub9bd\uc5d0 \uc808\ub300 \ud544\uc218\uc801\uc778 \uc694\uc18c\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 3\uc0c9 \ub9ac\ubc84\uc2dc\ub97c MV(R)P\ud328\ud134\uc73c\ub85c \uad6c\ucd95\ud55c\ub2e4\uba74 \u201c\uc0c9\uc0c1 \uc815\ubcf4\ub294 Model\uc774 \uad00\ub9ac\ud574\uc57c \ud55c\ub2e4\u201d\uac00 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>3\uc0c9 \ub9ac\ubc84\uc2dc = 3\uc0c9 \uc624\uc140\ub85c \uc0c9\uc73c\ub85c \uc0c1\ub300\ubc29\uc744 \uad6c\ubcc4\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;\ud55c\ud3b8\uc73c\ub85c &#8220;\uc880 \ubcf4\uae30\uc5d0 \ud48d\ubd80\ud55c \ud1a0\uae00 \ubc84\ud2bc&#8221;\uc774\ub77c\ub294 \ucde8\uae09\uc774\ub77c\uba74 \uc774\uac83\uc740 \ub2e8\uc9c0 \uc5f0\ucd9c\uc77c \ubfd0\uc774\uace0, \ucd5c\uc545\uc758 \uacbd\uc6b0 \ubc84\ud2bc \uc0c9\uc758 \ubcc0\ud654\uac00 \uc5c6\uc5b4\ub3c4 \uac8c\uc784\uc73c\ub85c\uc11c \uc131\ub9bd\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7f0 \uacbd\uc6b0\ub294 View\ub85c \uad00\ub9ac\ud574\uc57c \ub41c\ub2e4\uace0 \uc0dd\uac01 \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Model \uc694\uc18c\uac00 \ub418\ub294 \uacbd\uc6b0<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uadf8 \uc815\ubcf4(\ub370\uc774\ud130)\uac00 \uac8c\uc784\uc758 \uc131\ub9bd\uc5d0 \ud544\uc218 \ubd88\uac00\uacb0\ud558\ub2e4.\n<ul class=\"wp-block-list\">\n<li>\uac8c\uc784\uc758 \uc9c4\ud589\uc774\ub098 \uc0c1\ud0dc \uad00\ub9ac\uc5d0 \ud544\uc218\uc801\uc774\ub2e4<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>View \uc694\uc18c\uac00 \ub418\ub294 \uacbd\uc6b0<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uadf8 \uc815\ubcf4(\ub370\uc774\ud130)\uac00 \uc5c6\uc5b4\ub3c4 \uac8c\uc784\uc73c\ub85c\uc11c \uc131\ub9bd\ub41c\ub2e4.\n<ul class=\"wp-block-list\">\n<li>\uc788\ub2e4\uba74 \uc5f0\ucd9c \uc801\uc778 \uc694\uc18c\uac00 \uac00\ubbf8 \ub418\uaca0\uc9c0\ub9cc \ucd5c\uc545\uc758 \uacbd\uc6b0 \uc5c6\uc5b4\ub3c4 \uad1c\ucc2e\uc740 \uc815\ub3c4.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">View\u2192Presenter\u2192Model\u2192Presenter\u2192View\ub77c\ub294 \uac12\uc774 \ub8e8\ud504 \ud558\uc9c0 \uc54a\ub098\uc694?<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>View \ubcc0\ud654\ub97c \uac80\uc0ac\ud558\uace0 Presenter\uac00 Model\uc5d0 \ubc18\uc601<\/li>\n\n\n\n<li>Model\uc758 \uc0c1\ud0dc\uac00 \ubcc0\ud55c\ub2e4<\/li>\n\n\n\n<li>Model\uc758 \uc0c1\ud0dc\uac00 \ubcc0\ud654\ud558\ub294 \uac83\uc744 \uac10\uc9c0\ud558\uace0 Presenter\uac00 View\uc5d0 \ubc18\uc601<\/li>\n\n\n\n<li>View\uc758 \uc0c1\ud0dc\uac00 \ubcc0\ud55c\ub2e4<\/li>\n\n\n\n<li>View \ubcc0\ud654\ub97c \uac10\uc9c0\ud558\uace0 Presenter\uac00 Model\uc5d0 \ubc18\uc601<\/li>\n\n\n\n<li>(\uc774\ud558 \ubb34\ud55c \ub8e8\ud504)<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\ub77c\ub294 \ud604\uc0c1\uc774 \uc77c\uc5b4\ub098\uc9c0 \uc54a\ub290\ub0d0\ub294 \uc9c8\ubb38\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2f5\uc740 \u201cReactiveProperty\u201d\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\uc5d0 \ub300\ud574\uc11c\ub294 \ub8e8\ud504 \ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ReactiveProperty\ub294 \u201c\uc9c1\uc804\uacfc \uac19\uc740 \uac12\uc774 \uc624\ub294 \uacbd\uc6b0 \uc774\ubca4\ud2b8\ub97c \ubc1c\ud589\ud558\uc9c0 \uc54a\ub294\u201d \uad6c\uc870\ub85c \ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c \uc774\ubca4\ud2b8\uac00 1\ubc88\uc740 \uc640\ub3c4 2\ubc88\uc9f8 \ub8e8\ud504\uc5d0\uc11c\ub294 \uc2e4\ud589\ub418\uc9c0 \uc54a\ub3c4\ub85d \ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub9cc ReactiveProperty.SetValueAndForceNotify()\ub97c \uc4f0\ub294 \uacbd\uc6b0\uc5d0\ub294 \uac15\uc81c \uba54\uc2dc\uc9c0 \ubc1c\ud589\uc774 \uc2e4\ud589 \ub418\uae30 \ub54c\ubb38\uc5d0 \ubb34\ud55c \ub8e8\ud504\ub97c \uc77c\uc73c\ud0ac \uac00\ub2a5\uc131\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Model\/View\/Presenter\ub9c8\ub2e4 Assembly Definition Files\ub97c \ub098\ub204\ub294\uac8c \uc88b\ub098\uc694?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2f5\uc740 \u201c\ub9c8\uc74c\ub300\ub85c \ud558\uc138\uc694&#8221; \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5c4\uaca9\ud558\uac8c \ud558\uc5ec \ub098\ub204\uc5b4\ub3c4 \uc88b\uace0, \uadc0\ucc2e\uc544\uc11c \ub098\ub204\uc9c0 \uc54a\uc544\ub3c4 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubd80\ubd84\uc740 \uc815\ub9d0 \ub9c8\uc74c\ub300\ub85c \ud574\ub3c4 \ubb38\uc81c \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc758\uc874 \uad00\uacc4 \uc5ed\uc804\uc758 \ubc95\uce59\uc744 \uc0ac\uc6a9\ud558\uace0 \uc758\uc874 \uad00\uacc4\ub97c View \u2192 Presenter \u2192 Model\ub85c \ud558\ub294\uac8c \uc88b\uc744\uae4c\uc694?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc38\uc870 \uad00\uacc4\ub294 view \u2190 Presenter \u2192 Model \uc774\uc9c0\ub9cc \ubaa8\ub4c8\ub85c\uc11c\uc758 \uc758\uc874 \uad00\uacc4\ub294 View \u2192 Presenter \u2192 Model\uc774 \ub418\ub294 \uac74\uac00\uc694? \ub77c\ub294 \uc9c8\ubb38\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc758\ubbf8\ub97c \ubaa8\ub974\ub294 \ubd84\ub4e4\uc740 \uc544\ub798 \uc2ac\ub77c\uc774\ub4dc\ub97c \ucc38\uace0\ud558\uc138\uc694.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/speakerdeck.com\/torisoup\/unityniokerushe-ji-patan?slide=56\">Unity\uc5d0 \uc788\uc5b4\uc11c\uc758 \uc124\uac8c \ud328\ud134(56\ucabd)<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uacb0\ub860\uc740 \u201c\ubcf5\uc7a1\ud558\uac8c \ub418\ubbc0\ub85c \ud560 \ud544\uc694\ub294 \uc5c6\ub2e4\u201d\uace0 \ub098\ub294 \uc0dd\uac01\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5c4\ubc00\ud558\uac8c \ud558\uace0 \uc2f6\uc73c\uba74 \ud574\ub3c4 \ub418\ub294\ub370 \uc218\uace0\uc5d0 \ube44\ud574 \uc774\ub4dd\uc774 \ub9ce\uc9c0 \uc54a\uc744 \uac81\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">MVP \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74 Unity \ube44 \uc758\uc874\uc5d0\uc11c \uae68\ub057\ud558\uac8c \ub9cc\ub4e4 \uc218 \uc788\ub2e4\uace0 \ub4e4\uc5c8\uc2b5\ub2c8\ub2e4.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2f5\uc740 <strong>\u201c\ubabb\ud560 \uac83\uc740 \uc5c6\uc73c\ub098 \uadf8 \uc774\uc804\uc5d0 \uc0dd\uac01\ud560 \uc77c\uc774 \ub9ce\ub2e4\u201d<\/strong> \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MVP \ud328\ud134(MV(R)P\ud328\ud134)\uc740 \uc6d0\ub798 GUI\uc6a9 \uc124\uacc4 \ud328\ud134\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">View(GUI)\ub97c \uc5b4\ub5bb\uac8c \uad00\ub9ac\ud558\uba74 \uae68\ub057\ud558\uac8c \uad6c\ud604\ud560 \uc218 \uc788\ub290\ub0d0\ub294 \uc598\uae30\uc600\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub7ec\ub098 \uc774 View\ub77c\ub294 \uac1c\ub150\uc744 \ud655\ub300 \ud574\uc11d\ud558\uace0 View(Unity)\uc640 Model(Unity \ube44\uc758\uc874)\uc744 \ub098\ub204\uc5b4 \uc608\uc058\uac8c \ub9cc\ub4e4\uae30 \uc704\ud55c \uc124\uacc4 \ud328\ud134\uc774\ub77c\uace0 \ucc29\uac01 \ud558\uace0 \uc788\ub294 \uc0ac\ub78c\uc774 \uac00\ub054 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MVP \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74 GameObject\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uace0 \uac8c\uc784 \ub85c\uc9c1\uc774 \uc124\uacc4 \uac00\ub2a5<\/li>\n\n\n\n<li>MVP \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74 \uc561\uc158 \uac8c\uc784\uc744 \uae68\ub057\ud558\uac8c \ub9cc\ub4e4 \uc218 \uc788\ub2e4<\/li>\n\n\n\n<li>MVP \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74 \uc124\uacc4\uac00 \ubaa8\ub450 \uc544\ub984\ub2e4\uc6cc\uc9c4\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub4e4\uc740 \ubaa8\ub450 <strong>MVP \ud328\ud134\uc5d0 \uc9c0\ub098\uce58\uac8c \uae30\ub300\ud558\uc5ec<\/strong> \ub9cc\ub4e4\uc5b4\uc9c4 \uc774\uc57c\uae30 \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\uc2dc \ub9d0\ud558\uc9c0\ub9cc \u201cMVP \ud328\ud134\uc774 \ub9d0\ud558\ub294 View\ub780 GUI\ub97c \ub9d0\ud55c\ub2e4\u201d. GameObject\ub098 MonoBehaviour\ub97c \ub9d0\ud558\ub294 \uac83\uc774 \uc544\ub2d9\ub2c8\ub2e4. MVP\ud328\ud134\uc740 \u201cGUI\ub97c \uad6c\ud604\ud558\uae30 \uc704\ud55c \ud328\ud134\u201d\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201c\ud504\ub808\uc784\uc6cc\ud06c(Unity)\u201d\uc640 \u201c\ub3c4\uba54\uc778(\uac8c\uc784 \ucf54\uc5b4 \ub17c\ub9ac)\u201d\ub97c \ubd84\ub9ac\ud55c \uc124\uacc4\ub294 \ud655\uc2e4\ud788 \uc774\uc0c1\uc801\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc \uc774\ub97c \uc2e4\ud604\ud558\uae30 \uc704\ud574\uc11c\ub294 \u201cMVP\ud328\ud134&#8221;\ub9cc\uc73c\ub85c\ub294 \ubd80\uc871\ud558\uace0 \ub2e4\ub978 \uc124\uacc4 \ud328\ud134\uc774\ub098 \uc544\ud0a4\ud14d\uccd0\uc758 \uc9c0\uc2dd\ub3c4 \ud544\uc694\ub85c \ud569\ub2c8\ub2e4 (\uc608\ub97c \ub4e4\uc5b4 \ucd5c\uadfc \ud654\uc81c\uc758 \u201c\ud074\ub9b0 \uc544\ud0a4\ud14d\uccd0&#8221;\ub294 \ubc14\ub85c \u201c\ubcf5\uc7a1\ud654\ub41c \ub3c4\uba54\uc778\uc5d0\uc11c \uccb4\uc81c \uc758\uc874\uc744 \uc5b4\ub5bb\uac8c \ubd84\ub9ac\ud558\ub294\uac00&#8221;\ub97c \ub9d0\ud558\uace0 \uc788\ub294 \uc544\ud0a4\ud14d\uccd0\uac00 \uc788\uc2b5\ub2c8\ub2e4)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(\ucc38\uace0: <a href=\"https:\/\/qiita.com\/toRisouP\/items\/79b97c472e588bb91c52\">Unity\uc5d0\uc11c\uc758 \uc124\uacc4 \ub808\ubca8\uc744 \uc815\uc758<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub7fc MVP\ud328\ud134\uc744 \ud655\ub300\ud574\uc11d\ud574\uc11c &#8216;\ud504\ub808\uc784\uc6cc\ud06c\uc640 \ub3c4\uba54\uc778 \ubd84\ub9ac&#8217;\uc5d0 \uc774\uc6a9\ud558\ub294 \uac83\uc774 \uc548\ub418\ub294\uac00 \ud558\uba74 \ub531\ud788 \uadf8\ub807\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc0c1\ud669\uc5d0 \ub530\ub77c\uc11c\ub294 MVP\ud328\ud134\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc7a5\uba74\ub3c4 \uc788\uae30\ub3c4 \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 &#8216;\uc11c\ubc84 \uc0ac\uc774\ub4dc\uc5d0 \ub85c\uc9c1\uacfc \ub370\uc774\ud130\uac00 \uc788\ub2e4&#8217; &#8216;Unity\ub294 \uadf8 Viewer\ub85c \uc0ac\uc6a9\ud55c\ub2e4&#8217;\ucc98\ub7fc \ubd84\uba85\ud558\uac8c \uad6c\ubd84\uc774 \ub418\uc5b4 \uc788\ub2e4\uba74 MVP \ud328\ud134\uc744 \uc0ac\uc6a9\ud574\ub3c4 \uc798 \ub420 \uac00\ub2a5\uc131\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc \ud55c\ud3b8\uc73c\ub85c &#8216;\uc561\uc158 \uac8c\uc784&#8217;\uacfc \uac19\uc740 &#8216;Unity\uc5d0 \ubc00\uc811\ud558\uac8c \uc758\uc874\ud55c \uad6c\uc870 \uc704\uc5d0\uc11c \uc6c0\uc9c1\uc774\ub294 \uac8c\uc784&#8217; \ub4f1\uc740 \uc560\ucd08\uc5d0 &#8216;\ud504\ub808\uc784\uc6cc\ud06c\uc640 \ub3c4\uba54\uc778 \ubd84\ub9ac&#8217; \uc790\uccb4\uac00 \uc5b4\ub835\uae30\ub3c4 \ud569\ub2c8\ub2e4. \uc774\ub7f0 \uc560\ucd08\uc5d0 \ubd84\ub9ac\uac00 \uc5b4\ub824\uc6b4 \uc885\ub958\uc758 \uac83\uc744 \uc5b5\uc9c0\ub85c \ubd84\ub9ac\ud574\uc11c \ub9cc\ub4dc\ub294 \uac83\uc740 \ub9e4\uc6b0 \uad6c\ud604\uc774 \uc5b4\ub824\uc6cc\uc11c \uc798 \ub418\uc9c0 \uc54a\uc744 \uac00\ub2a5\uc131\uc774 \ub192\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c &#8216;\ud504\ub808\uc784\uc6cc\ud06c\uc640 \ub3c4\uba54\uc778\uc758 \ubd84\ub9ac&#8217;\ub97c \ud558\ub294 \uacbd\uc6b0\ub294 \uc6b0\uc120 \uc560\ucd08\uc5d0 \uadf8\uac83\uc744 \ud558\ub294 \uc758\uc758\uac00 \uc788\ub294\uc9c0 \uc0dd\uac01\ud560 \ud544\uc694\uac00 \uc788\uc2b5\ub2c8\ub2e4. &#8220;\ud504\ub808\uc784\uc6cc\ud06c\uc640 \ub3c4\uba54\uc778 \ubd84\ub9ac&#8217;\ub294 \ud655\uc2e4\ud788 \uc124\uacc4\uc0c1 \uae68\ub057\ud574\uc9c8 \uac83 \uac19\uc9c0\ub9cc \uc2e4\uc81c\ub85c\ub294 \uc2e4\uc2dc \ube44\uc6a9\uc774 \ub192\uace0 \uac1c\ubc1c \uc18d\ub3c4\uac00 \ub2a6\uc5b4\uc9c4\ub2e4\ub294 \ub2e8\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ub9cc\ub4e4\ub824\uace0 \ud558\ub294 \uac8c\uc784\uc758 \uaddc\ubaa8\uac10<\/li>\n\n\n\n<li>\uac1c\ubc1c\uc790\uc758 \uc778\uc6d0 \uc218<\/li>\n\n\n\n<li>\uc77c\uc815<\/li>\n\n\n\n<li>\uac8c\uc784\uc758 \uc7a5\ub974<\/li>\n\n\n\n<li>\uc2dc\uc2a4\ud15c \uc544\ud0a4\ud14d\uccd0(\ud074\ub77c\uc774\uc5b8\ud2b8 \ub9cc\uc778\uc9c0 \uc11c\ubc84\uc640 \uc5f0\uacc4\ud560\uc9c0 \ub4f1)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;\uc704 \ub0b4\uc6a9\uc744 \ud310\ub2e8 \uadfc\uac70\ub85c &#8216;\uc560\ucd08\uc5d0 \ud504\ub808\uc784\uc6cc\ud06c\uc640 \ub3c4\uba54\uc778\uc744 \uc644\uc804\ud788 \ubd84\ub9ac\ud574\uc11c \ub9cc\ub4dc\ub294 \uac83\uc5d0 \uc815\ub9d0 \uc7a5\uc810\uc774 \uc788\ub294\uac00\u201d, \u201c\uc5b4\ub5a4 \uc544\ud0a4\ud14d\uccd0\ub97c \ucc44\ud0dd\ud560\uac83\uc778\uac00?\u201d\ub97c \uc0dd\uac01\ud560 \ud544\uc694\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c \ub2f5\uc740 <strong>\u201c(MVP \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uc5ec Unity \ube44 \uc758\uc874\uc801\uc778 \uad6c\ud604\uc740) \ud560 \uc218 \uc5c6\ub294 \uac83\uc740 \uc544\ub2c8\uc9c0\ub9cc \uadf8 \uc774\uc804\uc5d0 \uc0dd\uac01\ud560 \uc77c\uc774 \uc788\ub2e4\u201d<\/strong> \uc785\ub2c8\ub2e4<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\uc2dc \ub9d0\ud558\uc9c0\ub9cc \u201cMVP \ud328\ud134\uc740 GUI \uc124\uacc4\ub97c \uc704\ud55c \ud328\ud134&#8221;\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub97c \uc751\uc6a9\ud558\uace0, &#8220;\ud504\ub808\uc784\uc6cc\ud06c\uc640 \ub3c4\uba54\uc778\uc758 \ubd84\ub9ac&#8221;\uc5d0 \uc0ac\uc6a9\ud558\ub294 \uac83 \uc790\uccb4\ub294 \ub098\uc05c \uac83\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.&nbsp;\ud558\uc9c0\ub9cc&nbsp;<strong>\uadf8\uac83\uc744 \ud558\uae30\uc5d0\ub294 \uc124\uacc4\uc5d0 \ub300\ud55c \ub2e4\ub978 \uc9c0\uc2dd\uc774\ub098 \uadf8\ub9cc\ud55c \uac01\uc624\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 \uadf8\uac83\uc744 \ucd08\uc2ec\uc790\uc5d0\uac8c \uc694\uad6c\ud558\ub294 \uac83\uc740 \uac00\ud639\ud574\uc11c,&nbsp;<strong>MVP\ud328\ud134\uc740 \uc21c\uc21c\ud788 GUI\uc5d0\ub9cc \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc548\uc804\ud558\ub2e4\ub294 \ub9d0\uc774 \ub429\ub2c8\ub2e4.<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\uc815\ub9ac<\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MV(R)P \ud328\ud134\uc740 Unity\uc5d0\uc11c GUI \uad6c\ud604\uc744 \uc704\ud55c \uc124\uacc4 \ud328\ud134<\/li>\n\n\n\n<li>Model\uacfc View\ub97c Presenter\ub77c\ub294 \uc587\uc740 \ub808\uc774\uc5b4\ub85c \uc5f0\uacb0 \ud55c\ub2e4.<\/li>\n\n\n\n<li>Model\uacfc View\uc758 \uc5f0\uacb0\uc5d0\ub294 UniRx\ub97c \ud65c\uc6a9 (ReactiveProperty\ub294 \ud3b8\ub9ac\ud558\ub2e4)<\/li>\n\n\n\n<li>\uc704 \ub0b4\uc6a9 \uc774\uc678\uc5d0\ub294 \uc790\uc720\ub86d\uac8c \uc0ac\uc6a9\ud574\ub3c4 \ubb38\uc81c \uc5c6\ub2e4.\n<ul class=\"wp-block-list\">\n<li>\uc808\ub300\ub77c\ub294 \uac83 \uc5c6\uc5b4\uc11c \uc790\uae30\ub9cc\uc758 \ubc29\uc2dd\uc73c\ub85c \ud574\uc11d\ud574\uc11c \uc0ac\uc6a9\ud574\ub3c4 \ubb34\ubc29\ud558\ub2e4.<\/li>\n\n\n\n<li>\ub2e4\ub9cc \uc5b4\ub514\uae4c\uc9c0\ub098 GUI \uc124\uacc4 \ud328\ud134\uc774\ub2e4 \ub77c\ub294 \uac83\uc744 \uc5fc\ub450\ud574 \ub450\uc790.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\ud658\uacbd UniRx \uc785\ubb38 \uc2dc\ub9ac\uc988 \ubaa9\ucc28\ub294 \uc774\ucabd GUI \uc8fc\ubcc0\uc758 \ub514\uc790\uc778 \ud328\ud134 Model-View-(Reactive)Presenter\ud328\ud134(\uc57d\uce6d\ud558\uc5ec MV(R)P \ud328\ud134)\uc774\ub780 Unity\uc5d0\uc11c&nbsp;GUI \uc8fc\ubcc0\uc758 \uc124\uacc4 \ud328\ud134&nbsp;\uc758 \uc77c\uc885\uc785\ub2c8\ub2e4.\u300cGUI\u300d\ub780, \uc774\ub978\ubc14 \u300c\uc720\uc800 \uc778\ud130\ud398\uc774\uc2a4\u300d\ub97c \ub9d0\ud574, \uac8c\uc784\uc911\uc5d0 \uc788\uc5b4\uc11c\uc758 \u300c\ud654\uba74\uc0c1\uc5d0 \ud45c\uc2dc\ub418\ub294 \uc815\ubcf4\u300d\ub098 \u300c\uba54\ub274\u300d\ub098 \u300c\ubc84\ud2bc\u300d\uc774\ub77c\uace0 \ud558\ub294 \uac83\uc744 \uac00\ub9ac\ud0b5\ub2c8\ub2e4.(\uc790\uafb8 \ub9d0\ud558\uba74,&nbsp;uGUI\uc77c\uc774\ub77c\uace0 \uc0dd\uac01\ud574 \uc8fc\uc138\uc694) GUI \uc8fc\uc704\uc758 \uad6c\ud604\uc218\ubc95\uc774\ub77c\uace0 \ud558\ub294 \uac83\uc740 Unity\uc5d0 \ud55c\uc815\ub418\uc9c0 \uc54a\uace0, \ubcf5\uc7a1\ud558\uac8c \ub418\uae30 \uc27d\ub2e4 \uc5b4\ub824\uc6b4 \ubd80\ubd84\uc785\ub2c8\ub2e4.\uadf8 \ub54c\ubb38\uc5d0 \uc5ec\ub7ec\uac00\uc9c0 \uc124\uacc4 \ud328\ud134\uc774 \uace0\uc548\ub418\uc5b4 \uc654\uc2b5\ub2c8\ub2e4.\ub300\ud45c\uc801\uc778 \uac83\uc73c\ub85c &hellip;<br \/><a href=\"http:\/\/yoonhada.com\/?p=1597\" class=\"more-link pen_button pen_element_default pen_icon_arrow_double\"><span class=\"screen-reader-text\">Model-View-(Reactive)Presenter \ud328\ud134\uc774\ub780<\/span> \ub354\ubcf4\uae30<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[84,80],"tags":[59,42],"class_list":["post-1597","post","type-post","status-publish","format-standard","hentry","category-architecture","category-project","tag-unirx","tag-unity"],"_links":{"self":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts\/1597","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1597"}],"version-history":[{"count":13,"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts\/1597\/revisions"}],"predecessor-version":[{"id":1964,"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts\/1597\/revisions\/1964"}],"wp:attachment":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1597"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1597"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1597"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}