{"id":1290,"date":"2017-03-05T20:48:46","date_gmt":"2017-03-05T11:48:46","guid":{"rendered":"http:\/\/now0930.tk\/wordpress\/?p=1290"},"modified":"2017-03-05T20:48:46","modified_gmt":"2017-03-05T11:48:46","slug":"%ec%95%88%eb%93%9c%eb%a1%9c%ec%9d%b4%eb%93%9c-%ec%95%b1-%ea%b0%9c%eb%b0%9c-%ec%9d%bc%ec%a7%80-1%ec%b0%a8","status":"publish","type":"post","link":"https:\/\/now0930.pe.kr\/wordpress\/%ec%95%88%eb%93%9c%eb%a1%9c%ec%9d%b4%eb%93%9c-%ec%95%b1-%ea%b0%9c%eb%b0%9c-%ec%9d%bc%ec%a7%80-1%ec%b0%a8\/","title":{"rendered":"\uc548\ub4dc\ub85c\uc774\ub4dc \uc571 \uac1c\ubc1c \uc77c\uc9c0, 1\ucc28"},"content":{"rendered":"<h1>\uc548\ub4dc\ub85c\uc774\ub4dc \uc571 \uac1c\ubc1c\uae30 1<\/h1>\n<h2>\uad6c\uae00 \uc74c\uc131\uc778\uc2dd API\ub97c \ud65c\uc6a9\ud55c \uae30\ub85d\uae30<\/h2>\n<p>\uc77c\ud558\ub294 \uc8fc\ubcc0\uc5d0 \ud544\uc694\ud55c \ub3c4\uad6c\ub97c \ub9cc\ub4e4\uc5b4 \uc4f0\uae30\ub85c \ud588\ub2e4. \ud734\ub300\ud3f0\uc5d0 \uc0ac\uc6a9\ub418\ub294 \uc548\ub4dc\ub85c\uc774\ub4dc os\uac00 \ud734\ub300\uc6a9 PC\uc778\ub370 \uadf8 \uae30\ub2a5\uc744 \uc798 \ud65c\uc6a9\ud558\uba74 \ud604\uc7a5\uc758 \ub9ce\uc740 \uc0bd\uc9c8\uc744 \uc904\uc77c \uc218 \uc788\ub2e4. \ub098\uc758 \ucf54\ub529 \ub4f1\uae09 \ubc0f JAVA\uc5d0 \ub300\ud55c \uc774\ud574\ub3c4\ub294 \ubbf8\ubbf8\ud558\uc9c0\ub9cc, stack overflow\uc640 \uad6c\uae00\uc2e0\uc744 \ubbff\uc5b4 \ud574\ubcf4\uae30\ub85c \ud588\ub2e4. \uc774 \uac1c\ubc1c\uc774 \ub05d\ub098\uba74 JAVA \uc0ac\uc6a9 \ubc29\ubc95, HSM(fsm) \uc801\uc6a9, \ud30c\uc77c \uc800\uc7a5 \ub4f1\uc758 \uae30\uc220\uc774 \ub298 \uac83 \uac19\ub2e4.<\/p>\n<p>\uc61b\ub0a0\uc5d0 fsm\uc744 \uacf5\ubd80\ud558\uae30 \uc704\ud574 <a href=\"http:\/\/www.state-machine.com\/\">\ud000\ud140 \ud504\ub85c\uadf8\ub798\ubc0d\uc744<\/a> \uc0ac\uc11c \uc77d\uc5c8\ub2e4. \uc774 \ucc45\uc5d0 HSM\uc5d0 \ub300\ud55c \uc18c\uac1c\uac00 \uc788\uc5c8\ub2e4. fsm\uc744 \ud655\uc7a5\ud558\uc5ec hierarchy\ub85c \uc815\uc758\ud55c fsm\uc778\ub370, \uadf8\ub7f0 \ubc29\ubc95\uc73c\ub85c \uac1c\ubc1c\ud558\uba74 \uc27d\ub2e4\uace0 \ud588\ub2e4. \ubb38\uc81c\ub294 \uc774 \uc0ac\ub78c\uc774 C\ub85c \ucf54\ub4dc\ub97c \uc18c\uac1c\ub97c \ud588\ub2e4. \uc774\ub97c JAVA\ub85c \uc62e\uaca8\uc57c \ub418\ub294\ub370, \ub0b4 \ub2a5\ub825\uc73c\ub85c\ub294 \ubd88\uac00\ub2a5 \ud588\ub2e4. 3\ub144\uc804\uc5d0 \uc778\ud130\ub137\uc744 \uc5f4\uc2ec\ud788 \ub4a4\uc9c4 \uacb0\uacfc <a href=\"http:\/\/krasnopolski.org\/alpha\/\">Alexei Krasnopolski\uac00 \uc790\ubc14\ub85c \ubcc0\uacbd\ud55c \uacb0\uacfc\ub97c \ucc3e\uc558\ub2e4.<\/a> fsm\uc744 \uc798 \uc0ac\uc6a9\ud558\ub824\uba74 uml\uc744 \uc815\ud655\ud558\uac8c \uc54c\uc544\uc57c \ub418\ub294\ub370, \ub300\ucda9 \uc54c\uace0 \uc788\ub2e4. \ub098\uc911\uc5d0 \ubb38\uc81c\ub418\ub294 \ubd80\ubd84\uc744 \ub530\ub85c \ucc3e\uc544 \ubcf4\uae30\ub85c \ud588\ub2e4.<\/p>\n<h3>\ub0b4\uac00 \uc6d0\ud558\ub294 \uae30\ub2a5<\/h3>\n<p>\uc544\ub798\uc758 \uae30\ub2a5\uc744 \uac16\ub294 \uc571\uc744 \uac1c\ubc1c\ud558\ub824\uace0 \ud55c\ub2e4.<\/p>\n<ol>\n<li>\uad6c\uae00\uc758 \uc74c\uc131\uc778\uc2dd\uc744 \ud65c\uc6a9\ud558\uc5ec, \ub9d0\ud558\ub294 \ub0b4\uc6a9\uc744 \ud14d\uc2a4\ud2b8\ub85c \ubcc0\ud658<\/li>\n<li>layout\uc5d0 \ubc88\ud638\ub97c \ud560\ub2f9\ud558\uc5ec \ucc98\uc74c\ubd80\ud130 \ub05d\uae4c\uc9c0 \uc5f0\uc18d\uc801\uc778 \uc778\uc2dd<\/li>\n<li>\uc0ac\uc6a9\uc790 \uc785\ub825\uc5d0 \ub300\ud55c android \ud310\ub2e8\uc740 \uc18c\ub9ac\ub85c \ud45c\uc2dc<\/li>\n<li>\uc5f0\uc18d \uc791\uc5c5 \ub3c4\uc911 \ud2c0\ub9b0 \ubd80\ubd84\uc740 \ubc84\ud2bc\uc744 \ub20c\ub7ec \uc218\uc815<\/li>\n<li>\uc218\uc815 \uc791\uc5c5\uc774 \uc644\ub8cc\ub418\uba74 \ub2e4\uc74c \uc5f0\uc18d \uc791\uc5c5\uc73c\ub85c \ub2e4\uc2dc \ubcf5\uadc0<\/li>\n<li>\ubaa8\ub4e0 \uc791\uc5c5\uc774 \ub05d\ub098\uba74 \ud30c\uc77c\ub85c \uc800\uc7a5<\/li>\n<\/ol>\n<p>\uc544\ub798\uc758 \ubc29\ud5a5\uc73c\ub85c \uc811\uadfc \ud558\uae30\ub85c \ud588\ub2e4.<\/p>\n<ol>\n<li>\uad6c\uae00 \uc74c\uc131\uc778\uc2dd API \uc0ac\uc6a9<\/li>\n<li>hsm\uc758 \uad6c\uc131 \ubc0f \uc124\uc815<\/li>\n<li>event \uc804\ub2ec \ubc29\ubc95<\/li>\n<li>thread \uc0ac\uc6a9 \ubc29\ubc95<\/li>\n<li>handler<\/li>\n<li>\ud30c\uc77c \uc800\uc7a5<\/li>\n<li>android studio \uc0ac\uc6a9<\/li>\n<\/ol>\n<p>\uad6c\uae00 \uc74c\uc131 \uc778\uc2dd\uc740 speech to text\ub77c\uace0 \ud558\ub294\ub370, \uacfc\uac70 text to speech\uc758 \uc5ed\ubc84\uc804\uc774\ub2e4. \ud55c\uad6d\uc758 \ub124\uc774\ubc84\ub3c4 \uc774\ub7f0 \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud55c\ub2e4. \uadf8\ub7ec\ub098 \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c \uc801\uc808\ud558\uac8c \uc0ac\uc6a9\uc774 \uac00\ub2a5\ud55c\uc9c0 \ubaa8\ub974\uaca0\uace0, \ubcc4\ub3c4 API\ub97c \uc54c\uc544\uc57c \ub41c\ub2e4. \uac8c\ub2e4\uac00 \uc804\uc138\uacc4 \uac1c\ubc1c\uc790\ub4e4\uc774 \uad6c\uae00\uc744 \ub9ce\uc774 \uc0ac\uc6a9\ud558\uc5ec \ub0b4\uac00 \uc6d0\ud558\ub294 \ub2f5\uc774 \ub9ce\ub2e4. \uc774\ub7f0 \uc800\ub7f0 \uc774\uc720\ub85c \uad6c\uae00\uc744 \uc0ac\uc6a9\ud588\ub2e4. \uc548\ub4dc\ub85c\uc774\ub4dc \ub0b4\ubd80\uc5d0\uc11c \ubc14\ub85c \uad6c\ud604\uc774 \uac00\ub2a5\ud558\ub2e4. \uc0d8\ud50c \ucf54\ub4dc\ub294 \uc778\ud130\ub137\uc5d0 \uad6c\ud588\ub2e4.<\/p>\n<p>\uc804\uc5d0\ub294 eclipse\ub97c \uc548\ub4dc\ub85c\uc774\ub4dc \uac1c\ubc1c\uc774 \uac00\ub2a5\ud558\ub3c4\ub85d \uc138\ud305\ud588\ub294\ub370, \uc694\uc0c8 \ubb34\uc2a8 \ubcc0\ud654\uac00 \uc788\uc5c8\ub294\uc9c0 \ucd5c\uc2e0 \ubc84\uc804\uc740 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc558\ub2e4. \ud14c\ub9c8 \uad00\ub828 \uc5d0\ub7ec\ub3c4 \ub9ce\uc774 \ub728\uace0..\uad6c\uae00\uc774 \uacf5\uc2dd\uc571 \uac1c\ubc1c\ud234\uc774\ub77c\uace0 \ubc00\uace0 \uc788\ub294 android studio\ub97c \uc0ac\uc6a9\ud588\ub2e4. \uc778\ud130\ub137\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc \ud558\uc5ec \uc0ac\uc6a9 \ud558\uba74 \ub41c\ub2e4.<\/p>\n<h3>Hierarchy-finite State Machine \uc815\uc758<\/h3>\n<p>\uc77c\ub2e8 \uc544\ub798 \uadf8\ub9bc\uacfc \uac19\uc774 \uc811\uadfc \ud558\uae30\ub85c \ud588\ub2e4.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-large wp-image-1294\" src=\"http:\/\/now0930.tk\/wordpress\/wp-content\/uploads\/2017\/03\/Office-Lens-20170305-192504-e1488709712733-1024x616.jpg\" alt=\"\" width=\"474\" height=\"285\" srcset=\"https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2017\/03\/Office-Lens-20170305-192504-e1488709712733-1024x616.jpg 1024w, https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2017\/03\/Office-Lens-20170305-192504-e1488709712733-300x180.jpg 300w, https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2017\/03\/Office-Lens-20170305-192504-e1488709712733-768x462.jpg 768w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><br \/>\n\uc774 \uadf8\ub9bc\uc774 \uc815\ud655\ud55c\uc9c0 \ud574\ubcf4\uc9c0 \uc54a\uace0\ub294 \uc815\ud655\ud55c \ud310\ub2e8\uc744 \ud560 \uc218 \uc5c6\uc5b4, \uc77c\ub2e8 \ud574\ubcf4\uace0 \ub098\uc911\uc5d0 \ub2e4\uc2dc \ubcf4\uc644\ud558\uae30\ub85c \ud588\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \" title=\"HSM\uc815\uc758\">package com.example.now0930.myapplication;\r\n\r\n\/**\r\n * Created by now0930 on 17. 2. 26.\r\n *\/\r\n\r\nimport android.app.Activity;\r\nimport android.os.Handler;\r\nimport android.os.Message;\r\nimport android.provider.ContactsContract;\r\nimport android.speech.SpeechRecognizer;\r\nimport android.util.Log;\r\n\r\nimport com.example.now0930.myapplication.hsm.Event;\r\nimport com.example.now0930.myapplication.hsm.Hsm;\r\nimport com.example.now0930.myapplication.hsm.State;\r\n\r\n\/**\r\n * This class represents a test HSM implementation.\r\n *\r\n * @author Alexei Krasnopolski (krasnop@bellsouth.net)\r\n *\/\r\npublic class myHsm extends Hsm {\r\n    int myFoo;\r\n    DataGapFlush myGapFlush;\r\n    Handler myHandle;\r\n\r\n\r\n    public myHsm(DataGapFlush myDataInst, Handler handle) {\r\n        this.myGapFlush = myDataInst;\r\n        this.myHandle = handle;\r\n    }\r\n\r\n    public void init() {\r\n        \/\/System.out.print(\"Top-INIT;\");\r\n        Log.d(\"FSM\", \"Top-INIT;\");\r\n        myFoo = 0;\r\n        super.init();\r\n    }\r\n\r\n    ;\r\n\r\n    public State fireInit() {\r\n        Log.d(\"FSM\", \"INIT&gt;&gt;s0;\");\r\n        return stateStandby;\r\n    }\r\n\r\n    ;\r\n\r\n    public State fireEvent(Event e) {\r\n\r\n        return getParent();\r\n    }\r\n\r\n    ;\r\n\r\n    public void enter() {\r\n        Log.d(\"FSM\", \"ENTRY&gt;&gt;s0;\");\r\n    }\r\n\r\n    ;\r\n\r\n    public void exit() {\r\n        Log.d(\"FSM\", \"EXIT&lt;&lt;s0;\"); } Hsm s0 = this; \/\/ This is just alias of current instance State stateStandby = new State(s0) { @Override public State fireInit() { Log.d(\"FSM\", \"INIT&gt;&gt;stateStandby;\");\r\n            return null;\r\n        }\r\n\r\n        @Override\r\n        public void enter() {\r\n            Log.d(\"FSM\", \"ENTRY&gt;&gt;stateStandby;\");\r\n        }\r\n\r\n        @Override\r\n        public State fireEvent(Event e) {\r\n            switch (e.getID()) {\r\n                case 5:\r\n                    printMessage(e, \"stateBatchRec\");\r\n                    \/\/myHandle.sendMessage(myHandle.obtainMessage());\r\n                    myHandle.sendEmptyMessage(1);\r\n                    myHsm.this.transition(stateBatchRec);\r\n                    return null;\r\n                default:\r\n                    break;\r\n            }\r\n            return getParent();\r\n        }\r\n\r\n        @Override\r\n        public void exit() {\r\n            Log.d(\"FSM\", \"EXIT&lt;&lt;stateStandby;\"); } }; State stateBatchRec = new State(s0) { @Override public State fireInit() { Log.d(\"FSM\", \"Init&gt;&gt;stateBatchRec;\");\r\n            return stateBatchRec_Gap;\r\n        }\r\n\r\n        @Override\r\n        public void enter() {\r\n            Log.d(\"FSM\", \"Entry&gt;&gt;stateBatchRec;\");\r\n        }\r\n\r\n        @Override\r\n        public State fireEvent(Event e) {\r\n            switch (e.getID()) {\r\n                case 6:\r\n                    printMessage(e, \"stateStandby\");\r\n                    myHsm.this.transition(stateStandby);\r\n                    return null;\r\n                case 11:\r\n                    printMessage(e, \"stateModify\");\r\n                    myHsm.this.transition(stateModify);\r\n                    return null;\r\n                default:\r\n                    break;\r\n\r\n            }\r\n            return getParent();\r\n        }\r\n\r\n        @Override\r\n        public void exit() {\r\n            Log.d(\"FSM\", \"EXIT&lt;&lt;stateBatchRec;\"); } }; State stateBatchRec_Gap = new State(stateBatchRec) { @Override public State fireInit() { Log.d(\"FSM\", \"Init&gt;&gt;stateBatchRec_Gap;\");\r\n            return null;\r\n        }\r\n\r\n        @Override\r\n        public void enter() {\r\n            Log.d(\"FSM\", \"Entry&gt;&gt;stateBatchRec_Gap;\");\r\n            \/\/myHandle.sendEmptyMessage(1);\r\n        }\r\n\r\n        @Override\r\n\r\n        public State fireEvent(Event e) {\r\n            \/\/\uc544\ub798 e.getID\ub97c \uc2e4\ud589\ud558\uba74\r\n            \/\/\uc774\ubca4\ud2b8 \uc815\uc758\uc2dc \ub0b4\ubd80 \ub370\uc774\ud130\uc5d0 \uc758\ud55c \uae30\uc900\uc73c\ub85c \ud558\uba74\r\n            \/\/\uc77c\uc815 \uc2dc\uc810 \uc774\ud6c4\ub85c\ub294 \uadf8 \ub3d9\uc791\ub9cc \uacc4\uc18d\ub428..\r\n            \/\/\ub0b4\ubd80 \uc774\ubca4\ud2b8, \uc774\ubd80 \uc774\ubca4\ud2b8\ub85c \ubd84\ub9ac.\r\n            \/\/\ub0b4\ubd80 \uc774\ubca4\ud2b8\ub294 \uadf8 state\uc5d0\uc11c\ub9cc \uc2e4\ud589\ub418\ub3c4\ub85d \uc815\uc758\r\n            boolean gapFlag = myGapFlush.checkGapFulled();\r\n            if(gapFlag == true){\r\n                myHsm.this.transition(stateBatchRec_Flush);\r\n                return null;\r\n            }\r\n\r\n            switch (e.getID()) {\r\n                case 1:\r\n                    printMessage(e, \"stateBatchRec_Gap\");\r\n                    int i = myGapFlush.getGapIndex();\r\n                    myGapFlush.setGapIthwithN(i, myGapFlush.getTmpWord());\r\n                    myGapFlush.emptyTmpWord();\r\n                    myHsm.this.transition(stateBatchRec_Gap);\r\n                    myHandle.sendEmptyMessage(1);\r\n                    return null;\r\n                \/***\r\n                case 2:\r\n                    myHsm.this.transition(stateBatchRec_Flush);\r\n                    return null;\r\n                 ***\/\r\n                default:\r\n                    break;\r\n            }\r\n            return getParent();\r\n        }\r\n\r\n        ;\r\n\r\n        @Override\r\n        public void exit() {\r\n            Log.d(\"FSM\", \"Exit&lt;&lt;stateBatchRec_Gap;\"); } State stateBatchRec_Flush = new State(stateBatchRec) { @Override public State fireInit() { Log.d(\"FSM\", \"Init&gt;&gt;stateBatchRec_Flush;\");\r\n                return null;\r\n            }\r\n\r\n            @Override\r\n            public void enter() {\r\n                Log.d(\"FSM\", \"Entry&gt;&gt;stateBatchRec_Flush;\");\r\n            }\r\n\r\n            @Override\r\n            public State fireEvent(Event e) {\r\n                switch (e.getID()) {\r\n                    case 3:\r\n                        printMessage(e, \"stateBatchRec_Flush\");\r\n                        int i = myGapFlush.getFlushIndex();\r\n                        myGapFlush.setFlushIthwithN(i, myGapFlush.getTmpWord());\r\n                        myGapFlush.emptyTmpWord();\r\n                        myHsm.this.transition(stateBatchRec_Flush);\r\n                        myHandle.sendEmptyMessage(1);\r\n                        return null;\r\n                    default:\r\n                        break;\r\n                }\r\n                return getParent();\r\n\r\n            }\r\n\r\n            @Override\r\n            public void exit() {\r\n                Log.d(\"FSM\", \"Exit&lt;&lt;stateBatchRec_Flush;\"); } }; }; State stateModify = new State(s0) { @Override public State fireInit() { Log.d(\"FSM\", \"Init&gt;&gt;stateModify;\");\r\n            return null;\r\n        }\r\n\r\n        @Override\r\n        public void enter() {\r\n            Log.d(\"FSM\", \"Entry&gt;&gt;stateModify;\");\r\n        }\r\n\r\n        @Override\r\n        public State fireEvent(Event e) {\r\n            return null;\r\n        }\r\n\r\n        @Override\r\n        public void exit() {\r\n            Log.d(\"FSM\", \"Exit&lt;&lt;stateModify;\"); } }; public static void printMessage(Event e, String stateName) { Log.d(\"FSM\", \"Event-\" + e.getID() + \"&gt;&gt;\" + stateName + \";\");\r\n    }\r\n\r\n};\r\n<\/pre>\n<p>HSM \ub0b4\ubd80\uc5d0 gap\uacfc flush\ub97c \uac19\uc774 \uad00\ub9ac\uac00 \ub418\ub3c4\ub85d \ub370\uc774\ud130 \ud615\uc2dd\uc73c\ub85c \uac19\uc774 \uc815\uc758 \ud588\ub2e4. \ud578\ub4e4\ub7ec\ub294 MainActivity\uc758 startListener\ub97c \uc81c\uc5b4\ud558\uae30 \uc704\ud55c \ud578\ub4e4\ub7ec\uc774\ub2e4.<br \/>\nMainActivity\uc5d0\uc11c \uc0dd\uc131\uc790\ub97c \ub9cc\ub4e4\uacbd\uc6b0 \uc790\ub3d9\uc73c\ub85c \uad00\ub828 \uc8fc\uc18c\ub97c \ub118\uaca8\uc624\ub3c4\ub85d \ud588\ub2e4.<\/p>\n<p>State\uac04\uc758 Action\uc740 \uc804\uc774\uac00 \uc788\uc744 \ub54c \uc2e4\ud589\ub41c\ub2e4. transition\uacfc \ubcc4\uac1c\uc758 action\uc744 \uc2e4\ud589\ud558\ub824\uba74, state \ub0b4\ubd80\uc5d0 \ub123\uc5b4\uc8fc\uba74 \ub420\uac83 \uac19\ub2e4.<\/p>\n<h2>DataGapFlush Class \uc815\uc758<\/h2>\n<p>DataGapFlush\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc758 \ud588\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\" title=\"DataGapFlush\">public class DataGapFlush {\r\n    private String[] gap;\r\n    private String[] flush;\r\n    private int gapIndex = 0;\r\n    private int flushIndex = 0;\r\n    private String VIN = \"\";\r\n    private String tmpSpokenWord = \"\";\r\n\r\n    public DataGapFlush() {\r\n        gap = new String[10];\r\n        flush = new String[10];\r\n        \/\/0\ubd80\ud130 10\uae4c\uc9c0 \"Empty\"\ub97c \uc785\ub825..\r\n\r\n        for (int i = 0; i &lt; 10; i++) {\r\n            gap[i] = \"Empty\";\r\n            flush[i] = \"Empty\";\r\n        }\r\n\r\n        \/\/DEBUG\r\n        for (int i = 0; i &lt; 8; i++) {\r\n            gap[i] = \"\uac00\";\r\n        }\r\n        \/\/DEBUG\r\n    }\r\n\r\n    \/\/gap\uc744 0\uc5d0\uc11c 10\uae4c\uc9c0 \"Empty\"\ub85c \ub4e4\uc5b4\uac00 \uc788\ub294\uc9c0 \ud655\uc778\r\n    \/\/\ubaa8\ub450 \ucc28\uc788\uc73c\uba74 true\uc744 return..\r\n    \/\/\uc911\uac04\uc5d0 \ube44\uc5b4 \uc788\uc73c\uba74 flase\ub97c return\r\n\r\n    public boolean checkGapFulled() {\r\n        int i;\r\n        for (i = 0; i &lt; 10; i++) {\r\n            if (gap[i] != \"Empty\") {\r\n                this.gapIndex = i;\r\n            } else\r\n                break;\r\n        }\r\n\r\n        setGapIndex(i);\r\n        if (this.gapIndex == 10)\r\n            return true;\r\n        else\r\n            return false;\r\n    }\r\n\r\n    public boolean checkFlushFulled() {\r\n        int i;\r\n        for (i = 0; i &lt; 10; i++) { if (flush[i] != \"Empty\") { this.flushIndex = i; } else break; } setFlushIndex(i); if (this.flushIndex == 10) return true; else return false; } public int getGapIndex() { checkGapFulled(); return this.gapIndex; } public int getFlushIndex() { checkFlushFulled(); return this.flushIndex; } public void setGapIndex(int i) { this.gapIndex = i; } public void setFlushIndex(int i) { this.flushIndex = i; } public boolean setGapIthwithN(int i, String value) { if (i &gt;= 10)\r\n            return false; \/\/failed..\r\n        else {\r\n            gap[i] = value;\r\n        }\r\n        return true; \/\/success\r\n    }\r\n\r\n    public boolean setFlushIthwithN(int i, String value) {\r\n        if (i &gt;= 10)\r\n            return false; \/\/failed..\r\n        else {\r\n            flush[i] = value;\r\n        }\r\n        return true; \/\/success\r\n    }\r\n\r\n\r\n    public void setTmpWord(String words) {\r\n        this.tmpSpokenWord = words;\r\n    }\r\n\r\n    public String getTmpWord() {\r\n        return this.tmpSpokenWord;\r\n    }\r\n\r\n    public void emptyTmpWord() {\r\n        this.tmpSpokenWord = \"\";\r\n    }\r\n\r\n    public String getData(boolean GAPFLUSH_FLAG, int NthData) {\r\n        String tmp = \"\";\r\n        if (NthData &lt;= 9) {\r\n            if (GAPFLUSH_FLAG == true) {\r\n                \/\/GAP\uc744 \uac00\uc838\uc634..\r\n                tmp = this.gap[NthData];\r\n            } else\r\n                \/\/Flush\ub97c \uac00\uc838\uc634..\r\n                tmp = this.flush[NthData];\r\n        }\r\n        return tmp;\r\n    }\r\n\r\n}\r\n\r\n<\/pre>\n<p>\uad6c\uae00 \uc74c\uc131\uc778\uc2dd\uc774 \uc22b\uc790\ub85c \uc790\ub3d9\uc73c\ub85c \ubcc0\ud658\ub418\uba74 \uc88b\uc740\ub370, \ud14d\uc2a4\ud2b8\ub85c \uc785\ub825\uc774 \ub4e4\uc5b4\uc628\ub2e4. 10\uac1c\uae4c\uc9c0 \uc800\uc7a5\ud560 \uc218 \uc788\ub3c4\ub85d String\uc73c\ub85c \ubc30\uc5f4\uc744 \uc7a1\uc558\ub2e4. gap, flush index\ub294 \uc5b4\ub290 \ubd80\ubd84\uc5d0 \ub370\uc774\ud130\ub97c \ub123\uc744\uc9c0 \uacb0\uc815\ud55c\ub294 \ubd80\ubd84\uc774\ub2e4. Hsm\uc5d0\uc11c DataGapFlush\ub97c \ub9cc\ub4e4 \ub54c, \ub0b4\ubd80\uc5d0 Empty\ub85c 10\uac1c\ub97c \ub9cc\ub4e0\ub2e4. Empty \ubb38\uc790\uc5f4\uc744 \ud655\uc778 \ud6c4, 0\ubc88\ubd80\ud130 \uc785\ub825\uc744 \ud55c\ub2e4.<\/p>\n<h2>Event \uc815\uc758<\/h2>\n<pre class=\"lang:java decode:true \" title=\"Event\uc815\">package com.example.now0930.myapplication.hsm;\r\n\r\n\/**\r\n * Created by now0930 on 17. 2. 26.\r\n *\/\r\n\r\nimport com.example.now0930.myapplication.DataGapFlush;\r\n\r\nimport java.util.EventObject;\r\nimport java.util.Objects;\r\nimport java.util.logging.Handler;\r\n\r\npublic class Event extends EventObject {\r\n    private int id;\r\n    private int gapIndex = 0;\r\n    private int flushIndex = 0;\r\n    private DataGapFlush thisData;\r\n    boolean SPEECHFLAG = false;\r\n\r\n    private enum ID {JUSTONRESULT, GAPISFULLED, FLUSHISFULLED}\r\n\r\n    ;\r\n\r\n    public Event(Object o, DataGapFlush myDataIns, boolean flag) {\r\n        super(o);\r\n        this.thisData = myDataIns;\r\n        this.SPEECHFLAG = flag;   \/\/false\uc774\uba74 \uc74c\uc131 \uc785\ub825\uc774 \uc5c6\uc74c..\r\n    }\r\n\r\n    \/\/\ubc84\ud2bc\uc744 \ub20c\ub800\uc744 \uacbd\uc6b0, \uc774\ubca4\ud2b8 \uc815\uc758 \ud568\uc218..\r\n    public Event(Object o, DataGapFlush myDataIns, int eventInstance) {\r\n        super(o);\r\n        this.thisData = myDataIns;\r\n        this.id = eventInstance;\r\n    }\r\n\r\n\r\n    public Event(Object o, int index) {\r\n        super(o);\r\n        this.id = index;\r\n    }\r\n\r\n    \/\/event \uc815\uc758..\r\n    \/\/gap\ubd80\ud130 \ucc44\uc6b0\uace0 flush\ub97c \ucc44\uc6c0..\r\n    \/\/gap not full, flush not full,onResult : id 1\r\n    \/\/gap full, flush not full : id 2\r\n    \/\/gap full, flush not full, onResult : id 3\r\n    \/\/gap not full, flush full : id not defined\r\n    \/\/gap full, flush full : id 4\r\n\r\n\r\n    \/\/\uc74c\uc131\uc778\uc2dd \ubc84\ud2bc\uc744 \ub204\ub97c \uacbd\uc6b0 : id 5\r\n    \/\/startListening \ud6c4, \uc785\ub825\uc774 \uc5c6\uc744 \uacbd\uc6b0.: id6\r\n    \/\/startListening \ud6c4, \uc5d0\ub7ec \ubc1c\uc0dd. : id 6\r\n\r\n    \/\/\ubc84\ud2bc \ub20c\ub984 \uc815\uc758..\r\n    \/\/1\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Gap\uc744 \uc218\uc815\ud560 \ub54c. : 11\r\n    \/\/2\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Gap\uc744 \uc218\uc815\ud560 \ub54c. : 12\r\n    \/\/3\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Gap\uc744 \uc218\uc815\ud560 \ub54c. : 13\r\n    \/\/4\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Gap\uc744 \uc218\uc815\ud560 \ub54c. : 14\r\n    \/\/5\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Gap\uc744 \uc218\uc815\ud560 \ub54c. : 15\r\n    \/\/6\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Gap\uc744 \uc218\uc815\ud560 \ub54c. : 16\r\n    \/\/7\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Gap\uc744 \uc218\uc815\ud560 \ub54c. : 17\r\n    \/\/8\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Gap\uc744 \uc218\uc815\ud560 \ub54c. : 18\r\n    \/\/9\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Gap\uc744 \uc218\uc815\ud560 \ub54c. : 19\r\n    \/\/10\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Gap\uc744 \uc218\uc815\ud560 \ub54c. : 20\r\n    \/\/1\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Flush\uc744 \uc218\uc815\ud560 \ub54c. : 21\r\n    \/\/2\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Flush\uc744 \uc218\uc815\ud560 \ub54c. : 22\r\n    \/\/3\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Flush\uc744 \uc218\uc815\ud560 \ub54c. : 23\r\n    \/\/4\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Flush\uc744 \uc218\uc815\ud560 \ub54c. : 24\r\n    \/\/5\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Flush\uc744 \uc218\uc815\ud560 \ub54c. : 25\r\n    \/\/6\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Flush\uc744 \uc218\uc815\ud560 \ub54c. : 26\r\n    \/\/7\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Flush\uc744 \uc218\uc815\ud560 \ub54c. : 27\r\n    \/\/8\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Flush\uc744 \uc218\uc815\ud560 \ub54c. : 28\r\n    \/\/9\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Flush\uc744 \uc218\uc815\ud560 \ub54c. : 29\r\n    \/\/10\ubc88\uc744 \ub20c\ub800\uc744 \ub54c, Flush\uc744\uc218\uc815\ud560 \ub54c. : 30\r\n\r\n    public int getID() {\r\n\r\n        \/\/\uc678\ubd80\uc5d0\uc11c \ubbf8\ub9ac \uc124\uc815\ud55c event id\ub97c \uc544\ub798 \ubd80\ubd84\uc5d0\uc11c \ubc14\uafb8\uc9c0 \uc54a\ub3c4\ub85d \uc124\uc815..\r\n        if(this.id == 0) {\r\n            if (SPEECHFLAG == true) {\r\n                \/\/gap\uc774 \ubaa8\ub450 \ucc28\uc788\uc74c..\r\n                if (thisData.checkGapFulled() == false &amp;&amp; thisData.checkFlushFulled() == false)\r\n                    this.id = 1;\r\n                else if (thisData.checkGapFulled() == true &amp;&amp; thisData.checkFlushFulled() == false)\r\n                    this.id = 3;\r\n            }\r\n\r\n            \/***\r\n             * \uc544\ub798 \ubd80\ubd84\uc740 \ub370\uc774\ud130 \uae30\uc900\uc73c\ub85c \uc774\ubca4\ud2b8\uac00 \uc124\uc815\ub428..\r\n            else if (SPEECHFLAG == false) {\r\n                if (thisData.checkGapFulled() == true &amp;&amp; thisData.checkFlushFulled() == false)\r\n                    this.id = 2;\r\n                else if (thisData.checkGapFulled() == true &amp;&amp; thisData.checkFlushFulled() == true)\r\n                    this.id = 4;\r\n            }\r\n             *\/\r\n        }\r\n        return this.id;\r\n    }\r\n}\r\n\r\n<\/pre>\n<p>\uc774\ubca4\ud2b8\ub294 \uc704\uc640 \uac19\uc774 \ud588\ub2e4. \ucc45\uc5d0\uc11c\ub294 \uc774\ubca4\ud2b8\ub97c \ud310\ub2e8\ud558\ub294 \ud568\uc218\uac00 \uac04\ub7b5\ud574\uc57c \ub41c\ub2e4\uace0 \ud588\ub294\ub370, \ub0b4 \ub2a5\ub825\uc73c\ub85c\ub294 \uc774\ub7f0 \uad6c\ud604\uc774 \uc5b4\ub824\uc6b8 \ub4ef \ud558\ub2e4. \uc0ac\uc6a9\ud560 \ubaa8\ub4e0 \uc774\ubca4\ud2b8\ub97c \ub123\uc5b4 \ubc84\ub838\ub2e4. \uc774\ubca4\ud2b8\ub294 Hsm\uc5d0\uc11c e.getID() \ud568\uc218\ub97c call\ud560 \uacbd\uc6b0, \ud310\ub2e8\uc774 \ub41c\ub2e4.<br \/>\n\ub0b4\uac00 \uc6d0\ud558\ub294 Event \ucc98\ub9ac\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<ol>\n<li>\uc74c\uc131\uc778\uc2dd \ubc84\ud2bc\uc744 \ub20c\ub800\uc744 \uacbd\uc6b0 : e.id = 5<\/li>\n<li>\uc74c\uc131\uc778\uc2dd \ud6c4, \uacb0\uacfc\uac00 \uc81c\ub300\ub85c \ub098\uc654\uc744 \uacbd\uc6b0 : e.id = 1, 3<\/li>\n<li>\uc74c\uc131\uc778\uc2dd \ud6c4, \uacb0\uacfc\uac00 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud560 \uacbd\uc6b0 : e.id = 6<\/li>\n<li>gap\uc758 \ub370\uc774\ud130 10\uac1c\ub97c \ubaa8\ub450 \uc785\ub825\ud588\uc744 \uacbd\uc6b0 : e.id = 2<\/li>\n<li>flush\uc758 \ub370\uc774\ud130 10\uac1c\ub97c \ubaa8\ub450 \uc785\ub825\ud588\uc744 \uacbd\uc6b0 : e.id = 4<\/li>\n<\/ol>\n<p>\uc774\ubca4\ud2b8\ub294 MainActivity\uc5d0\uc11c thread\ub85c \uc2e4\ud589\uc744 \ud588\ub2e4. \uc704\uc5d0\uc11c \ubb38\ub370\ub418\ub294 \ubd80\ubd84\uc774 e.id\uac00 2, 4\uc77c \uacbd\uc6b0\uc774\ub2e4. gap\uc758 \ubaa8\ub4e0 \ub370\uc774\ud130\ub97c \ucc44\uc6cc \ubc84\ub9ac\uba74 \ub2e4\ub978 \uc774\ubca4\ud2b8\ub294 e.getID()\ub97c \uc2e4\ud589\ud560 \ub54c, \uc778\uc2dd\uc774 \ub418\uc9c0 \uc54a\ub294\ub2e4. \uc704 \ubd80\ubd84\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud574\uc11c, \ud2b9\uc815 state\uc5d0\uc11c \ud55c\ubc88\ub9cc \uc77c\uc5b4\ub098\ub3c4\ub85d \ud588\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \" title=\"Event\ucc98\ub9ac\">public State fireEvent(Event e) {\r\n            \/\/\uc544\ub798 e.getID\ub97c \uc2e4\ud589\ud558\uba74\r\n            \/\/\uc774\ubca4\ud2b8 \uc815\uc758\uc2dc \ub0b4\ubd80 \ub370\uc774\ud130\uc5d0 \uc758\ud55c \uae30\uc900\uc73c\ub85c \ud558\uba74\r\n            \/\/\uc77c\uc815 \uc2dc\uc810 \uc774\ud6c4\ub85c\ub294 \uadf8 \ub3d9\uc791\ub9cc \uacc4\uc18d\ub428..\r\n            \/\/\ub0b4\ubd80 \uc774\ubca4\ud2b8, \uc774\ubd80 \uc774\ubca4\ud2b8\ub85c \ubd84\ub9ac.\r\n            \/\/\ub0b4\ubd80 \uc774\ubca4\ud2b8\ub294 \uadf8 state\uc5d0\uc11c\ub9cc \uc2e4\ud589\ub418\ub3c4\ub85d \uc815\uc758\r\n            boolean gapFlag = myGapFlush.checkGapFulled();\r\n            if(gapFlag == true){\r\n                myHsm.this.transition(stateBatchRec_Flush);\r\n                return null;\r\n            }\r\n\r\n            switch (e.getID()) {\r\n                case 1:\r\n                    printMessage(e, \"stateBatchRec_Gap\");\r\n                    int i = myGapFlush.getGapIndex();\r\n                    myGapFlush.setGapIthwithN(i, myGapFlush.getTmpWord());\r\n                    myGapFlush.emptyTmpWord();\r\n                    myHsm.this.transition(stateBatchRec_Gap);\r\n                    myHandle.sendEmptyMessage(1);\r\n                    return null;\r\n                \/***\r\n                case 2:\r\n                    myHsm.this.transition(stateBatchRec_Flush);\r\n                    return null;\r\n                 ***\/\r\n                default:\r\n                    break;\r\n            }\r\n            return getParent();\r\n        }\r\n<\/pre>\n<p>HSM \ub0b4\ubd80\uc758 \uc774\ubca4\ud2b8\uc640 \uc678\ubd80\uc758 \uc774\ubca4\ud2b8\ub97c \uad6c\ubd84\ud574\uc57c \ud560 \ub4ef \ud55c\ub370, \ub531\ud788 \uc5b4\ub5bb\uac8c \ud560\uc9c0\ub97c \ubaa8\ub974\uaca0\ub2e4.<\/p>\n<h2>Handler \uc815\uc758 \ubc0f Message \uc804\uc1a1<\/h2>\n<p>JAVA\ub294 \uc5b4\ub5a4\uc9c0 \ubaa8\ub974\uaca0\ub294\ub370, android\ub294 MainActivity\ub0b4\ubd80\uc5d0 handler\ub97c \uc815\uc758\ud558\uc5ec \uc678\ubd80\uc5d0\uc11c \uba54\uc138\uc9c0\ub97c \ubcf4\ub0b4\ub294 \uad6c\uc870\ub85c \ub418\uc5b4 \uc788\ub2e4. HSM\uc5d0\uc11c \uc77c\uc815\ud55c \uc804\uc774\uac00 \uc77c\uc5b4\ub098\uba74 MainActivity\uc5d0 \uc788\ub294 SpeechRecognizer\ub85c \uc815\uc758 \ub418\uc5b4\uc787\ub294 startListening\uc744 \uc2e4\ud589\ud558\ub3c4\ub85d \ud588\ub2e4.<\/p>\n<h3>MainActivity handler \uc815\uc758<\/h3>\n<pre class=\"lang:java decode:true \" title=\"Handler\">public class MainActivity extends AppCompatActivity {\r\n    Intent i;\r\n    SpeechRecognizer mRecognizer;\r\n    int TvIndex = 0;\r\n    TextView[] TvGap = new TextView[10];\r\n    TextView[] TvFlush = new TextView[10];\r\n    \/\/hsm\uc5d0\uc11c SpeechListener\ub97c \uc81c\uc5b4\ud558\uae30 \uc704\ud574\uc11c.\r\n\r\n    Handler mHandler = new Handler() {\r\n        @Override\r\n        public void handleMessage(Message msg) {\r\n            super.handleMessage(msg);\r\n            \/\/\uc74c\uc131\uc778\uc2dd \uc2dc\uc791\ubd80\ubd84..\r\n            if (msg.what == 1)\r\n                mRecognizer.startListening(i);\r\n        }\r\n    };<\/pre>\n<h3>Hsm\uc5d0\uc11c handler \ucd08\uae30\ud654 \ubc0f message \uc804\uc1a1<\/h3>\n<p>HSM\uc744 \ub9cc\ub4e4 \ub584, MainActvity\uc5d0\uc11c \ub9cc\ub4e0 handler\ub85c \ucd08\uae30\ud654 \ud588\ub2e4. \uba54\uc138\uc9c0\ub294 \uad6c\uc870\ub294 \uc798 \ubaa8\ub974\uaca0\uc73c\ub098, \uac04\ub2e8\ud55c \uba54\uc138\uc9c0\ub97c sendEmptyMessage\ub85c \ubcf4\ub0c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\" title=\"HSM handler\">public class myHsm extends Hsm {\r\n    int myFoo;\r\n    DataGapFlush myGapFlush;\r\n    Handler myHandle;\r\n\r\n\r\n    public myHsm(DataGapFlush myDataInst, Handler handle) {\r\n        this.myGapFlush = myDataInst;\r\n        this.myHandle = handle;\r\n    }\r\n\r\n\r\n\r\npublic State fireEvent(Event e) {\r\n            switch (e.getID()) {\r\n                case 5:\r\n                    printMessage(e, \"stateBatchRec\");\r\n                    \/\/myHandle.sendMessage(myHandle.obtainMessage());\r\n                    myHandle.sendEmptyMessage(1);\r\n                    myHsm.this.transition(stateBatchRec);\r\n                    return null;\r\n                default:\r\n                    break;\r\n            }\r\n            return getParent();\r\n        }\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\uc548\ub4dc\ub85c\uc774\ub4dc \uc571 \uac1c\ubc1c\uae30 1 \uad6c\uae00 \uc74c\uc131\uc778\uc2dd API\ub97c \ud65c\uc6a9\ud55c \uae30\ub85d\uae30 \uc77c\ud558\ub294 \uc8fc\ubcc0\uc5d0 \ud544\uc694\ud55c \ub3c4\uad6c\ub97c \ub9cc\ub4e4\uc5b4 \uc4f0\uae30\ub85c \ud588\ub2e4. \ud734\ub300\ud3f0\uc5d0 \uc0ac\uc6a9\ub418\ub294 \uc548\ub4dc\ub85c\uc774\ub4dc os\uac00 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1297,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[12],"tags":[99,83,98],"class_list":["post-1290","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-12","tag-android","tag-fsm","tag-java"],"jetpack_featured_media_url":"https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2017\/03\/20170305_203558.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/1290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/comments?post=1290"}],"version-history":[{"count":4,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/1290\/revisions"}],"predecessor-version":[{"id":1296,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/1290\/revisions\/1296"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/media\/1297"}],"wp:attachment":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/media?parent=1290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/categories?post=1290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/tags?post=1290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}