{"componentChunkName":"component---node-modules-narative-gatsby-theme-novela-src-templates-article-template-tsx","path":"/(algorithm)-day-of-programmer","result":{"pageContext":{"article":{"id":"bc2133b0-222b-5b79-822c-2614b131768b","slug":"/(algorithm)-day-of-programmer","secret":false,"title":"(Algorithm) Day of Programmer","author":"Reno Kim","date":"February 17th, 2020","dateForSEO":"2020-02-17T00:00:00.000Z","timeToRead":1,"excerpt":"Day of the Programmer 를 찾는 알고리즘 만들기!","canonical_url":null,"subscription":true,"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"(Algorithm) Day of Programmer\",\n  \"author\": \"Reno Kim\",\n  \"date\": \"2020-02-17T00:00:00.000Z\",\n  \"hero\": \"./images/hero.jpeg\",\n  \"excerpt\": \"Day of the Programmer 를 찾는 알고리즘 만들기!\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h2\", {\n    \"id\": \"day-of-the-programmer\"\n  }, \"Day of the Programmer\"), mdx(\"h3\", {\n    \"id\": \"problem-hackerrank\"\n  }, \"Problem \", mdx(\"a\", _extends({\n    parentName: \"h3\"\n  }, {\n    \"href\": \"https://www.hackerrank.com/challenges/day-of-the-programmer/problem\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }), \"HackerRank\")), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Marie \\uB294 \\uD0C0\\uC784 \\uBA38\\uC2E0\\uC744 \\uAC1C\\uBC1C\\uD588\\uACE0, 1700\\uB144\\uB3C4 \\uBD80\\uD130 2700\\uB144\\uB3C4 \\uC0AC\\uC774\\uC758 \\uD55C \\uD574\\uC911\\uC5D0 Day of the Programmer (\\uADF8 \\uD574\\uC758 256\\uBC88\\uC9F8 \\uB0A0) \\uB7EC\\uC2DC\\uC544\\uB97C \\uC2DC\\uAC04 \\uC5EC\\uD589\\uC744 \\uD568\\uC73C\\uB85C\\uC368 \\uD14C\\uC2A4\\uD2B8\\uD558\\uACE0 \\uC2F6\\uC5C8\\uB2E4. \"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"1700~1917 \\uC740 \\uC728\\uB9AC\\uC6B0\\uC2A4\\uB825\\uC744 \\uC0AC\\uC6A9\\uD588\\uACE0 1919 \\uBD80\\uD130\\uB294 \\uADF8\\uB808\\uACE0\\uB9AC\\uB825\\uC744 \\uC0AC\\uC6A9\\uD588\\uB2E4.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"1918\\uB144\\uC5D0\\uB294 \\uC728\\uB9AC\\uC6B0\\uC2A4\\uB825\\uC5D0\\uC11C \\uADF8\\uB808\\uACE0\\uB9AC\\uB825\\uC73C\\uB85C \\uBC14\\uB00C\\uC5C8\\uB294\\uB370, 1\\uC6D4 31\\uC77C \\uB2E4\\uC74C\\uB0A0\\uC740 2\\uC6D4 14\\uC77C \\uC774\\uC5C8\\uB2E4.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\uB450 \\uAC00\\uC9C0 \\uB2EC\\uB825 \\uBAA8\\uB450 \\uC724\\uB2EC\\uC5D0\\uB294 29\\uC77C\\uC774\\uB2E4. \\uB098\\uBA38\\uC9C0\\uB294 28\\uC77C\\uC774\\uACE0 (2\\uC6D4\\uB9CC)\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\uC728\\uB9AC\\uC6B0\\uC2A4\\uB825\\uC5D0\\uC11C \\uC724\\uB2EC\\uC740 4\\uB144\\uB9C8\\uB2E4 \\uC788\\uACE0 \\uADF8\\uB808\\uACE0\\uB9AC\\uB825\\uC740 400\\uC640 4\\uB85C \\uB098\\uB204\\uC5B4\\uC9C0\\uACE0 100\\uC73C\\uB85C \\uB098\\uB204\\uC5B4\\uC9C0\\uC9C0 \\uC54A\\uB294 \\uB2EC\\uC774\\uB2E4.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\uC5F0\\uB3C4 y\\uAC00 \\uC8FC\\uC5B4\\uC84C\\uC744 \\uB54C \\uADF8 \\uD574\\uC758 Day of the Programmer\\uB97C \\uCC3E\\uC544\\uB77C\\n\\uB2E8, string foramt = \\u201Cdd.mm.yyyy\\u201D \\uB2E4\")), mdx(\"h2\", {\n    \"id\": \"julian-calendar-율리우스력\"\n  }, \"Julian calendar \", mdx(\"a\", _extends({\n    parentName: \"h2\"\n  }, {\n    \"href\": \"https://ko.wikipedia.org/wiki/%EC%9C%A8%EB%A6%AC%EC%9A%B0%EC%8A%A4%EB%A0%A5\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }), \"(\\uC728\\uB9AC\\uC6B0\\uC2A4\\uB825)\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"4\\uB144 \\uB9C8\\uB2E4 2\\uC6D4 29\\uC77C \\uCD94\\uAC00\\uD568\")), mdx(\"h2\", {\n    \"id\": \"gregorian-calender-그레고리력\"\n  }, \"Gregorian calender \", mdx(\"a\", _extends({\n    parentName: \"h2\"\n  }, {\n    \"href\": \"https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%A0%88%EA%B3%A0%EB%A6%AC%EB%A0%A5\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }), \"(\\uADF8\\uB808\\uACE0\\uB9AC\\uB825)\")), mdx(\"p\", null, \"\\uC728\\uB9AC\\uC6B0\\uC2A4\\uB825\\uC740 \\uC2E4\\uC9C8\\uC801\\uC778 \\uC7A5\\uC810\\uC5D0\\uB3C4 \\uBD88\\uAD6C\\uD558\\uACE0 \\uCC9C\\uBB38\\uD559\\uC801 \\uD587\\uC218\\uC640 \\uB0A0\\uC758 \\uACC4\\uC0B0\\uC5D0\\uC11C \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\uC791\\uC740 \\uD3B8\\uCC28\"), \"\\uAC00 \\uC788\\uC5C8\\uB2E4.\\n\\uC989, \\uC728\\uB9AC\\uC6B0\\uC2A4\\uB825\\uC758 \\uD55C \\uD574\\uC758 \\uAE38\\uC774\\uB294 \\uC815\\uD655\\uD788 365\\uC77C 6\\uC2DC\\uAC04\\uC774\\uBA70, \\uC774\\uB294 \\uCC9C\\uBB38\\uD559\\uC801\\uC73C\\uB85C \\uACC4\\uC0B0\\uD55C 1\\uB144\\uC758 \\uAE38\\uC774\\uBCF4\\uB2E4 \\uC57D 11\\uBD84 14\\uCD08\\uAC00 \\uAE38\\uB2E4.\\n\\uC774 \\uD3B8\\uCC28\\uAC00 \\uC81C1\\uCC28 \\uB2C8\\uCF00\\uC544 \\uACF5\\uC758\\uD68C\\uB85C\\uBD80\\uD130 1,250\\uC5EC \\uB144 \\uB3D9\\uC548 \\uB204\\uC801\\uB41C 16\\uC138\\uAE30 \\uD6C4\\uBC18\\uC5D0 \\uC774\\uB974\\uB7EC\\uC11C\\uB294 \\uCD98\\uBD84\\uC77C\\uC774 325\\uB144 \\uB2F9\\uC2DC\\uBCF4\\uB2E4 \\uC5F4\\uD758\\uC774 \\uBE68\\uB77C\\uC9C4 3\\uC6D4 11\\uC77C \\uC988\\uC74C\\uC774 \\uB418\\uC5B4 \\uB2EC\\uB825\\uC5D0 \\uD070 \\uC624\\uCC28\\uAC00 \\uC0DD\\uACBC\\uB2E4.\\n\\uD2B8\\uB9AC\\uC5D4\\uD2B8 \\uACF5\\uC758\\uD68C(1545~1563)\\uC5D0\\uC11C \\uAD50\\uD669\\uC5D0\\uAC8C \\uC5ED\\uBC95 \\uAC1C\\uC815\\uC5D0 \\uB300\\uD55C \\uAD8C\\uD55C\\uC774 \\uBD80\\uC5EC\\uB418\\uACE0 \\uC774 \\uC624\\uCC28\\uB97C \\uC904\\uC774\\uAE30 \\uC704\\uD558\\uC5EC 1582\\uB144 10\\uC6D4 4\\uC77C \\uAD50\\uD669 \\uADF8\\uB808\\uACE0\\uB9AC\\uC624 13\\uC138\\uAC00 \\uC728\\uB9AC\\uC6B0\\uC2A4\\uB825\\uC744 \\uAC1C\\uC815\\uD558\\uC600\\uACE0,\\n\\uAC1C\\uC815\\uD55C \\uB2EC\\uB825\\uC740 \\uADF8\\uC758 \\uC774\\uB984\\uC744 \\uB530\\uC11C \\uADF8\\uB808\\uACE0\\uB9AC\\uB825\\uC73C\\uB85C \\uBD80\\uB974\\uAC8C \\uB418\\uC5C8\\uB2E4.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"1582\\uB144 10\\uC6D4 4\\uC77C(\\uBAA9) \\uB2E4\\uC74C\\uB0A0\\uC744 1582\\uB144 10\\uC6D4 15\\uC77C(\\uAE08)\\uB85C \\uD55C\\uB2E4.(\\uC704\\uC5D0\\uC11C \\uC124\\uBA85\\uD55C \\uC5F4\\uD758\\uC758 \\uD3B8\\uCC28\\uB97C \\uC81C\\uAC70\\uD568)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"4\\uC758 \\uBC30\\uC218\\uC778 \\uD574\\uB97C \\uC724\\uB144\\uC73C\\uB85C \\uD55C\\uB2E4. \\uADF8\\uB7EC\\uB098 100\\uC73C\\uB85C \\uB098\\uB20C \\uC218 \\uC788\\uC9C0\\uB9CC 400\\uC73C\\uB85C \\uB098\\uB258\\uC5B4 \\uB5A8\\uC5B4\\uC9C0\\uC9C0 \\uC54A\\uB294 \\uD574\\uB294 \\uC608\\uC678\\uB85C \\uD3C9\\uB144\\uC73C\\uB85C \\uD55C\\uB2E4.\")), mdx(\"h2\", {\n    \"id\": \"solution\"\n  }, \"Solution\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-java\"\n  }), \"import java.io.*;\\nimport java.math.*;\\nimport java.security.*;\\nimport java.text.*;\\nimport java.util.*;\\nimport java.util.concurrent.*;\\nimport java.util.function.*;\\nimport java.util.regex.*;\\nimport java.util.stream.*;\\nimport static java.util.stream.Collectors.joining;\\nimport static java.util.stream.Collectors.toList;\\n\\npublic class Solution {\\n\\n    // Complete the dayOfProgrammer function below.\\n    static String dayOfProgrammer(int year) {\\n        String result = null;\\n        //\\uC728\\uB9AC\\uC6B0\\uC2A4\\uB825?\\n        if(year <= 1917) {\\n            // \\uC724\\uB2EC?\\n            if(year % 4 == 0) {\\n                // 9\\uC6D4 12\\n                result = \\\"12.09.\\\";\\n            } else {\\n                // 9\\uC6D4 13\\n                result = \\\"13.09.\\\";\\n            }\\n        //\\uADF8\\uB808\\uACE0\\uB9AC\\uB825?    \\n        } else if (year >= 1919) {\\n            //\\uC724\\uB2EC?\\n            if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {\\n                // 9\\uC6D4 12\\n                result = \\\"12.09.\\\";\\n            } else {\\n                // 9\\uC6D4 13\\n                result = \\\"13.09.\\\";\\n            }\\n        //1918?\\n        } else {\\n            // 9\\uC6D4 26\\n            result = \\\"26.09.\\\";\\n        }\\n\\n        return result + year;\\n    }\\n\\n    public static void main(String[] args) throws IOException {\\n        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));\\n        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv(\\\"OUTPUT_PATH\\\")));\\n\\n        int year = Integer.parseInt(bufferedReader.readLine().trim());\\n\\n        String result = dayOfProgrammer(year);\\n\\n        bufferedWriter.write(result);\\n        bufferedWriter.newLine();\\n\\n        bufferedReader.close();\\n        bufferedWriter.close();\\n    }\\n}\\n\")));\n}\n;\nMDXContent.isMDXComponent = true;","hero":{"full":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIEBf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHrzqRKlf/EABkQAQEAAwEAAAAAAAAAAAAAAAECAAMQEf/aAAgBAQABBQJpKNjkvs9//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGRAAAgMBAAAAAAAAAAAAAAAAAAERIDGR/9oACAEBAAY/AmauE0//xAAcEAEAAgEFAAAAAAAAAAAAAAABABExECFBYfD/2gAIAQEAAT8hOFA4szEG4+dyi1Yn/9oADAMBAAIAAwAAABD4D//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAgEBPxAMn//EABsQAQACAgMAAAAAAAAAAAAAAAEAERBRMWFx/9oACAEBAAE/ED6er28PSJF3VmHSKXWQBQAdT//Z","aspectRatio":1.7744360902255638,"src":"/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/3bf7d/hero.jpg","srcSet":"/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/e0f30/hero.jpg 236w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/86afd/hero.jpg 472w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/3bf7d/hero.jpg 640w","srcWebp":"/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/f461a/hero.webp","srcSetWebp":"/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/77392/hero.webp 236w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/1f177/hero.webp 472w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/f461a/hero.webp 640w","sizes":"(max-width: 640px) 100vw, 640px"},"regular":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIEBf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHrzqRKlf/EABkQAQEAAwEAAAAAAAAAAAAAAAECAAMQEf/aAAgBAQABBQJpKNjkvs9//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGRAAAgMBAAAAAAAAAAAAAAAAAAERIDGR/9oACAEBAAY/AmauE0//xAAcEAEAAgEFAAAAAAAAAAAAAAABABExECFBYfD/2gAIAQEAAT8hOFA4szEG4+dyi1Yn/9oADAMBAAIAAwAAABD4D//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAgEBPxAMn//EABsQAQACAgMAAAAAAAAAAAAAAAEAERBRMWFx/9oACAEBAAE/ED6er28PSJF3VmHSKXWQBQAdT//Z","aspectRatio":1.7717391304347827,"src":"/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/3bf7d/hero.jpg","srcSet":"/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/3a5ce/hero.jpg 163w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/05730/hero.jpg 327w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/3bf7d/hero.jpg 640w","srcWebp":"/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/f461a/hero.webp","srcSetWebp":"/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/ac59e/hero.webp 163w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/7660b/hero.webp 327w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/f461a/hero.webp 640w","sizes":"(max-width: 640px) 100vw, 640px"},"narrow":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIEBf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHrzqRKlf/EABkQAQEAAwEAAAAAAAAAAAAAAAECAAMQEf/aAAgBAQABBQJpKNjkvs9//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGRAAAgMBAAAAAAAAAAAAAAAAAAERIDGR/9oACAEBAAY/AmauE0//xAAcEAEAAgEFAAAAAAAAAAAAAAABABExECFBYfD/2gAIAQEAAT8hOFA4szEG4+dyi1Yn/9oADAMBAAIAAwAAABD4D//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAgEBPxAMn//EABsQAQACAgMAAAAAAAAAAAAAAAEAERBRMWFx/9oACAEBAAE/ED6er28PSJF3VmHSKXWQBQAdT//Z","aspectRatio":1.78125,"src":"/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/eaa58/hero.jpg","srcSet":"/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/5a3ee/hero.jpg 114w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/41f8f/hero.jpg 229w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/eaa58/hero.jpg 457w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/3bf7d/hero.jpg 640w","srcWebp":"/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/15384/hero.webp","srcSetWebp":"/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/31fce/hero.webp 114w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/e3e25/hero.webp 229w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/15384/hero.webp 457w,\n/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/f461a/hero.webp 640w","sizes":"(max-width: 457px) 100vw, 457px"},"seo":{"src":"/static/70c655aed5f0d7e0f20d3eeb72d5ecfa/3bf7d/hero.jpg"}}},"authors":[{"authorsPage":true,"bio":"Hi, I'm Reno.\nI am an Android developer and love to play games and cook and kickboard.\nMy favorite word is that it's not over until the end.\n","id":"3e9ccc1b-53d9-552d-a736-92a82c29fb2a","name":"Reno Kim","featured":true,"social":[{"url":"https://www.linkedin.com/in/renovatio0424"},{"url":"https://github.com/renovatio0424"}],"slug":"/authors/reno-kim","avatar":{"small":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIDAQQF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAwEE/9oADAMBAAIQAxAAAAGnauhF47BBtkFsmLl//8QAGxABAQACAwEAAAAAAAAAAAAAAgEDEQATIjP/2gAIAQEAAQUCxmimLeb6ZGQe3Yd27zHfcEt//8QAGhEAAgIDAAAAAAAAAAAAAAAAAREAAgMQM//aAAgBAwEBPwEYyQ4lK89f/8QAFxEBAAMAAAAAAAAAAAAAAAAAEAERMf/aAAgBAgEBPwGydP/EABwQAAICAgMAAAAAAAAAAAAAAAABESECEDFBcf/aAAgBAQAGPwKcbIaUaUK+iU7XKGxay9P/xAAcEAEAAgIDAQAAAAAAAAAAAAABABEhUTFBYfD/2gAIAQEAAT8hZlpqJo1LxDSDqOtju2phdh8p70xtZcRQekbk+E//2gAMAwEAAgADAAAAEEPYP//EABgRAQADAQAAAAAAAAAAAAAAAAEAEBFR/9oACAEDAQE/EOfMUsaldn//xAAYEQACAwAAAAAAAAAAAAAAAAAAARARIf/aAAgBAgEBPxDDFUn/xAAeEAEBAAICAgMAAAAAAAAAAAABEQAhMUFRcYGRwf/aAAgBAQABPxA6LCB2F558Y7umvO8P3jPtAP3CQECNBq4qvew9vjGdI0h1jiVCwuJg8g3smR0SQNARn//Z","aspectRatio":1,"src":"/static/fd36d5b8be98b6b35c5ea46e0a863cf4/fa1ea/reno-profile.jpg","srcSet":"/static/fd36d5b8be98b6b35c5ea46e0a863cf4/afb2b/reno-profile.jpg 13w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/7c20e/reno-profile.jpg 25w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/fa1ea/reno-profile.jpg 50w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/03612/reno-profile.jpg 75w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/61cdf/reno-profile.jpg 100w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/1920d/reno-profile.jpg 1080w","srcWebp":"/static/fd36d5b8be98b6b35c5ea46e0a863cf4/e7b2c/reno-profile.webp","srcSetWebp":"/static/fd36d5b8be98b6b35c5ea46e0a863cf4/58718/reno-profile.webp 13w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/74aad/reno-profile.webp 25w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/e7b2c/reno-profile.webp 50w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/ed320/reno-profile.webp 75w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/66016/reno-profile.webp 100w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/4c77b/reno-profile.webp 1080w","sizes":"(max-width: 50px) 100vw, 50px"},"medium":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIDAQQF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAwEE/9oADAMBAAIQAxAAAAGnauhF47BBtkFsmLl//8QAGxABAQACAwEAAAAAAAAAAAAAAgEDEQATIjP/2gAIAQEAAQUCxmimLeb6ZGQe3Yd27zHfcEt//8QAGhEAAgIDAAAAAAAAAAAAAAAAAREAAgMQM//aAAgBAwEBPwEYyQ4lK89f/8QAFxEBAAMAAAAAAAAAAAAAAAAAEAERMf/aAAgBAgEBPwGydP/EABwQAAICAgMAAAAAAAAAAAAAAAABESECEDFBcf/aAAgBAQAGPwKcbIaUaUK+iU7XKGxay9P/xAAcEAEAAgIDAQAAAAAAAAAAAAABABEhUTFBYfD/2gAIAQEAAT8hZlpqJo1LxDSDqOtju2phdh8p70xtZcRQekbk+E//2gAMAwEAAgADAAAAEEPYP//EABgRAQADAQAAAAAAAAAAAAAAAAEAEBFR/9oACAEDAQE/EOfMUsaldn//xAAYEQACAwAAAAAAAAAAAAAAAAAAARARIf/aAAgBAgEBPxDDFUn/xAAeEAEBAAICAgMAAAAAAAAAAAABEQAhMUFRcYGRwf/aAAgBAQABPxA6LCB2F558Y7umvO8P3jPtAP3CQECNBq4qvew9vjGdI0h1jiVCwuJg8g3smR0SQNARn//Z","aspectRatio":1,"src":"/static/fd36d5b8be98b6b35c5ea46e0a863cf4/61cdf/reno-profile.jpg","srcSet":"/static/fd36d5b8be98b6b35c5ea46e0a863cf4/7c20e/reno-profile.jpg 25w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/fa1ea/reno-profile.jpg 50w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/61cdf/reno-profile.jpg 100w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/59538/reno-profile.jpg 150w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/fd013/reno-profile.jpg 200w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/1920d/reno-profile.jpg 1080w","srcWebp":"/static/fd36d5b8be98b6b35c5ea46e0a863cf4/66016/reno-profile.webp","srcSetWebp":"/static/fd36d5b8be98b6b35c5ea46e0a863cf4/74aad/reno-profile.webp 25w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/e7b2c/reno-profile.webp 50w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/66016/reno-profile.webp 100w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/d9b14/reno-profile.webp 150w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/6b183/reno-profile.webp 200w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/4c77b/reno-profile.webp 1080w","sizes":"(max-width: 100px) 100vw, 100px"},"large":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIDAQQF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAwEE/9oADAMBAAIQAxAAAAGnauhF47BBtkFsmLl//8QAGxABAQACAwEAAAAAAAAAAAAAAgEDEQATIjP/2gAIAQEAAQUCxmimLeb6ZGQe3Yd27zHfcEt//8QAGhEAAgIDAAAAAAAAAAAAAAAAAREAAgMQM//aAAgBAwEBPwEYyQ4lK89f/8QAFxEBAAMAAAAAAAAAAAAAAAAAEAERMf/aAAgBAgEBPwGydP/EABwQAAICAgMAAAAAAAAAAAAAAAABESECEDFBcf/aAAgBAQAGPwKcbIaUaUK+iU7XKGxay9P/xAAcEAEAAgIDAQAAAAAAAAAAAAABABEhUTFBYfD/2gAIAQEAAT8hZlpqJo1LxDSDqOtju2phdh8p70xtZcRQekbk+E//2gAMAwEAAgADAAAAEEPYP//EABgRAQADAQAAAAAAAAAAAAAAAAEAEBFR/9oACAEDAQE/EOfMUsaldn//xAAYEQACAwAAAAAAAAAAAAAAAAAAARARIf/aAAgBAgEBPxDDFUn/xAAeEAEBAAICAgMAAAAAAAAAAAABEQAhMUFRcYGRwf/aAAgBAQABPxA6LCB2F558Y7umvO8P3jPtAP3CQECNBq4qvew9vjGdI0h1jiVCwuJg8g3smR0SQNARn//Z","aspectRatio":1,"src":"/static/fd36d5b8be98b6b35c5ea46e0a863cf4/ec46e/reno-profile.jpg","srcSet":"/static/fd36d5b8be98b6b35c5ea46e0a863cf4/a2637/reno-profile.jpg 82w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/15203/reno-profile.jpg 164w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/ec46e/reno-profile.jpg 328w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/b69a5/reno-profile.jpg 492w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/23a36/reno-profile.jpg 656w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/1920d/reno-profile.jpg 1080w","srcWebp":"/static/fd36d5b8be98b6b35c5ea46e0a863cf4/5a48e/reno-profile.webp","srcSetWebp":"/static/fd36d5b8be98b6b35c5ea46e0a863cf4/2d087/reno-profile.webp 82w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/29d87/reno-profile.webp 164w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/5a48e/reno-profile.webp 328w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/42f2e/reno-profile.webp 492w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/dec03/reno-profile.webp 656w,\n/static/fd36d5b8be98b6b35c5ea46e0a863cf4/4c77b/reno-profile.webp 1080w","sizes":"(max-width: 328px) 100vw, 328px"}}}],"basePath":"/","permalink":"https://reno-blog.netlify.app/(algorithm)-day-of-programmer/","slug":"/(algorithm)-day-of-programmer","id":"bc2133b0-222b-5b79-822c-2614b131768b","title":"(Algorithm) Day of Programmer","canonicalUrl":null,"mailchimp":"","next":[{"id":"6c1c895b-f1fd-5478-9bdb-a34a7e05f478","slug":"/android","secret":false,"title":"Android 번역 관리 툴 추천","author":"Reno Kim","date":"May 26th, 2019","dateForSEO":"2019-05-26T00:00:00.000Z","timeToRead":1,"excerpt":"Android String 리소스 파일 관리 툴을 추천하는 글입니다.","canonical_url":null,"subscription":true,"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Android 번역 관리 툴 추천\",\n  \"author\": \"Reno Kim\",\n  \"date\": \"2019-05-26T00:00:00.000Z\",\n  \"hero\": \"./images/hero.png\",\n  \"excerpt\": \"Android String 리소스 파일 관리 툴을 추천하는 글입니다.\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"\\uC548\\uB155\\uD558\\uC138\\uC694 Reno \\uC785\\uB2C8\\uB2E4.\"), mdx(\"p\", null, \"\\uC774\\uBC88\\uC5D0\\uB294 \\uC81C\\uAC00 \\uC5C5\\uBB34\\uB97C \\uD1B5\\uD574\\uC11C \\uC54C\\uAC8C\\uB41C LOCO\\uB77C\\uB294 \\uD234\\uC5D0 \\uB300\\uD574\\uC11C \\uACF5\\uC720\\uB97C \\uD574\\uBCFC\\uAE4C \\uD569\\uB2C8\\uB2E4.\"), mdx(\"p\", null, \"\\uC774\\uC804\\uC5D0\\uB294 \\uBC88\\uC5ED \\uBB38\\uAD6C\\uB97C \\uAD6C\\uAE00 \\uC2A4\\uD504\\uB808\\uB4DC \\uC2DC\\uD2B8\\uB85C \\uAD00\\uB9AC\\uD558\\uACE0 \\uC788\\uC5C8\\uB294\\uB370 \\uBC14\\uAFB8\\uAE38 \\uC798\\uD588\\uB2E4\\uB294 \\uC0DD\\uAC01\\uC774 \\uB4E4\\uC5B4\\uC11C\"), mdx(\"p\", null, \"LOCO\\uC758 \\uC7A5\\uB2E8\\uC810 \\uBC0F \\uC0AC\\uC6A9 \\uD6C4\\uAE30\\uB97C \\uACF5\\uC720\\uD574\\uBCF4\\uB824\\uACE0\\uD569\\uB2C8\\uB2E4. :)\"), mdx(\"h1\", {\n    \"id\": \"1-loco란\"\n  }, \"1. LOCO\\uB780?\"), mdx(\"p\", null, \"LOCO\\uB780 \\uBC88\\uC5ED\\uAD00\\uB9AC\\uD234\\uC785\\uB2C8\\uB2E4.\"), mdx(\"p\", null, \"\\uBC88\\uC5ED \\uC694\\uCCAD\\uD558\\uACE0 \\uBC88\\uC5ED\\uD558\\uACE0 \\uC801\\uC6A9\\uD558\\uB294 \\uC77C\\uB828\\uC758 \\uACFC\\uC815\\uC744 LOCO\\uB77C\\uB294 \\uD234\\uC744 \\uD1B5\\uD574 \\uD55C\\uBC88\\uC5D0 \\uAD00\\uB9AC\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\"), mdx(\"p\", null, \"\\uB9CC\\uC57D \\uAE00\\uB85C\\uBC8C \\uC11C\\uBE44\\uC2A4\\uB97C \\uD558\\uACE0 \\uACC4\\uC2DC\\uB2E4\\uBA74 \\uB2E4\\uC591\\uD55C \\uC5B8\\uC5B4\\uB4E4\\uC744 \\uBC88\\uC5ED\\uD558\\uB294 \\uACFC\\uC815\\uC744 \\uAC70\\uCE58\\uC2DC\\uAC8C \\uB418\\uC2E4\\uD150\\uB370\\uC694\"), mdx(\"p\", null, \"\\uC9C0\\uC6D0\\uD558\\uB294 \\uC5B8\\uC5B4\\uAC00 \\uB9CE\\uC73C\\uBA74 \\uB9CE\\uC744 \\uC218\\uB85D \\uAD00\\uB9AC\\uD558\\uAE30 \\uC27D\\uC9C0\\uAC00 \\uC54A\\uC2B5\\uB2C8\\uB2E4.\"), mdx(\"p\", null, \"\\uD604\\uC7AC \\uC5BC\\uB9C8\\uB098 \\uC9C4\\uD589\\uB418\\uACE0 \\uC788\\uB294\\uC9C0 \\uC5D1\\uC140\\uB85C \\uC27D\\uAC8C \\uD30C\\uC545\\uC774 \\uB418\\uC9C0 \\uC54A\\uC8E0.\"), mdx(\"p\", null, \"\\uBC88\\uC5ED \\uAD00\\uB9AC\\uB97C \\uC880 \\uB354 \\uD3B8\\uD558\\uACE0 \\uC27D\\uAC8C \\uD558\\uACE0 \\uC2F6\\uC740 \\uBD84\\uB4E4\\uC5D0\\uAC8C \\uCD94\\uCC9C\\uD574\\uB4DC\\uB9BD\\uB2C8\\uB2E4.\"), mdx(\"p\", null, mdx(\"img\", _extends({\n    parentName: \"p\"\n  }, {\n    \"src\": \"./images/loco_home.PNG\",\n    \"alt\": \"loco home\"\n  }))), mdx(\"p\", null, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://localise.biz/about\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }), \"LOCO \\uD648\\uD398\\uC774\\uC9C0\")), mdx(\"h1\", {\n    \"id\": \"2-장점\"\n  }, \"2. \\uC7A5\\uC810?\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"\\uC7A5\\uC810 1 : \\uD50C\\uB7AB\\uD3FC\\uC774 \\uC9C0\\uC6D0\\uD558\\uB294 \\uC2A4\\uD2B8\\uB9C1 \\uD30C\\uC77C \\uD3EC\\uB9F7\\uC5D0 \\uB9DE\\uAC8C \\uBC14\\uAFD4\\uC90D\\uB2C8\\uB2E4.\"), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"  \", mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"557px\"\n    }\n  }), \"\\n      \", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"117.7737881508079%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAYABQDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAEEBQID/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB0+59TISLcBSB/8QAHRABAAEEAwEAAAAAAAAAAAAAAgMAARITBBQyM//aAAgBAQABBQIxnHUKnNix4rlfTZYx9g1Ks1//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAdEAACAQQDAAAAAAAAAAAAAAAAASECEBExUXGB/9oACAEBAAY/AlBojgXVvCk0zKP/xAAcEAACAgIDAAAAAAAAAAAAAAABEQAxECFhcYH/2gAIAQEAAT8hN1qE4MURQh/FinpAe3qhiRriAluf/9oADAMBAAIAAwAAABAgxzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEAAgEDBQAAAAAAAAAAAAABABEhMUFhUZGh0fD/2gAIAQEAAT8Qbl1ZU4hus8QqSo0dcyhXSjwQRgX6ssUDkBQUwcw3e0e4TEDTVP/Z')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  })), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n        \", mdx(\"source\", _extends({\n    parentName: \"picture\"\n  }, {\n    \"srcSet\": [\"/static/246beb94c90ee67ece549d90ce263a1e/20b7d/loco_format.webp 557w\"],\n    \"sizes\": \"(max-width: 557px) 100vw, 557px\",\n    \"type\": \"image/webp\"\n  })), \"\\n        \", mdx(\"source\", _extends({\n    parentName: \"picture\"\n  }, {\n    \"srcSet\": [\"/static/246beb94c90ee67ece549d90ce263a1e/cc6ee/loco_format.jpg 557w\"],\n    \"sizes\": \"(max-width: 557px) 100vw, 557px\",\n    \"type\": \"image/jpeg\"\n  })), \"\\n        \", mdx(\"img\", _extends({\n    parentName: \"picture\"\n  }, {\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/246beb94c90ee67ece549d90ce263a1e/cc6ee/loco_format.jpg\",\n    \"alt\": \"loco format\",\n    \"title\": \"loco format\",\n    \"loading\": \"lazy\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    }\n  })), \"\\n      \"), \"\\n    \")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"  JSON\\uBD80\\uD130 Android, IOS\\uC5D0 \\uB9DE\\uB294 \\uC2A4\\uD2B8\\uB9C1 \\uD3EC\\uB9F7\\uC744 \\uC9C0\\uC6D0\\uD558\\uAE30 \\uB54C\\uBB38\\uC5D0 \\uC5D1\\uC140 \\uC0AC\\uC6A9\\uC2DC \\uBB38\\uAD6C\\uB97C \\uBCF5\\uBD99\\uD558\\uAC70\\uB098 \\uD30C\\uC77C\\uC744 \\uCEE8\\uBC84\\uD305\\uD574\\uC8FC\\uB294 \\uACFC\\uC815\\uC774 \\uD544\\uC694\\uC5C6\\uC2B5\\uB2C8\\uB2E4.\\n\\uAC1C\\uBC1C\\uC790\\uC5D0\\uAC90 \\uB108\\uBB34 \\uD3B8\\uD558\\uC8E0 \\u314E\\u314E\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"\\uC7A5\\uC810 2 : API\\uB97C \\uC9C0\\uC6D0\\uD569\\uB2C8\\uB2E4.\"), mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"496px\"\n    }\n  }), \"\\n      \", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"24.395161290322584%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAFABQDASIAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAAAAEDBf/EABQBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAda0CQv/xAAXEAEAAwAAAAAAAAAAAAAAAAABAhAR/9oACAEBAAEFAortf//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAEDAQE/ASf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAUEAEAAAAAAAAAAAAAAAAAAAAQ/9oACAEBAAY/An//xAAXEAEAAwAAAAAAAAAAAAAAAAABEBGR/9oACAEBAAE/IUMayf/aAAwDAQACAAMAAAAQe8//xAAVEQEBAAAAAAAAAAAAAAAAAAAQMf/aAAgBAwEBPxCD/8QAFhEAAwAAAAAAAAAAAAAAAAAAARAx/9oACAECAQE/EBF//8QAGhAAAgIDAAAAAAAAAAAAAAAAAREAEDFBcf/aAAgBAQABPxA/ihpEN9gbzX//2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  })), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n        \", mdx(\"source\", _extends({\n    parentName: \"picture\"\n  }, {\n    \"srcSet\": [\"/static/e89393db7d2c36795aa40b1a57a85199/2a9fe/loco_api.webp 496w\"],\n    \"sizes\": \"(max-width: 496px) 100vw, 496px\",\n    \"type\": \"image/webp\"\n  })), \"\\n        \", mdx(\"source\", _extends({\n    parentName: \"picture\"\n  }, {\n    \"srcSet\": [\"/static/e89393db7d2c36795aa40b1a57a85199/3f615/loco_api.jpg 496w\"],\n    \"sizes\": \"(max-width: 496px) 100vw, 496px\",\n    \"type\": \"image/jpeg\"\n  })), \"\\n        \", mdx(\"img\", _extends({\n    parentName: \"picture\"\n  }, {\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/e89393db7d2c36795aa40b1a57a85199/3f615/loco_api.jpg\",\n    \"alt\": \"loco format\",\n    \"title\": \"loco format\",\n    \"loading\": \"lazy\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    }\n  })), \"\\n      \"), \"\\n    \")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"loco\\uB294 api\\uB97C \\uC9C0\\uC6D0\\uD558\\uAE30 \\uB54C\\uBB38\\uC5D0 \\uAC04\\uB2E8\\uD55C \\uC258\\uC2A4\\uD06C\\uB9BD\\uD2B8\\uB97C \\uD1B5\\uD574 (api\\uB97C \\uC9C0\\uC6D0\\uD558\\uAE30 \\uB54C\\uBB38\\uC5D0 \\uB2E4\\uB978 \\uBC29\\uBC95\\uB3C4 \\uAC00\\uB2A5\\uD558\\uACA0\\uC8E0??) \\uC790\\uB3D9\\uC73C\\uB85C string \\uD30C\\uC77C\\uC744 \\uB2E4\\uC6B4\\uBC1B\\uACE0 \\uC801\\uC6A9\\uD558\\uB294 \\uC77C\\uC774 \\uAC00\\uB2A5\\uD569\\uB2C8\\uB2E4 \\u314E\\u314E\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"\\uC7A5\\uC810 3 : \\uBC88\\uC5ED \\uC9C4\\uD589\\uB3C4 \\uD655\\uC778\\uC774 \\uD3B8\\uD569\\uB2C8\\uB2E4.\"), mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"325px\"\n    }\n  }), \"\\n      \", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"65.84615384615384%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAQAF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB3EQqP//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEAAQUCX//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEABj8CX//EABkQAQADAQEAAAAAAAAAAAAAAAEAEVEQgf/aAAgBAQABPyG9Z7BNuBXACf/aAAwDAQACAAMAAAAQE8//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAdEAACAgEFAAAAAAAAAAAAAAABEQAhMRBRYZHh/9oACAEBAAE/EBYoF7jqWURVvyFNChR4j2dGiGSzc//Z')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  })), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n        \", mdx(\"source\", _extends({\n    parentName: \"picture\"\n  }, {\n    \"srcSet\": [\"/static/81d4576db1d4c2450e7543ca9d3055ad/bcd70/loco_progressbar.webp 325w\"],\n    \"sizes\": \"(max-width: 325px) 100vw, 325px\",\n    \"type\": \"image/webp\"\n  })), \"\\n        \", mdx(\"source\", _extends({\n    parentName: \"picture\"\n  }, {\n    \"srcSet\": [\"/static/81d4576db1d4c2450e7543ca9d3055ad/ab07c/loco_progressbar.jpg 325w\"],\n    \"sizes\": \"(max-width: 325px) 100vw, 325px\",\n    \"type\": \"image/jpeg\"\n  })), \"\\n        \", mdx(\"img\", _extends({\n    parentName: \"picture\"\n  }, {\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/81d4576db1d4c2450e7543ca9d3055ad/ab07c/loco_progressbar.jpg\",\n    \"alt\": \"loco progress\",\n    \"title\": \"loco progress\",\n    \"loading\": \"lazy\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    }\n  })), \"\\n      \"), \"\\n    \")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"loco\\uB294 \\uD604\\uC7AC \\uBC88\\uC5ED\\uC774 \\uC5B4\\uB290\\uC815\\uB3C4 \\uC9C4\\uD589\\uB418\\uC5C8\\uB294\\uC9C0 \\uBCF4\\uAE30 \\uC27D\\uAC8C \\uBCF4\\uC5EC\\uC90D\\uB2C8\\uB2E4.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"\\uC7A5\\uC810 4 : \\uBB38\\uAD6C \\uCC3E\\uAE30\\uAC00 \\uC27D\\uC2B5\\uB2C8\\uB2E4.\"), mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"964px\"\n    }\n  }), \"\\n      \", mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"40.66390041493776%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAIABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAdqhQn//xAAWEAEBAQAAAAAAAAAAAAAAAAAhABD/2gAIAQEAAQUCcb//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAUEAEAAAAAAAAAAAAAAAAAAAAQ/9oACAEBAAY/An//xAAZEAABBQAAAAAAAAAAAAAAAAABABARQVH/2gAIAQEAAT8hA2hNM//aAAwDAQACAAMAAAAQgD//xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAwEBPxBH/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQIBAT8Qqv/EABkQAAIDAQAAAAAAAAAAAAAAAAABESFxMf/aAAgBAQABPxCRLSMK3xdmj//Z')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  })), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n        \", mdx(\"source\", _extends({\n    parentName: \"picture\"\n  }, {\n    \"srcSet\": [\"/static/3afbb9ad68924c08706a5b77e6d0768b/65977/loco_status.webp 964w\"],\n    \"sizes\": \"(max-width: 964px) 100vw, 964px\",\n    \"type\": \"image/webp\"\n  })), \"\\n        \", mdx(\"source\", _extends({\n    parentName: \"picture\"\n  }, {\n    \"srcSet\": [\"/static/3afbb9ad68924c08706a5b77e6d0768b/a6e80/loco_status.jpg 964w\"],\n    \"sizes\": \"(max-width: 964px) 100vw, 964px\",\n    \"type\": \"image/jpeg\"\n  })), \"\\n        \", mdx(\"img\", _extends({\n    parentName: \"picture\"\n  }, {\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/3afbb9ad68924c08706a5b77e6d0768b/a6e80/loco_status.jpg\",\n    \"alt\": \"loco status\",\n    \"title\": \"loco status\",\n    \"loading\": \"lazy\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    }\n  })), \"\\n      \"), \"\\n    \")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"loco\\uB294 \\uC9C4\\uD589 \\uC0C1\\uD0DC\\uBCC4, \\uD0DC\\uADF8\\uBCC4, \\uC5B8\\uC5B4\\uBCC4\\uB85C \\uCE74\\uD14C\\uACE0\\uB9AC\\uB97C \\uB098\\uB220\\uC11C \\uBCF4\\uC5EC\\uC90D\\uB2C8\\uB2E4.\"))), mdx(\"h1\", {\n    \"id\": \"3-단점\"\n  }, \"3. \\uB2E8\\uC810?\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"\\uB2E8\\uC810 1 : \\uC0C8\\uB85C\\uC6B4 \\uD234\\uC5D0 \\uB300\\uD55C \\uD559\\uC2B5\\uC774 \\uD544\\uC694\\uD569\\uB2C8\\uB2E4.\"), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"\\uC0C8\\uB85C\\uC6B4 \\uD234\\uC744 \\uD559\\uC2B5\\uD558\\uB294\\uB370 \\uC5B4\\uB824\\uC6C0\\uC744 \\uB9CE\\uC774 \\uACAA\\uB294 \\uAD6C\\uC131\\uC6D0\\uC774\\uB77C\\uBA74 \\uC0AC\\uC6A9\\uD558\\uAE30 \\uC5B4\\uB824\\uC6B8\\uAC83 \\uAC19\\uC2B5\\uB2C8\\uB2E4.\\n\\uD558\\uC9C0\\uB9CC \\uBC30\\uC6B0\\uACE0\\uC790 \\uD558\\uB294 \\uC758\\uC9C0\\uAC00 \\uC788\\uB2E4\\uBA74 \\uC27D\\uAC8C \\uBC30\\uC6B8\\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"\\uB2E8\\uC810 2 : \\uC911\\uAD6D\\uC5B4 export\\uC2DC \\uBC88\\uCCB4\\uB9CC export \\uD574\\uC90D\\uB2C8\\uB2E4.\"), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"\\uC800\\uD76C \\uC11C\\uBE44\\uC2A4\\uB294 \\uC911\\uAD6D\\uC5B4 \\uBC88\\uCCB4\\uC640 \\uAC04\\uCCB4\\uB97C \\uBAA8\\uB450 \\uC9C0\\uC6D0\\uC744 \\uD558\\uB294\\uB370 API\\uB97C \\uD1B5\\uD574 \\uBAA8\\uB4E0 \\uBB38\\uAD6C\\uB97C export\\uD560\\uB54C \\uBC88\\uCCB4\\uB9CC export \\uC2DC\\uCF1C\\uC90D\\uB2C8\\uB2E4.\\n\\uC774 \\uBD80\\uBD84\\uC740 \\uC880 \\uCE58\\uBA85\\uC801\\uC774\\uAE34\\uD558\\uC9C0\\uB9CC \\uAC04\\uCCB4\\uB9CC \\uB2E4\\uC2DC export\\uD558\\uB294 \\uBC29\\uC2DD\\uC73C\\uB85C \\uD574\\uACB0\\uC744 \\uD588\\uC2B5\\uB2C8\\uB2E4. loco \\uB2F4\\uB2F9\\uC790\\uC5D0\\uAC8C \\uCEE8\\uD0DD\\uD574\\uC11C \\uD574\\uACB0\\uB418\\uB294\\uC9C0 \\uC5EC\\uBD80\\uB97C \\uBB3C\\uC5B4\\uBCF4\\uACE0 \\uC788\\uB294 \\uC0C1\\uD0DC\\uB124\\uC6A9 .. \\uB2F5\\uBCC0\\uC774 \\uC624\\uBA74 \\uB2E4\\uC2DC \\uACF5\\uC720\\uD558\\uACA0\\uC2B5\\uB2C8\\uB2E4.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"\\uB2E8\\uC810 3 : \\uC790\\uB3D9 \\uBC88\\uC5ED\\uC744 \\uC9C0\\uC6D0\\uD558\\uC9C0 \\uC54A\\uC2B5\\uB2C8\\uB2E4.\"), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"\\uCE58\\uBA85\\uC801\\uC778 \\uB2E8\\uC810\\uC740 \\uC544\\uB2C8\\uC9C0\\uB9CC \\uB2E8\\uC810\\uC774\\uB77C\\uBA74 \\uB2E8\\uC810\\uC774\\uB77C \\uD560 \\uC218 \\uC788\\uACA0\\uC2B5\\uB2C8\\uB2E4. \\uD648\\uD398\\uC774\\uC9C0\\uC5D0\\uB294 \\uC544\\uC9C1 \\uC9C0\\uC6D0\\uC744 \\uC548\\uD558\\uACE0 \\uC788\\uB2E4\\uB294 \\uAC78 \\uBCF4\\uBA74 \\uC5B8\\uC820\\uAC04 \\uC9C0\\uC6D0\\uC744 \\uD560 \\uC218\\uB3C4 \\uC788\\uACA0\\uB2E4\\uB294 \\uC0DD\\uAC01\\uC774 \\uB4DC\\uB124\\uC694??\"))), mdx(\"h1\", {\n    \"id\": \"3-사용-후기\"\n  }, \"3. \\uC0AC\\uC6A9 \\uD6C4\\uAE30\"), mdx(\"p\", null, \"\\uD655\\uC2E4\\uD788 \\uBC18\\uBCF5\\uC801\\uC774\\uACE0 \\uB2E8\\uC21C\\uD55C \\uC77C\\uC77C\\uC218\\uB85D \\uC790\\uB3D9\\uD654\\uD558\\uB294 \\uC77C\\uC740 \\uC911\\uC694\\uD55C\\uAC83 \\uAC19\\uC2B5\\uB2C8\\uB2E4. LOCO\\uB97C \\uD1B5\\uD574 \\uAC1C\\uBC1C\\uC790\\uB294 \\uAC1C\\uBC1C\\uC5D0 \\uC880 \\uB354 \\uC9D1\\uC911\\uD558\\uACE0, \\uB9E4\\uB2C8\\uC800\\uB294 \\uC880 \\uB354 \\uD3B8\\uD558\\uACE0 \\uD655\\uC2E4\\uD558\\uAC8C \\uBC88\\uC5ED \\uC9C4\\uD589 \\uC0C1\\uD669\\uC744 \\uAD00\\uB9AC\\uD560 \\uC218 \\uC788\\uC9C0 \\uC54A\\uB098\\uB77C\\uB294 \\uC0DD\\uAC01\\uC774 \\uB4ED\\uB2C8\\uB2E4. \\uB9CC\\uC57D \\uAE00\\uB85C\\uBC8C \\uC11C\\uBE44\\uC2A4\\uB97C \\uD558\\uACE0 \\uACC4\\uC2DC\\uAC70\\uB098 \\uD558\\uC2E4 \\uC608\\uC815\\uC774\\uB77C\\uBA74 \\uC774 \\uD234\\uC744 \\uC0AC\\uC6A9\\uD574\\uBCF4\\uC2DC\\uB294 \\uAC83\\uC744 \\uCD94\\uCC9C\\uD574\\uB4DC\\uB9BD\\uB2C8\\uB2E4. :)\"), mdx(\"p\", null, \"\\uCD94\\uAC00\\uC801\\uC73C\\uB85C \\uC0AC\\uC6A9\\uD558\\uBA74\\uC11C \\uC0C8\\uB86D\\uAC8C \\uC54C\\uAC8C\\uB41C \\uC815\\uBCF4\\uB4E4\\uC774 \\uC788\\uC73C\\uBA74 \\uCD94\\uAC00\\uAE00\\uB85C \\uACF5\\uC720\\uD558\\uB3C4\\uB85D \\uD558\\uACA0\\uC2B5\\uB2C8\\uB2E4~\\n\\uC548\\uB1FD~\"));\n}\n;\nMDXContent.isMDXComponent = true;","hero":{"full":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsklEQVQ4y8WTwQoCIRCGff9bvUU9RJ3rUl1jWWRFZNmyQ11U9G91Y/EiakX9OIwMzs83ogRfFvmZoXNuzql9vaGbsnU2xEeGoQmTaYo+axgTeCKvQ3/ETuzRyAbtrZ3PpEhJalz3QuvuHRanJVbnNTZsmyVNEmqtoZSCVhqXxxVWj8TjMsaEurU2TxgbSinBOQ8x9AOEEKCUgjEWat64auQSVY0cX36qXkxY+sj/+/Xe1RMGa1P6CWiIVAAAAABJRU5ErkJggg==","aspectRatio":1.4390243902439024,"src":"/static/899e95171aa26665ed3bc41071022c17/c9139/hero.png","srcSet":"/static/899e95171aa26665ed3bc41071022c17/5b37e/hero.png 236w,\n/static/899e95171aa26665ed3bc41071022c17/49058/hero.png 472w,\n/static/899e95171aa26665ed3bc41071022c17/c9139/hero.png 621w","srcWebp":"/static/899e95171aa26665ed3bc41071022c17/1626a/hero.webp","srcSetWebp":"/static/899e95171aa26665ed3bc41071022c17/77392/hero.webp 236w,\n/static/899e95171aa26665ed3bc41071022c17/1f177/hero.webp 472w,\n/static/899e95171aa26665ed3bc41071022c17/1626a/hero.webp 621w","sizes":"(max-width: 621px) 100vw, 621px"},"regular":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsklEQVQ4y8WTwQoCIRCGff9bvUU9RJ3rUl1jWWRFZNmyQ11U9G91Y/EiakX9OIwMzs83ogRfFvmZoXNuzql9vaGbsnU2xEeGoQmTaYo+axgTeCKvQ3/ETuzRyAbtrZ3PpEhJalz3QuvuHRanJVbnNTZsmyVNEmqtoZSCVhqXxxVWj8TjMsaEurU2TxgbSinBOQ8x9AOEEKCUgjEWat64auQSVY0cX36qXkxY+sj/+/Xe1RMGa1P6CWiIVAAAAABJRU5ErkJggg==","aspectRatio":1.4424778761061947,"src":"/static/899e95171aa26665ed3bc41071022c17/c9139/hero.png","srcSet":"/static/899e95171aa26665ed3bc41071022c17/078a8/hero.png 163w,\n/static/899e95171aa26665ed3bc41071022c17/e56da/hero.png 327w,\n/static/899e95171aa26665ed3bc41071022c17/c9139/hero.png 621w","srcWebp":"/static/899e95171aa26665ed3bc41071022c17/1626a/hero.webp","srcSetWebp":"/static/899e95171aa26665ed3bc41071022c17/ac59e/hero.webp 163w,\n/static/899e95171aa26665ed3bc41071022c17/7660b/hero.webp 327w,\n/static/899e95171aa26665ed3bc41071022c17/1626a/hero.webp 621w","sizes":"(max-width: 621px) 100vw, 621px"},"narrow":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsklEQVQ4y8WTwQoCIRCGff9bvUU9RJ3rUl1jWWRFZNmyQ11U9G91Y/EiakX9OIwMzs83ogRfFvmZoXNuzql9vaGbsnU2xEeGoQmTaYo+axgTeCKvQ3/ETuzRyAbtrZ3PpEhJalz3QuvuHRanJVbnNTZsmyVNEmqtoZSCVhqXxxVWj8TjMsaEurU2TxgbSinBOQ8x9AOEEKCUgjEWat64auQSVY0cX36qXkxY+sj/+/Xe1RMGa1P6CWiIVAAAAABJRU5ErkJggg==","aspectRatio":1.4430379746835442,"src":"/static/899e95171aa26665ed3bc41071022c17/502b1/hero.png","srcSet":"/static/899e95171aa26665ed3bc41071022c17/f2e6d/hero.png 114w,\n/static/899e95171aa26665ed3bc41071022c17/4ddba/hero.png 229w,\n/static/899e95171aa26665ed3bc41071022c17/502b1/hero.png 457w,\n/static/899e95171aa26665ed3bc41071022c17/c9139/hero.png 621w","srcWebp":"/static/899e95171aa26665ed3bc41071022c17/15384/hero.webp","srcSetWebp":"/static/899e95171aa26665ed3bc41071022c17/31fce/hero.webp 114w,\n/static/899e95171aa26665ed3bc41071022c17/e3e25/hero.webp 229w,\n/static/899e95171aa26665ed3bc41071022c17/15384/hero.webp 457w,\n/static/899e95171aa26665ed3bc41071022c17/1626a/hero.webp 621w","sizes":"(max-width: 457px) 100vw, 457px"},"seo":{"src":"/static/899e95171aa26665ed3bc41071022c17/c9139/hero.png"}}},{"id":"4834da44-c416-5d14-93ea-2c3731407357","slug":"/suspend-(feat.-)","secret":false,"title":"suspend 를 붙이면 생기는 일 (feat. 코루틴 동작 원리)","author":"Reno Kim","date":"February 9th, 2021","dateForSEO":"2021-02-09T00:00:00.000Z","timeToRead":1,"excerpt":"코루틴의 작동 원리에 대해 공부하면서 정리한 글입니다.","canonical_url":null,"subscription":true,"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"suspend 를 붙이면 생기는 일 (feat. 코루틴 동작 원리)\",\n  \"author\": \"Reno Kim\",\n  \"date\": \"2021-02-09T00:00:00.000Z\",\n  \"hero\": \"./images/hero.jpg\",\n  \"excerpt\": \"코루틴의 작동 원리에 대해 공부하면서 정리한 글입니다.\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", {\n    \"id\": \"suspend-를-붙이면-생기는-일-feat-코루틴-동작-원리\"\n  }, \"suspend \\uB97C \\uBD99\\uC774\\uBA74 \\uC0DD\\uAE30\\uB294 \\uC77C (feat. \\uCF54\\uB8E8\\uD2F4 \\uB3D9\\uC791 \\uC6D0\\uB9AC)\"), mdx(\"h2\", {\n    \"id\": \"시작하기-앞서\"\n  }, \"\\uC2DC\\uC791\\uD558\\uAE30 \\uC55E\\uC11C\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\uC774 \\uAE00\\uC740 \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u201Ccoroutine \\uC774 \\uC2E4\\uC81C\\uB85C \\uB3D9\\uC791\\uD558\\uB294 \\uC6D0\\uB9AC\\u201D\"), \"\\uC5D0 \\uB300\\uD574 \\uACF5\\uBD80\\uD558\\uBA74\\uC11C \\uD559\\uC2B5\\uD55C \\uB0B4\\uC6A9\\uC744 \\uC27D\\uAC8C \\uC774\\uD574\\uD560 \\uC218 \\uC788\\uB3C4\\uB85D \\uC4F4 \\uAE00\\uC785\\uB2C8\\uB2E4.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\uC774\\uD574\\uB97C \\uB3D5\\uAE30 \\uC704\\uD574 \\uC608\\uC81C \\uCF54\\uB4DC\\uAC00 \\uC2E4\\uC81C \\uCF54\\uB4DC\\uC640 \\uB2E4\\uB97C \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\")), mdx(\"h2\", {\n    \"id\": \"suspend-를-붙이면-어떻게-될까\"\n  }, \"\\u2018suspend\\u2019 \\uB97C \\uBD99\\uC774\\uBA74 \\uC5B4\\uB5BB\\uAC8C \\uB420\\uAE4C?\"), mdx(\"p\", null, \"Coroutine \\uC18C\\uAC1C \\uAE00\\uC774\\uB098 \\uC601\\uC0C1\\uC744 \\uBCF4\\uB2E4 \\uBCF4\\uBA74 \\uD56D\\uC0C1 \\uC5B8\\uAE09\\uD558\\uB294 \\uCF54\\uB8E8\\uD2F4\\uC758 \\uC7A5\\uC810\\uC774 \\uD558\\uB098 \\uC788\\uB2E4.\"), mdx(\"p\", null, \"\\u201D\", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Callback\"), \" \\uC744 \\uC5C6\\uC560 \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Imperative code\"), \" \\uB97C \\uB9CC\\uB4E4\\uC5B4 \\uC900\\uB2E4\\u201D \\uB294 \\uAC83\\uC774\\uB2E4.\"), mdx(\"p\", null, \"\\uCF5C\\uBC31 \\uC9C0\\uC625\\uC774\\uC5C8\\uB358 \\uCF54\\uB4DC\\uAC00\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-kotlin\"\n  }), \"// Simplified code that only considers the happy path\\nfun loginUser(userId: String, password: String, userResult: Callback<User>) {\\n  // Async callbacks\\n  userRemoteDataSource.logUserIn { user ->\\n    // Successful network request\\n    userLocalDataSource.logUserIn(user) { userDb ->\\n      // Result saved in DB\\n      userResult.success(userDb)\\n    }\\n  }\\n}\\n\")), mdx(\"p\", null, \"\\uAE54\\uB054\\uD55C \\uCF54\\uB4DC\\uB85C \\uBC14\\uB00C\\uB294 \\uB9C8\\uBC95\\uC744 \\uBCFC \\uC218 \\uC788\\uB2E4.\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-kotlin\"\n  }), \"suspend fun loginUser(userId: String, password: String): User {\\n  val user = userRemoteDataSource.logUserIn(userId, password)\\n  val userDb = userLocalDataSource.logUserIn(user)\\n  return userDb\\n}\\n\")), mdx(\"p\", null, \"\\uADF8\\uB807\\uB2E4\\uBA74 Coroutine\\uC740 \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Callback\"), \" \\uC744 \\uC0AC\\uC6A9\\uD558\\uC9C0 \\uC54A\\uB294 \\uAC83\\uC77C\\uAE4C? \"), mdx(\"p\", null, \"\\uACB0\\uB860\\uBD80\\uD130 \\uB9D0\\uD558\\uC790\\uBA74 \\uC2E4\\uC81C\\uB85C \\uB0B4\\uBD80\\uC801\\uC73C\\uB85C\\uB294 \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Callback\"), \" \\uC744 \\uC0AC\\uC6A9\\uD558\\uACE0 \\uC788\\uB2E4. \"), mdx(\"p\", null, \"\\uB2E8\\uC9C0 \\uAC1C\\uBC1C\\uC790\\uAC00 \\uC9C1\\uC811 \\uCF5C\\uBC31\\uC744 \\uAD6C\\uD604\\uD558\\uB294 \\uAC83\\uC774 \\uC544\\uB2CC \\uCEF4\\uD30C\\uC77C\\uB7EC\\uAC00 \\uAD6C\\uD604\\uD558\\uB294 \\uAC83\\uC774\\uB2E4.\"), mdx(\"h3\", {\n    \"id\": \"continuation\"\n  }, \"Continuation\"), mdx(\"p\", null, \" Coroutine\\uC740 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Continuation\"), \" \\uC744 \\uD1B5\\uD574 \\uCF5C\\uBC31\\uACFC \\uCF5C\\uBC31\\uC5D0 \\uC0AC\\uC6A9\\uB418\\uB294 \\uC815\\uBCF4\\uB4E4\\uC744 \\uACF5\\uC720\\uD558\\uB294\\uB370 \\uC544\\uB798\\uC640 \\uAC19\\uC774 \\uC815\\uC758\\uB418\\uC5B4 \\uC788\\uB2E4.\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-kotlin\"\n  }), \"interface Continuation<in T> {\\n  public val context: CoroutineContext\\n  public fun resumeWith(value: Result<T>)\\n}\\n\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"context\")), \" : \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Continuation\"), \" \\uC5D0\\uC11C \\uC0AC\\uC6A9\\uB420 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"CoroutineContext\"), \" \\uB97C \\uC758\\uBBF8\\uD558\\uACE0\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"resumeWith\")), \" : \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Result\"), \" \\uC640 \\uD568\\uAED8 Coroutine \\uC744 \\uC7AC\\uC2E4\\uD589\\uD558\\uB294\\uB370, \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Result\"), \" \\uAC12\\uC5D0\\uB294 Exception \\uB610\\uB294 \\uCC98\\uB9AC\\uB41C \\uAC12\\uC774\\uB2E4.\")), mdx(\"p\", null, \"\\uC774 \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Continuation\"), \" \\uC744 \\uC0AC\\uC6A9\\uD574 \\uCEF4\\uD30C\\uC77C\\uB7EC\\uB294 \\uB2E4\\uC74C\\uACFC \\uAC19\\uC740 \\uCF54\\uB4DC\\uB97C \\uB9CC\\uB4E4\\uC5B4 \\uB0B8\\uB2E4\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-kotlin\"\n  }), \"fun loginUser(userId: String, password: String, completion: Continuation<Any?>) {\\n  val user = userRemoteDataSource.logUserIn(userId, password)\\n  val userDb = userLocalDataSource.logUserIn(user)\\n  completion.resume(userDb)\\n}\\n\")), mdx(\"p\", null, \"\\uCEF4\\uD30C\\uC77C\\uB7EC\\uAC00 \\uB9CC\\uB4E4\\uC5B4\\uB0B8 \\uCF54\\uB4DC\\uB294\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"suspend\")), \" \\uC9C0\\uC2DC\\uC5B4\\uAC00 \\uC0AC\\uB77C\\uC84C\\uB2E4.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\uD568\\uC218 \\uD30C\\uB77C\\uBBF8\\uD130\\uC5D0 \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"completion: Continuation<Any?>\")), \" \\uAC00 \\uCD94\\uAC00 \\uB418\\uC5C8\\uB2E4.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"return \\uAC12\\uC774 \\uC0AC\\uB77C\\uC84C\\uB2E4\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"code block \\uB9C8\\uC9C0\\uB9C9\\uC5D0 \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"completion.resume(userDb)\")), \" \\uAC00 \\uC0DD\\uACBC\\uB2E4. \")), mdx(\"p\", null, \"\\uC544\\uAE4C \\uC598\\uAE30 \\uD588\\uB358 \\uB300\\uB85C \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"completion\")), \" \\uC744 \\uD1B5\\uD574 \\uACB0\\uACFC \\uAC12\\uC744 \\uC804\\uB2EC\\uD558\\uAC8C \\uB41C\\uB2E4 \"), mdx(\"p\", null, \"\\uD558\\uC9C0\\uB9CC \\uB208\\uCE58 \\uBE60\\uB978 \\uB204\\uAD70\\uAC00\\uB294 \\uC65C \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"completion\")), \" \\uC758 \\uD0C0\\uC785\\uC774 \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"Continuation<Any?>\")), \" \\uC778\\uC9C0 \\uAD81\\uAE08\\uD560 \\uAC83\\uC774\\uB2E4.\"), mdx(\"p\", null, \"\\uC774 \\uB0B4\\uC6A9\\uC740 \\uB098\\uC911\\uC5D0 \\uC124\\uBA85\\uD558\\uB3C4\\uB85D \\uD558\\uACA0\\uB2E4.\"), mdx(\"h3\", {\n    \"id\": \"state-machine\"\n  }, \"State Machine\"), mdx(\"p\", null, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"loginUser\"), \" \\uAC00 \\uD558\\uB098\\uC758 \\uC2A4\\uB808\\uB4DC\\uC5D0\\uC11C \\uB3D9\\uC791\\uD55C\\uB2E4\\uBA74 \\uC5EC\\uAE30\\uC11C \\uB05D\\uB0A0 \\uAC83\\uC774\\uB2E4. \"), mdx(\"p\", null, \"\\uD558\\uC9C0\\uB9CC \\uC2E4\\uC81C\\uB85C\\uB294 \\uD55C\\uAC1C \\uC774\\uC0C1\\uC758 \\uC2A4\\uB808\\uB4DC\\uC5D0\\uC11C \\uBE44\\uB3D9\\uAE30 \\uCC98\\uB9AC \\uC791\\uC5C5\\uC774 \\uC77C\\uC5B4\\uB098\\uB294\\uB370 Coroutine\\uC740 \\uC774\\uB97C \\uC5B4\\uB5BB\\uAC8C \\uCC98\\uB9AC\\uD560\\uAE4C?\"), mdx(\"p\", null, \"\\uC5B4\\uB5BB\\uAC8C \\uAC01 \\uC791\\uC5C5\\uC774 \\uB05D\\uB098\\uACE0 \\uB2E4\\uC74C \\uC791\\uC5C5\\uC774 \\uC2DC\\uC791\\uD574\\uC57C\\uD558\\uB294 \\uC0C1\\uD0DC\\uB97C \\uAD00\\uB9AC\\uD560\\uAE4C?\"), mdx(\"p\", null, \"\\uADF8\\uAC83\\uC744 \\uAD00\\uB9AC\\uD558\\uB294 \\uAC83\\uC774 \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"State Machine\"), \"\\uC774\\uB2E4.\"), mdx(\"p\", null, \"\\uC6B0\\uC120 \\uCEF4\\uD30C\\uC77C\\uB7EC\\uB294 \"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"\\uAC01\\uAC01\\uC758 \\uC791\\uC5C5\\uC5D0 Label \\uC744 \\uBD99\\uC5EC \\uCC98\\uB9AC\\uD574\\uC57C\\uD560 \\uC791\\uC5C5\\uC744 \\uB098\\uB204\\uACE0 \")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Label \\uD1B5\\uD574 \\uB2E4\\uC74C \\uD574\\uC57C\\uD560 \\uC791\\uC5C5\\uC744 \\uC9C0\\uC2DC\\uD55C\\uB2E4. \"))), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-kotlin\"\n  }), \"fun loginUser(userId: String, password: String, completion: Continuation<Any?>) {\\n  when(label) {\\n    0 -> { // Label 0 -> first execution\\n        userRemoteDataSource.logUserIn(userId, password)\\n    }\\n    1 -> { // Label 1 -> resumes from userRemoteDataSource\\n        userLocalDataSource.logUserIn(user)\\n    }\\n    2 -> { // Label 2 -> resumes from userLocalDataSource\\n        completion.resume(userDb)\\n    }\\n    else -> throw IllegalStateException(/* ... */)\\n  }\\n}\\n\")), mdx(\"p\", null, \"\\uADF8\\uB9AC\\uACE0 State Machine \\uC744 \\uC0DD\\uC131\\uD558\\uB294\\uB370 \\uB2E4\\uC74C\\uACFC \\uAC19\\uB2E4.\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-kotlin\"\n  }), \"fun loginUser(userId: String?, password: String?, completion: Continuation<Any?>) {\\n  \\n  class LoginUserStateMachine(\\n    // completion \\uD30C\\uB77C\\uBBF8\\uD130\\uB294 loginUser \\uD568\\uC218\\uC758 \\uCF5C\\uBC31\\uC774\\uB2E4.\\n    completion: Continuation<Any?>\\n  ): CoroutineImpl(completion) {\\n  \\n    // suspend \\uD568\\uC218\\uC758 \\uB85C\\uCEEC \\uBCC0\\uC218\\n    var user: User? = null\\n    var userDb: UserDb? = null\\n  \\n    // \\uBAA8\\uB4E0 \\uCF54\\uB8E8\\uD2F4 \\uAD6C\\uD604\\uCCB4\\uC758 \\uACF5\\uD1B5 \\uAC1D\\uCCB4\\uB4E4 \\n    var result: Any? = null\\n    var label: Int = 0\\n  \\n    // \\uC774 \\uD568\\uC218\\uB294 loginUser \\uB97C \\uB2E4\\uC2DC state machine\\uC744 \\uD2B8\\uB9AC\\uAC70\\uD569\\uB2C8\\uB2E4. (label\\uC740 \\uC774\\uBBF8 \\uB2E4\\uC74C \\uC0C1\\uD0DC\\uC785\\uB2C8\\uB2E4) \\n    // \\uADF8\\uB9AC\\uACE0 result\\uB294 \\uC774\\uC804 \\uC0C1\\uD0DC\\uC758 \\uACC4\\uC0B0 \\uACB0\\uACFC\\uC785\\uB2C8\\uB2E4.\\n    override fun invokeSuspend(result: Any?) {\\n      this.result = result\\n      loginUser(null, null, this)\\n    }\\n  }\\n  /* ... */\\n}\\n\")), mdx(\"p\", null, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"invokeSuspend\"), \" \\uAC00 \\uC624\\uC9C1 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Continuation\"), \" \\uAC1D\\uCCB4\\uC758 \\uC815\\uBCF4\\uB9CC \\uAC00\\uC9C0\\uACE0 \\uD638\\uCD9C\\uC774 \\uB418\\uAE30 \\uB54C\\uBB38\\uC5D0, \\uB098\\uBA38\\uC9C0 parameters (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"user:User?\"), \",  \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"userDb:UserDb?\"), \")\\uB4E4\\uC740 nullable\\uC774 \\uB429\\uB2C8\\uB2E4. \"), mdx(\"p\", null, \"\\uADF8\\uB807\\uAE30 \\uB54C\\uBB38\\uC5D0 \\uCEF4\\uD30C\\uC77C\\uB7EC\\uB294 state\\uAC00 \\uC5B4\\uB5BB\\uAC8C \\uBCC0\\uACBD\\uC774 \\uB418\\uB294\\uC9C0\\uC5D0 \\uB300\\uD55C \\uC815\\uBCF4\\uB4E4\\uB9CC \\uCD94\\uAC00\\uD574\\uC8FC\\uBA74 \\uB429\\uB2C8\\uB2E4. \"), mdx(\"p\", null, \"\\uADF8\\uB807\\uAE30 \\uC704\\uD574\\uC11C\\uB294 \\uC774 \\uD568\\uC218\\uAC00 \\uCD5C\\uCD08 \\uC2E4\\uD589\\uC778\\uC9C0 \\uC544\\uB2C8\\uBA74 \\uC774\\uC804 \\uC0C1\\uD0DC\\uB85C\\uBD80\\uD130 resume \\uB41C \\uD568\\uC218\\uC778\\uC9C0 \\uC54C\\uC544\\uC57C \\uD569\\uB2C8\\uB2E4.  \"), mdx(\"p\", null, \"\\uCD5C\\uCD08\\uC5D0\\uB294 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"LoginUserStateMachine\"), \" \\uC774 \\uC778\\uC2A4\\uD134\\uC2A4 \\uB418\\uC5B4 \\uC788\\uC9C0 \\uC54A\\uAE30 \\uB54C\\uBB38\\uC5D0 \\uB2E4\\uC74C\\uCC98\\uB7FC \\uC778\\uC2A4\\uD134\\uC2A4\\uD654 \\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4. \"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-kotlin\"\n  }), \"fun loginUser(userId: String?, password: String?, completion: Continuation<Any?>) {\\n  /* ... */\\n  val continuation = completion as? LoginUserStateMachine ?: LoginUserStateMachine(completion)\\n  /* ... */\\n}\\n\")), mdx(\"p\", null, \"\\uCEF4\\uD30C\\uC77C\\uB7EC\\uAC00 \\uC0DD\\uC131\\uD55C \\uC0C1\\uD0DC \\uC774\\uB3D9 \\uCF54\\uB4DC\\uC640 \\uADF8\\uB4E4\\uAC04\\uC758 \\uC815\\uBCF4 \\uACF5\\uC720\\uD558\\uB294 \\uCF54\\uB4DC\\uB97C \\uBCF4\\uBA74 \\uB2E4\\uC74C\\uACFC \\uAC19\\uC2B5\\uB2C8\\uB2E4. \"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-kotlin\"\n  }), \"fun loginUser(userId: String?, password: String?, completion: Continuation<Any?>) {\\n    /* ... */\\n\\n    val continuation = completion as? LoginUserStateMachine ?: LoginUserStateMachine(completion)\\n\\n    when(continuation.label) {\\n        0 -> {\\n            // \\uC2E4\\uD328 \\uC5EC\\uBD80\\uB97C \\uCCB4\\uD06C\\uD569\\uB2C8\\uB2E4.\\n            throwOnFailure(continuation.result)\\n            // \\uB2E4\\uC74C\\uC5D0 continuation \\uC774 \\uD638\\uCD9C\\uC774 \\uB418\\uBA74 state = 1 \\uC73C\\uB85C \\uC774\\uB3D9\\uD574\\uC57C \\uD569\\uB2C8\\uB2E4.\\n            continuation.label = 1\\n              // continuation \\uAC1D\\uCCB4\\uAC00 logUserIn\\uC5D0 \\uC804\\uB2EC\\uB418\\uACE0 \\uC644\\uB8CC\\uB418\\uBA74 \\n            // state machine\\uC758 \\uC2E4\\uD589\\uC744 \\uC7AC\\uAC1C\\uD569\\uB2C8\\uB2E4\\n            userRemoteDataSource.logUserIn(userId!!, password!!, continuation)\\n        }\\n        1 -> {\\n            // \\uC2E4\\uD328 \\uC5EC\\uBD80\\uB97C \\uCCB4\\uD06C\\uD569\\uB2C8\\uB2E4. \\n            throwOnFailure(continuation.result)\\n            // \\uC774\\uC804 \\uC0C1\\uD0DC\\uC758 \\uACB0\\uACFC\\uB97C \\uAC00\\uC838\\uC635\\uB2C8\\uB2E4. \\n            continuation.user = continuation.result as User\\n            // \\uB2E4\\uC74C\\uC5D0 continuation\\uC774 \\uD638\\uCD9C\\uB418\\uBA74, state = 2 \\uB85C \\uC774\\uB3D9\\uD574\\uC57C \\uD569\\uB2C8\\uB2E4. \\n            continuation.label = 2\\n            // contination \\uAC1D\\uCCB4\\uAC00 logUserIn\\uC5D0 \\uC804\\uB2EC\\uB418\\uACE0 \\uC644\\uB8CC\\uB418\\uBA74 \\n            // state machine\\uC758 \\uC2E4\\uD589\\uC744 \\uC7AC\\uAC1C\\uD569\\uB2C8\\uB2E4. \\n            userLocalDataSource.logUserIn(continuation.user, continuation)\\n        }\\n        2 -> {\\n            // \\uC2E4\\uD328 \\uC5EC\\uBD80\\uB97C \\uCCB4\\uD06C\\uD569\\uB2C8\\uB2E4. \\n            throwOnFailure(continuation.result)\\n            // \\uC774\\uC804 \\uC0C1\\uD0DC\\uC758 \\uACB0\\uACFC\\uB97C \\uAC00\\uC838\\uC635\\uB2C8\\uB2E4. \\n            continuation.userDb = continuation.result as UserDb\\n            // \\uC774 \\uD568\\uC218\\uB97C \\uD638\\uCD9C\\uD55C \\uD568\\uC218\\uB97C \\uC7AC\\uC2E4\\uD589\\uD569\\uB2C8\\uB2E4. \\n            continuation.cont.resume(continuation.userDb)\\n        }\\n        else -> throw IllegalStateException(/* ... */)\\n    }\\n}\\n\")), mdx(\"p\", null, \"\\uC774\\uB7EC\\uD55C \\uD504\\uB85C\\uC138\\uC2A4\\uAC00 Recursive\\uD558\\uAC8C \\uC77C\\uC5B4\\uB09C\\uB2E4\\uACE0 \\uBCF4\\uC2DC\\uBA74 \\uB429\\uB2C8\\uB2E4. \"), mdx(\"h2\", {\n    \"id\": \"결론\"\n  }, \"\\uACB0\\uB860\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"suspend\"), \" \\uC9C0\\uC2DC\\uC5B4\\uB97C \\uBD99\\uC774\\uAC8C \\uB418\\uBA74 \\uCEF4\\uD30C\\uC77C\\uB7EC\\uAC00 Callback \\uC744 \\uC0DD\\uC131\\uD55C\\uB2E4\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Callback\\uC2DC \\uD544\\uC694\\uD55C \\uC815\\uBCF4\\uC640 \\uC0C1\\uD0DC \\uAD00\\uB9AC\\uB294 \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"State Machine\"), \" \\uC5D0 \\uC758\\uD574 \\uAD00\\uB9AC\\uB41C\\uB2E4.\")), mdx(\"h2\", {\n    \"id\": \"reference\"\n  }, \"Reference\"), mdx(\"p\", null, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://manuelvivo.dev/suspend-modifier\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }), \"The suspend modifier - under the hood\")));\n}\n;\nMDXContent.isMDXComponent = true;","hero":{"full":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAEDBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAdWlgQw//8QAGhAAAQUBAAAAAAAAAAAAAAAAAQAQEhMhI//aAAgBAQABBQKzrMoaH//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABkQAAEFAAAAAAAAAAAAAAAAACEAAQIgMf/aAAgBAQAGPwJ4gLK//8QAGhABAAIDAQAAAAAAAAAAAAAAAQARIDFRkf/aAAgBAQABPyEduhp1nB+MdDh//9oADAMBAAIAAwAAABDUz//EABYRAAMAAAAAAAAAAAAAAAAAABARYf/aAAgBAwEBPxBwf//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAECAQE/EGf/xAAcEAEBAAICAwAAAAAAAAAAAAABEQAhEGFBkdH/2gAIAQEAAT8QrUCiLosO8UHY8X4d4q5FKkde8hbC8//Z","aspectRatio":1.7744360902255638,"src":"/static/ca62a29181684ca858a0fb4b20094291/58fe7/hero.jpg","srcSet":"/static/ca62a29181684ca858a0fb4b20094291/e0f30/hero.jpg 236w,\n/static/ca62a29181684ca858a0fb4b20094291/86afd/hero.jpg 472w,\n/static/ca62a29181684ca858a0fb4b20094291/58fe7/hero.jpg 944w,\n/static/ca62a29181684ca858a0fb4b20094291/02748/hero.jpg 1416w,\n/static/ca62a29181684ca858a0fb4b20094291/5c241/hero.jpg 1888w,\n/static/ca62a29181684ca858a0fb4b20094291/097fa/hero.jpg 1920w","srcWebp":"/static/ca62a29181684ca858a0fb4b20094291/99fbb/hero.webp","srcSetWebp":"/static/ca62a29181684ca858a0fb4b20094291/77392/hero.webp 236w,\n/static/ca62a29181684ca858a0fb4b20094291/1f177/hero.webp 472w,\n/static/ca62a29181684ca858a0fb4b20094291/99fbb/hero.webp 944w,\n/static/ca62a29181684ca858a0fb4b20094291/4a492/hero.webp 1416w,\n/static/ca62a29181684ca858a0fb4b20094291/b0b8f/hero.webp 1888w,\n/static/ca62a29181684ca858a0fb4b20094291/30cf3/hero.webp 1920w","sizes":"(max-width: 944px) 100vw, 944px"},"regular":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAEDBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAdWlgQw//8QAGhAAAQUBAAAAAAAAAAAAAAAAAQAQEhMhI//aAAgBAQABBQKzrMoaH//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABkQAAEFAAAAAAAAAAAAAAAAACEAAQIgMf/aAAgBAQAGPwJ4gLK//8QAGhABAAIDAQAAAAAAAAAAAAAAAQARIDFRkf/aAAgBAQABPyEduhp1nB+MdDh//9oADAMBAAIAAwAAABDUz//EABYRAAMAAAAAAAAAAAAAAAAAABARYf/aAAgBAwEBPxBwf//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAECAQE/EGf/xAAcEAEBAAICAwAAAAAAAAAAAAABEQAhEGFBkdH/2gAIAQEAAT8QrUCiLosO8UHY8X4d4q5FKkde8hbC8//Z","aspectRatio":1.7717391304347827,"src":"/static/ca62a29181684ca858a0fb4b20094291/1dc0b/hero.jpg","srcSet":"/static/ca62a29181684ca858a0fb4b20094291/3a5ce/hero.jpg 163w,\n/static/ca62a29181684ca858a0fb4b20094291/05730/hero.jpg 327w,\n/static/ca62a29181684ca858a0fb4b20094291/1dc0b/hero.jpg 653w,\n/static/ca62a29181684ca858a0fb4b20094291/f72c7/hero.jpg 980w,\n/static/ca62a29181684ca858a0fb4b20094291/6e4a3/hero.jpg 1306w,\n/static/ca62a29181684ca858a0fb4b20094291/097fa/hero.jpg 1920w","srcWebp":"/static/ca62a29181684ca858a0fb4b20094291/0acdf/hero.webp","srcSetWebp":"/static/ca62a29181684ca858a0fb4b20094291/ac59e/hero.webp 163w,\n/static/ca62a29181684ca858a0fb4b20094291/7660b/hero.webp 327w,\n/static/ca62a29181684ca858a0fb4b20094291/0acdf/hero.webp 653w,\n/static/ca62a29181684ca858a0fb4b20094291/75470/hero.webp 980w,\n/static/ca62a29181684ca858a0fb4b20094291/68d47/hero.webp 1306w,\n/static/ca62a29181684ca858a0fb4b20094291/30cf3/hero.webp 1920w","sizes":"(max-width: 653px) 100vw, 653px"},"narrow":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAEDBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAdWlgQw//8QAGhAAAQUBAAAAAAAAAAAAAAAAAQAQEhMhI//aAAgBAQABBQKzrMoaH//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABkQAAEFAAAAAAAAAAAAAAAAACEAAQIgMf/aAAgBAQAGPwJ4gLK//8QAGhABAAIDAQAAAAAAAAAAAAAAAQARIDFRkf/aAAgBAQABPyEduhp1nB+MdDh//9oADAMBAAIAAwAAABDUz//EABYRAAMAAAAAAAAAAAAAAAAAABARYf/aAAgBAwEBPxBwf//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAECAQE/EGf/xAAcEAEBAAICAwAAAAAAAAAAAAABEQAhEGFBkdH/2gAIAQEAAT8QrUCiLosO8UHY8X4d4q5FKkde8hbC8//Z","aspectRatio":1.78125,"src":"/static/ca62a29181684ca858a0fb4b20094291/eaa58/hero.jpg","srcSet":"/static/ca62a29181684ca858a0fb4b20094291/5a3ee/hero.jpg 114w,\n/static/ca62a29181684ca858a0fb4b20094291/41f8f/hero.jpg 229w,\n/static/ca62a29181684ca858a0fb4b20094291/eaa58/hero.jpg 457w,\n/static/ca62a29181684ca858a0fb4b20094291/c309b/hero.jpg 686w,\n/static/ca62a29181684ca858a0fb4b20094291/e3008/hero.jpg 914w,\n/static/ca62a29181684ca858a0fb4b20094291/097fa/hero.jpg 1920w","srcWebp":"/static/ca62a29181684ca858a0fb4b20094291/15384/hero.webp","srcSetWebp":"/static/ca62a29181684ca858a0fb4b20094291/31fce/hero.webp 114w,\n/static/ca62a29181684ca858a0fb4b20094291/e3e25/hero.webp 229w,\n/static/ca62a29181684ca858a0fb4b20094291/15384/hero.webp 457w,\n/static/ca62a29181684ca858a0fb4b20094291/0258d/hero.webp 686w,\n/static/ca62a29181684ca858a0fb4b20094291/64ea2/hero.webp 914w,\n/static/ca62a29181684ca858a0fb4b20094291/30cf3/hero.webp 1920w","sizes":"(max-width: 457px) 100vw, 457px"},"seo":{"src":"/static/ca62a29181684ca858a0fb4b20094291/0ff54/hero.jpg"}}}]}},"staticQueryHashes":["1143375668","1491088328","1921650733","2068910035","2444214635"]}