{"componentChunkName":"component---src-templates-blog-post-js","path":"/javascript/design-pattern.2/","result":{"data":{"site":{"siteMetadata":{"title":"아구몬","author":"[AGUMON]","siteUrl":"https://ljlm0402.netlify.com","comment":{"disqusShortName":"","utterances":"ljlm0402/tech-blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"cc626b94-4762-5feb-94fa-9fc9b0e5749f","excerpt":"…","html":"<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 500px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 131.0810810810811%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAaABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAUBAgQD/8QAFwEAAwEAAAAAAAAAAAAAAAAAAAECA//aAAwDAQACEAMQAAABadJWEuCgVmruHmsGQtP/xAAdEAEAAQMFAAAAAAAAAAAAAAACAQADEgQRExQg/9oACAEBAAEFAtRMgBBxSQmtsUFmVZyXWriujx//xAAYEQACAwAAAAAAAAAAAAAAAAABEAIRE//aAAgBAwEBPwGwsor/xAAWEQEBAQAAAAAAAAAAAAAAAAAQARH/2gAIAQIBAT8BNp//xAAdEAACAQQDAAAAAAAAAAAAAAAAAQIQERIhIDKR/9oACAEBAAY/Aslbw1Rxk0ZKadhNDeR2LQeuH//EABwQAAICAwEBAAAAAAAAAAAAAAERACExQVEQkf/aAAgBAQABPyEI2rbStA9hRKBuCIgaatdIgd6lKLLUtkPkJVjLKi37/9oADAMBAAIAAwAAABD8CLD/xAAZEQEAAgMAAAAAAAAAAAAAAAABABARIWH/2gAIAQMBAT8Q60q5SGp//8QAFhEAAwAAAAAAAAAAAAAAAAAAAREg/9oACAECAQE/EEYv/8QAHhABAAMAAgIDAAAAAAAAAAAAAQARITFRYbFxodH/2gAIAQEAAT8QEm4TlL9Qgjra0SIwAHiVJCKGpZ281r0GEEgNOnqKGF2Dn3FUsV2v2Mr7yOb4blDAC8vc5x2OOZP/2Q=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"logo\"\n        title=\"logo\"\n        src=\"/static/e6b0c2d831b7a07cd040519411e646e3/41099/logo.jpg\"\n        srcset=\"/static/e6b0c2d831b7a07cd040519411e646e3/a80bd/logo.jpg 148w,\n/static/e6b0c2d831b7a07cd040519411e646e3/1c91a/logo.jpg 295w,\n/static/e6b0c2d831b7a07cd040519411e646e3/41099/logo.jpg 500w\"\n        sizes=\"(max-width: 500px) 100vw, 500px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h2 id=\"-목차\" style=\"position:relative;\"><a href=\"#-%EB%AA%A9%EC%B0%A8\" aria-label=\" 목차 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><strong>💎 목차</strong></h2>\n<ul>\n<li><a href=\"#-%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4\">디자인패턴</a></li>\n<li><a href=\"#-%EC%BD%94%EB%93%9C%EB%A5%BC-%EB%B3%B4%EB%A9%B0\">코드를 보며</a></li>\n</ul>\n<h2 id=\"-디자인패턴\" style=\"position:relative;\"><a href=\"#-%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4\" aria-label=\" 디자인패턴 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><strong>💠 디자인패턴</strong></h2>\n<ul>\n<li>프로그래밍을 하다보면 유사한 상황을 자주 만나게 됩니다.</li>\n<li>특정 상황에 사용되는 패턴을 <code class=\"language-text\">정형화</code>를 통해 유연하게 대처할 수 있습니다.</li>\n</ul>\n<br />\n<p><strong><a href=\"#-%EB%AA%A9%EC%B0%A8\">⬆ 목차</a></strong></p>\n<hr />\n<h2 id=\"-코드를-보며\" style=\"position:relative;\"><a href=\"#-%EC%BD%94%EB%93%9C%EB%A5%BC-%EB%B3%B4%EB%A9%B0\" aria-label=\" 코드를 보며 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><strong>😳 코드를 보며</strong></h2>\n<h3 id=\"▸-싱글톤-패턴\" style=\"position:relative;\"><a href=\"#%E2%96%B8-%EC%8B%B1%EA%B8%80%ED%86%A4-%ED%8C%A8%ED%84%B4\" aria-label=\"▸ 싱글톤 패턴 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>▸ 싱글톤 패턴</h3>\n<ul>\n<li>싱글톤 패턴은 <code class=\"language-text\">특정 클래스</code>의 객체를 한개만 유지하는 패턴이다.</li>\n<li>자바스크립트에서는 이미 객체 리터럴을 이요한 객체 생성 방법이 싱글톤 패턴과 동일하다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 43.24324324324324%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABO0lEQVQoz52SQU7CABBFuyJhKRRa1NLS1hICicYDIEZlYfQERCAtXIQ7EGjLGeQEXAYWFAKBAPtnW1auqC5eZjPz5k8ywmazIVguCYKA1WoVs16v/0Q0s91uORwOCN/TKeOxi+/7uK6H63n4IV5CJpMJw+GQ2WzG6XRCqD81kFUDVTe4lfMU8nmuMhkyCcnlcqRSKbrdLsfjEaHZbKKWDKxyGVPX0fUSmqYlxjCMWOo4Dvv9HuHl9Q2zek+lWsMKZUZJQ1EUisViIiJpNpvFtu2z8P3jk7tyhdrDI1bFxLTC81U1cUI9vOpXwnrjGflGQTMsCrcy0rWEKIqIOfFcLyBJEul0mlardRYOBgPa7S+cMLJjO/GmXq8X10tEff1+n06nw2g0YrfbIUQ/tFgsmEfM5/8imo/+MUr4AyvFklqCURPyAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"1\"\n        title=\"1\"\n        src=\"/static/8a69afd7dd21329d6bf2d28daca610d7/fcda8/1.png\"\n        srcset=\"/static/8a69afd7dd21329d6bf2d28daca610d7/12f09/1.png 148w,\n/static/8a69afd7dd21329d6bf2d28daca610d7/e4a3f/1.png 295w,\n/static/8a69afd7dd21329d6bf2d28daca610d7/fcda8/1.png 590w,\n/static/8a69afd7dd21329d6bf2d28daca610d7/efc66/1.png 885w,\n/static/8a69afd7dd21329d6bf2d28daca610d7/c83ae/1.png 1180w,\n/static/8a69afd7dd21329d6bf2d28daca610d7/19ab6/1.png 1664w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span>\n<br /></p>\n<hr />\n<h3 id=\"▸-팩토리-패턴\" style=\"position:relative;\"><a href=\"#%E2%96%B8-%ED%8C%A9%ED%86%A0%EB%A6%AC-%ED%8C%A8%ED%84%B4\" aria-label=\"▸ 팩토리 패턴 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>▸ 팩토리 패턴</h3>\n<ul>\n<li>비슷한 객체를 공장에서 찍어내듯이 반복적으로 생성할 수 있게 하는 패턴</li>\n<li>컴파일 시점에 구체적인 타입(클래스)을 몰라도 객체 생성이 가능하다.</li>\n<li>팩토리 패턴의 가장 흔한 사례는 <code class=\"language-text\">Object()</code>를 이용한 객체 생성시,</li>\n<li>주어지는 값의 타입에 따라 <code class=\"language-text\">String</code>, <code class=\"language-text\">Number</code>, <code class=\"language-text\">Boolean</code> 등 객체가 생성되는 것이다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 120.94594594594594%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAYCAYAAAD6S912AAAACXBIWXMAAAsTAAALEwEAmpwYAAADLElEQVQ4y6VVy04iURBlbzIiGWCEft7b9Au6oWneIigmo4n+hCv/xQiTiSN7F/o1Lk10oVt1jJr4BWfqNj5QAU1mcXK7w61DnapT1bGHhwfc3t7i+up6hOtr3NzcPOHv2PNsCI7Hx0fETk5OcHR0hP393zgYHuDgQODP0/k5hsMhxe7j8PAQd3d3iPX7fYS1GhKZH2CmApVJ+J5MIh6PY37+G2GeEI/eJ2FhYQFzc3OwLAsXFxdEOBhgubcKXvBRrTVQqVZRLhVgux5sP4Sbp+ecAYNzaJoGXdffgDEGWZYRhiHOzs4QGwjCbheazmAaBoEjR2BGDoadp9MAF8FEJgIVRXkDVVWRyWQQBAHOz89Hkpe7qzDyJYSNOlzPh255YDkbOdOClM1CIqJnsvekgnBxcRGlUumVsFGvIyNlkQ8rMCyTyBg0pkKhYFWloKfgaRm+Idzb66PZbFJ9VBTLVRTKAaEIN/DBqG4WZ1EZ1BmSP2QoCNOpFPLUhKDeRoEaJOTaRGQRONM/kD2/T8hwLyIUhY0KLy4rI7maQpJFoCxBkqSolu/rOZmw0SRJKpyST/DgEmwvD27ZLxC2MZhG2bJPMnySLC4Uqk14lToKQQgvrMEthjD9AFYlhGUTqa5F8r8kWWEj7yncgOaYZB0TnOonC9sQ5DG5syX3R4SqpNJ0+DAcFwrJVykb0dn3Xf20KaLLnRUaPcuFX/Rh2haRGTRWLPLfm+6OZTfVNoNBH93VHrhbREC1cl0bukGSeS6a1Une+9SHUYa0DIpkas9zIkNrNHqcTkWRZ5JOzHCltwbTC4gwRM4pgJuUJdVReE+ZMXZTCTvdDhSdU/1cys6gZrxa46WjX51lIbm11IKsZakxjMCjSwKaOClIkuSoIV/aNoPBL3TWfqJQa6HabqPS6dG5hGarjEbZR00sW/KkqmovfzQOsXSz5NNyuTwi3N3dRaPdhe74tCQ96GIR0GdAM8i0XIKek5GVMkgmU0ilPiKdTiORSMBxnNHGPj4+xs7ODtbX17G1tYWtzU1sTkD02xRsbGxge3sbl5eXiF1dXUUPp6en/wXxgbq/v8c/q+xolvByuwYAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2\"\n        title=\"2\"\n        src=\"/static/244470f814335afe1a8be08158588d56/fcda8/2.png\"\n        srcset=\"/static/244470f814335afe1a8be08158588d56/12f09/2.png 148w,\n/static/244470f814335afe1a8be08158588d56/e4a3f/2.png 295w,\n/static/244470f814335afe1a8be08158588d56/fcda8/2.png 590w,\n/static/244470f814335afe1a8be08158588d56/efc66/2.png 885w,\n/static/244470f814335afe1a8be08158588d56/c83ae/2.png 1180w,\n/static/244470f814335afe1a8be08158588d56/cea38/2.png 1644w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span>\n<br /></p>\n<hr />\n<h3 id=\"▸-iterator-패턴\" style=\"position:relative;\"><a href=\"#%E2%96%B8-iterator-%ED%8C%A8%ED%84%B4\" aria-label=\"▸ iterator 패턴 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>▸ Iterator 패턴</h3>\n<ul>\n<li>객체의 내부구조가 복잡하더라도 개별 속성에 쉽게 접근하기 위한 패턴</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 35.13513513513513%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAABEklEQVQoz5WRvWrCABSFMzo4SBL/4k/BYF1Kqa0JFjr5EmLM7iv4FoJJOtjdJ5GAu7Mkok1swJAn+JpY6BodPs65l3vPcK+QJAk/5zNB8E0YhpxTfy/ZXhRFZFnC6XRitfrCdj5xHAfLWrK0rFRvw7ZtFosF6/Way+WCsN1uaT90UNodqkqTUqmELEmIonj1eWRzhUIBXdc5HA4IruvSf37h6e2V/nDI4P2Dga7R6z2iqmou3W6XVqvFaDRiv98jbDYbmmlDrFaoKzXqjQaVag1JEpFlOZdyuUyxWETTtL/A3W7HbDbDmEyYTqcYhpGqcfW3YJom4/GY+XzO8XhEyA6ZPcbzPHzf/yer7yEIAuI45he/OlV5QIOvuQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"3\"\n        title=\"3\"\n        src=\"/static/4124140fb8f855f9b423d106e4055999/fcda8/3.png\"\n        srcset=\"/static/4124140fb8f855f9b423d106e4055999/12f09/3.png 148w,\n/static/4124140fb8f855f9b423d106e4055999/e4a3f/3.png 295w,\n/static/4124140fb8f855f9b423d106e4055999/fcda8/3.png 590w,\n/static/4124140fb8f855f9b423d106e4055999/efc66/3.png 885w,\n/static/4124140fb8f855f9b423d106e4055999/c83ae/3.png 1180w,\n/static/4124140fb8f855f9b423d106e4055999/19ab6/3.png 1664w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span>\n<br /></p>\n<ul>\n<li>위의 agg 객체 구현방법은 아래와 같다</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 78.37837837837837%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAABxUlEQVQ4y6WUzW7aQBSFWbBjEYEMmADmZ8YYbI+xnaBWaquuG4kAT4IQCLBJnqS8A+KtYAESEkKoUTidGdSoi6YOiaWjmcXc7557x3diT0+/cDo9/6XTxRLf8XjEbrdD7Od8jvE0wOzhAcHsEWE4w2QywXQ6fZPCMMRgMMByucThcEDsx90drhQVlPnQSA3X+Wuk0wpSqRSSyWSkFEVBPB5Hv98/A7vdLtRsFt7nr2CuC9vz0bxtoVqtolwuR4oQwg2kMRqNsN/vEbvv3COfy8NlDkiDQTeZPFgsFqFpWqTEWVHNcDg8AzudjsxAeSbLaaH15Ts8j4FwhyIgCvwqsMIBRt2ETg3ULO6W6m9y+U+gaCzVDfifvoH5N6hbjCcg7wcKh03Hht2wUHdbMEwb5UrlY0Cf942xJmrODUy+6rz8DwFN20TD9UBqBjQOKhYKL5fyP/CrPXSYCYv/MkbzFrbro/Leknu9HgrcDSUUtEqhG3WuhuxhqVSKlBgAYegF2G63ZcmqqiKTyci9GD2xz/IJilIul0MikZCjJ4Fz/jiIsRFDHgTBxRJx4/EYi8Xi/NpsNhus12usViu5Xqo/cdvtVgJ/A6sddOCJIkWvAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"4\"\n        title=\"4\"\n        src=\"/static/a12b7ed3ee49965e3728a063514995f6/fcda8/4.png\"\n        srcset=\"/static/a12b7ed3ee49965e3728a063514995f6/12f09/4.png 148w,\n/static/a12b7ed3ee49965e3728a063514995f6/e4a3f/4.png 295w,\n/static/a12b7ed3ee49965e3728a063514995f6/fcda8/4.png 590w,\n/static/a12b7ed3ee49965e3728a063514995f6/efc66/4.png 885w,\n/static/a12b7ed3ee49965e3728a063514995f6/c83ae/4.png 1180w,\n/static/a12b7ed3ee49965e3728a063514995f6/19ab6/4.png 1664w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span>\n<br /></p>\n<hr />\n<h3 id=\"▸-decorator-패턴\" style=\"position:relative;\"><a href=\"#%E2%96%B8-decorator-%ED%8C%A8%ED%84%B4\" aria-label=\"▸ decorator 패턴 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>▸ Decorator 패턴</h3>\n<ul>\n<li>런타임시 객체에 동적으로 부가기능을 추가할 수 있는 패턴</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 32.43243243243243%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABAUlEQVQY043QvU7CYBiG4e5s/CyUaqIxCtJQ+7WoERPkKJowNK2Ak3oKHBvtIAGShiOgYWLoAhttc9sUEyeF4Urud3vySrvdjjiOc8mPvJPkZGmast/v2W63SKvVivePT9zXAc5giPs2YjgaYts2juMc5bou/X6f8XhMFEVI89mMhia4aLRQhY5mNBHNGy7PzygWS5RK/6tUKhQKBTqdDuv1Gmk6/eKu/YjWvufp+QFdv0W06tSvr6hWZWo1GVn+m6IolMtlut0uYRgiBUHAS6+HyNaZhoEuBLqRyW6R9TGmaaKqKpZlHRZuNhsWizmTyQTf9w88/7dP4Hkey+Uy/+E3wt4kI4TogA0AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"5\"\n        title=\"5\"\n        src=\"/static/4451382558f2f1871e40b8181fabc6f0/fcda8/5.png\"\n        srcset=\"/static/4451382558f2f1871e40b8181fabc6f0/12f09/5.png 148w,\n/static/4451382558f2f1871e40b8181fabc6f0/e4a3f/5.png 295w,\n/static/4451382558f2f1871e40b8181fabc6f0/fcda8/5.png 590w,\n/static/4451382558f2f1871e40b8181fabc6f0/efc66/5.png 885w,\n/static/4451382558f2f1871e40b8181fabc6f0/c83ae/5.png 1180w,\n/static/4451382558f2f1871e40b8181fabc6f0/19ab6/5.png 1664w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span>\n<br /></p>\n<ul>\n<li>구현 예제는 다음과 같다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 73.64864864864865%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAACFklEQVQ4y6WUy27aQBSGWbAiC8I1EHw3ODYXA4JS3iQIiOkWJGANRdyk5CF4Ana8AM8DG1ggJISQwt/joY1oA23aWvo04/HMP+f858iOw+EA4IjjkXh9ZeO/PPv9HpvNBo7pdIqv/QGeX56JF4zHYwwGAwyHww8xGo3Q6XQwn8+x2+3geHws4cYThKxpkGIPuBckRLgwfD4vbt238Hg8v8Xv98PpdKLX67EoHVatBk4UoSdM6IYBXdcQJWGViEajkGUJknQdVVURCARYVizCqvUEUVZhZj4hlcsjaaYg0bukauyAIAjgCeEK9h6v14t+v38StGpfwJOAFk9BjcYg0wYuEgHPcwT/dvDH/HztomDVqiEWTyBbKMDI5BFP56AoMjjOFiQBjn8ndi76TrBcLiMcDiFT+IxkvkiiBZiUei6fRjJl0GVRKDHy6kGBrEp/jrBSqVBFfTD0JIykiZhuUCFkKoxK3opM5K9StiwLd6EQJMGumsw22R6ylCld7nvKJ4SzOX9Z8Il5GEeuWEQ8Sz6Sh3a72JtFaidRFBgfrnK1WqUo7pFJmZR2HJpBqZtZmOkEkgkDKfLRNBPMhtMFP6MoCmvutz4slUpwu90IBu8QpAa1CbAxSGsnAmfzXwmHw3C5XOh2uyfByWSCer2OdruNVqt1lWazeRH7W6PRwGw2w3a7hWO1WmGxWPwXy+US6/Wa/W2+AVrzWO0Pg5lQAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"6\"\n        title=\"6\"\n        src=\"/static/37410dff527b9518e72f096f66959540/fcda8/6.png\"\n        srcset=\"/static/37410dff527b9518e72f096f66959540/12f09/6.png 148w,\n/static/37410dff527b9518e72f096f66959540/e4a3f/6.png 295w,\n/static/37410dff527b9518e72f096f66959540/fcda8/6.png 590w,\n/static/37410dff527b9518e72f096f66959540/efc66/6.png 885w,\n/static/37410dff527b9518e72f096f66959540/c83ae/6.png 1180w,\n/static/37410dff527b9518e72f096f66959540/19ab6/6.png 1664w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span>\n<br /></p>\n<ul>\n<li>위 <code class=\"language-text\">decorators()</code>를 아래와 같이 구현할 수 있다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 58.78378378378378%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABx0lEQVQoz5WTS27aUBSGPYNZW4QNLX6AjV+kxiDUSo2qrKBRsWkKq2AEK2AZjGiw3U2kC2AJMEViFLARiOHf40uaATSJMvh05Cufz+f+15dL4gSb9Rrr+3us00psNhvERLqeEsfxiyRJgu12C+7uzx1+3d4iin4jCgOExDQIEIQhwihiBPQ8nU5ZPSWk9yaTCWazGfb7Pbh2x0euJMJwmtAvHBimDkXV8V5WoegWysSHUgm8UEA+nz+jUCggk8lgOBzicDiA6/g+BJ5HvfUZjS9X0AwbtuPCIrlJWB/rqNUbbK1SqUBRFJTL5UdUVWXiVLjb7cB5XhuSWkXz8gq15idUTQsyNcmSBClFFB+RZfmMVJrL5TAYDI7Cdvs721aTpjNoIpum0WsORFEiziXpR54Ver6HIi+gRhKXpK3Lr2i1XLgN2rJlsYZTybNCnzLkKcNqVYdFORkksZ06LtwGNE17UvSksPOjQ/lIME0bmm6w0KWH/E4P4H+cHcq362u8e/OWBCSqqBAEgU3M/6svUCwWkc1m0e/3j//haDRCmmO328XPmxtWX0Ov14PneRiPx8ebslwusVgsMJ8vHur81aR9q9WKXcG/gjf2IB9/nmgAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"7\"\n        title=\"7\"\n        src=\"/static/431b07baf3d3c24caa6cf9766aef7eeb/fcda8/7.png\"\n        srcset=\"/static/431b07baf3d3c24caa6cf9766aef7eeb/12f09/7.png 148w,\n/static/431b07baf3d3c24caa6cf9766aef7eeb/e4a3f/7.png 295w,\n/static/431b07baf3d3c24caa6cf9766aef7eeb/fcda8/7.png 590w,\n/static/431b07baf3d3c24caa6cf9766aef7eeb/efc66/7.png 885w,\n/static/431b07baf3d3c24caa6cf9766aef7eeb/c83ae/7.png 1180w,\n/static/431b07baf3d3c24caa6cf9766aef7eeb/19ab6/7.png 1664w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span>\n<br /></p>\n<hr />\n<h3 id=\"▸-프록시-패턴\" style=\"position:relative;\"><a href=\"#%E2%96%B8-%ED%94%84%EB%A1%9D%EC%8B%9C-%ED%8C%A8%ED%84%B4\" aria-label=\"▸ 프록시 패턴 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>▸ 프록시 패턴</h3>\n<ul>\n<li>Lazy Initialization (게으른 초기화)로 어플리케이션 부하를 줄여준다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 84.45945945945947%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAAsTAAALEwEAmpwYAAACUElEQVQ4y5WUy27aQBSG2bJBjSikAePL+DYGjMEBoqpK2fQBCAXWPANvQ7hs2OcpUiS2LEFCUZDYBIiSF/h7xlGCGhlUFp88Y5/5/Z85Zyby8vKC3W6HzWaD7eYJm6ent/F2G7AT0PdjiLjn52e8vr4isl6vMR6PMRgOMBwOA/qDAW5v++j3+xgO9u/DGI1G6PV6uLu7C0Qj0+kUssqQ+paGpGehWg50JkNRUpAyGcTjX3F29oU4CyUejyMajaJareLx8RGRP5MJvIILx7Lh0pNnHdhOFnka27YNTdOgqupBGCMzqRRqtRqWyyUiExJ0OIdlc7hFDyaJyJoJRdWQIYcCWZYPoigKzs/PcX19vRc0LQu6aSPrlZD3q8gVfdh5D0w3/hEMEw8XNE0Yugm3VIZTKME0DNjcgUzB7y7fxT6LHhRkmg7OXTCDxkyjuRoEq4SmKic6JEc6OcyXfKqWh6urEnI5DkM4NRi4adCeqqelLBYYtFBUTRREkjKEFLSOdGQfDxaFux7c6g+4/iWcXB62ZVJbKJDS6TdhImwfQwVFagZV2f/+E+XaLxTLFfiXZfAc9SWJuy4Hd5zQtA+mLFOgpdvICAcyFYEWiyqLxmaMmpie/50yp8a28wV4lSsULiuUrgWLYEz/WPRe8c8nRfzw4uJif1Lu7++DYEnV6ZRY0HRxlNJIJpMBiUTiKMJdLBZDpVJ5E5zNZuh0Ori5qaPRaAQ0m7+JZkCr1TpKu91GvV5Ht9vFarVCRNxlDw8PmM/nWCwWH4j5KYibRtyNfwHq/pl+l2JtDgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"8\"\n        title=\"8\"\n        src=\"/static/f84fd8c4c02faeda414f7cb502e443b0/fcda8/8.png\"\n        srcset=\"/static/f84fd8c4c02faeda414f7cb502e443b0/12f09/8.png 148w,\n/static/f84fd8c4c02faeda414f7cb502e443b0/e4a3f/8.png 295w,\n/static/f84fd8c4c02faeda414f7cb502e443b0/fcda8/8.png 590w,\n/static/f84fd8c4c02faeda414f7cb502e443b0/efc66/8.png 885w,\n/static/f84fd8c4c02faeda414f7cb502e443b0/c83ae/8.png 1180w,\n/static/f84fd8c4c02faeda414f7cb502e443b0/19ab6/8.png 1664w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span>\n<br /></p>\n<ul>\n<li>위와 같이 클릭 이벤트에 대해서 이벤트 핸들링이 가능하다.</li>\n<li>아래는 Proxy를 이용하여 HTTP 라운드 트립을 줄일 수 있는 코드다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 104.05405405405406%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAAAsTAAALEwEAmpwYAAACxElEQVQ4y51USU4bQRT1mgXIjUGk7XZXz/Pkjo3NEJRklz0KZskVOAyKI4U1l0AgDsAaJJAYNsEgixO8/Cq3E+S0I8ji6VdXV73/3x+q8vz8jMfHIR4efmI4HNL6UdjXYnL+6ekJnKtyd3eHH4eH+DYYYDD4Thi8GQcHBzg6OhKklbOzM8gKg2p5kOV3WFhYQLVafTUkScLc3ByyLMP19TUqJycnsGwbq5+/IN/4CMNywJhKYCX2b+i6jnq9jvX1dVxeXo4JdcNA3F5F0OqAmQ6UZhNM0wg6VKaJdZP2yqCqKlZWVtDr9V4QkpcgcJC2UgRxDC/OKFILThDDcn2yERhdVBRlJmG32x0Tnp6eQtMYGk0GK2ohzFpw/AAukSqNBhokh2NCNk06g1CjHwxB2kHUXkOUk/wkhaZrQjJHGdlsQpLMozEsF3FvC6ubm8jSAH7gQqPqTwr1KsJJDpt0WFSOiuIGIVQ6LMsklxzV3yKZExoGFSX04ac5wiSB41JEhiX2TZJtk9XI2ZuKouomWhufsLb1AX4Uk1QXBkVuEaFFhKyEkH+XRmiaBsLQg0ktwkxPtAovFJda55IJgoygvMA/q8wL44Ux3DCC6biiDxnt6VwuWX5RmZJbGiEnnIxP3srR6VHbtHvI2h2EeUf0ZZhkorl55LYfUZ+GYwezCLVitAzKIyt6jvclH7nx6FGUxvjfdLVnEypNeOSZz3Sctwnv4UYppSARo+gnuYiQifQYv4tUSmjxfNEB2wvgEYlHeQwCT4ygTU5szy/WNJKUZy9KYDuOIOPByLL857U5Pj4Wzbu0tIRabRGLUpUgEWi9yCEVtlhLBei7VqtheXkZ8/PzSNMUFxcXqJyfn2Nvbw87O1+xu7uLPkefo1/Yl+vpvb64s729jf39fdzc3KDCn+3b21tcXV2JF5fb/8H9/T1GoxF+ASLyGWb6WdpUAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"9\"\n        title=\"9\"\n        src=\"/static/cf72784927af4dea665ab53a051c2891/fcda8/9.png\"\n        srcset=\"/static/cf72784927af4dea665ab53a051c2891/12f09/9.png 148w,\n/static/cf72784927af4dea665ab53a051c2891/e4a3f/9.png 295w,\n/static/cf72784927af4dea665ab53a051c2891/fcda8/9.png 590w,\n/static/cf72784927af4dea665ab53a051c2891/efc66/9.png 885w,\n/static/cf72784927af4dea665ab53a051c2891/c83ae/9.png 1180w,\n/static/cf72784927af4dea665ab53a051c2891/19ab6/9.png 1664w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span>\n<br /></p>\n<ul>\n<li>HTTP 요청이 50 밀리세컨이내로 일어난다면, 각각 보낼 것이 아닌 <code class=\"language-text\">setTimeout()</code>을 이용하여 요청을 잠시 보류한 후 한번에 보낸다.</li>\n<li>그렇게 되면, HTTP 라운드 트립 횟수가 줄어들기 때문에 전체적으로 성능이 향상될 수 있다.</li>\n</ul>\n<br />\n<hr />\n<h3 id=\"▸-mediator-패턴\" style=\"position:relative;\"><a href=\"#%E2%96%B8-mediator-%ED%8C%A8%ED%84%B4\" aria-label=\"▸ mediator 패턴 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>▸ Mediator 패턴</h3>\n<ul>\n<li>객체 간의 영향도 (결합도)가 높은 상태에서는 어플리케이션의 리팩토링이 예기치 않은 결과를 나을 수 있다.</li>\n<li>따라서, 결합도를 낮추기 위해 객체의 상태가 변경되면 Mediator에게 먼저 전달하고,</li>\n<li>이를 Mdeiator가 다른 객체에 전달하는 방식의 코딩이 가능하다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 73.64864864864865%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAACV0lEQVQ4y52U20obURSGc5GrQMFoYpIxcz7sOcTJTDSxClYp+AiVYrS0tLQlTrxX0hwsbd8hT+CdL5Dn0Ru9ECEEQf+u2WlL09TaduBjr71h//zrX5tJ3NzcALjD3e0tX3l9F6//9o1GI1xdXSFxcnKCD50uPn3+gm63h07vI3rHx1R3/4per4fDw0MMBgMMh0Mknm1v49FcDooTwFn0YHqLWCiKmJ2dRTo9w5mZGZNOp6fIZDJIJpNotVrcZWJ3tw5BEGDaLgn6HMYYdE2DoqhQadV0A5qmQ1VVOlMm0HUd2WwWnU5n7LC+s4PcggArCOBVaigt1bBcLcMrl+GENdglH6bjwbAYRFGEKEmQfiIWjbtpt9tjwR0SzJNDw/P4Rcv14DgWNMOEZjkwmM1rw7KhkMNY9I+CscNsPgerHCJc20R1cwsrq1VUauQuXIUXLsOvrcFffkxtaxOCcT0tWK9jjg5USYZObbFKiGBpiQt5rsOztGhQBrlnBtW6yvccqgPXhpDPT7YsFAS6XOKtSXFOxSKK35B+yUx6KMO9vT3IogTTYDBIVKacJGkyJz6Me5gWfPESqltGuLIChwbDAp8G5JI7kd5jcWoIDzp89foNyutb2Hi6jo0nVaySoE/ZlZgJj1kw6J3Jsnwv8aDix/3jHT6nDBd0Ru5s2JYGXRZhKhICpqNkqDBVBblcHvPz87+lUCgglUrh6OhoLNjv9/H+3VtEUYR9IoqavG7sf99HaDab93JwcIBGo4HT01NcX18jcXFxgfPzc5ydnf038f3Ly0v+t/kK9/NeARf6F74AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"10\"\n        title=\"10\"\n        src=\"/static/78b1ba33d29252d1689f344b338019fa/fcda8/10.png\"\n        srcset=\"/static/78b1ba33d29252d1689f344b338019fa/12f09/10.png 148w,\n/static/78b1ba33d29252d1689f344b338019fa/e4a3f/10.png 295w,\n/static/78b1ba33d29252d1689f344b338019fa/fcda8/10.png 590w,\n/static/78b1ba33d29252d1689f344b338019fa/efc66/10.png 885w,\n/static/78b1ba33d29252d1689f344b338019fa/c83ae/10.png 1180w,\n/static/78b1ba33d29252d1689f344b338019fa/19ab6/10.png 1664w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span>\n<br /></p>\n<hr />\n<h3 id=\"▸-observer-패턴\" style=\"position:relative;\"><a href=\"#%E2%96%B8-observer-%ED%8C%A8%ED%84%B4\" aria-label=\"▸ observer 패턴 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>▸ Observer 패턴</h3>\n<ul>\n<li>클라이언트 측 자바스크립트 프로그래밍에서 널리 사용되는 패턴이다.</li>\n<li><code class=\"language-text\">subscriber</code> / <code class=\"language-text\">publisher</code> 패턴이라고도 한다.</li>\n<li>예) mouseover, keypress와 같은 브라우저 이벤트</li>\n<li>이 패턴은 주요 목적은 객체간의 결합도를 낮추는 것이다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 140.54054054054052%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD10lEQVRIx5VWS08iaRRl72LUjPIo6kk9qQKqKAooGNAeO5NZdMdWf4Sbnh9iAt0LG6e3blz4W7rXCjEmumgxaoy/4Mz9PrCDDwZ6cVJQ1Hdy7r3n3CJxf3+Pm5sbDK9+4IowvBpiOLwiDHF9fT03GMfDwwMS375/x9HREb586eHfr1/5dZ/QOzjAAaHX6/0v2DP7+/s4PDzE7e0tEp1OF+VKhN8FBTkvgOVY0CwHQlbC8vIyFhd/IyxOBXtmYWEBlmXh7OwMiW63i2azCVlVYXklFMMKikEAx7GhaRpUlUGFoigck58Z2DOiKCIMQ5ycnBBhp4M4jpHNabCiCHapDMeP4Hk2TIupdWHYeWi5HD8oSdITyLKMTCaDgEScnp6OFDLC5GoSTqmCsLWBoBYjqlVg5EvQDIuUF2ESqUwEz0kZYTqdhu/7TwkzdNPK6TByJhQtRw/LELNZZIUMh0AqHskmSV8QdsYli1SyXvCg511YbhEulWxTHxXd4ipNx+U9m6mQE9brEGSJCIuwiwHy1McgLMH1A6g5gwamQdMNfng2YbeDRqMBhWxikhIj75ESlbdAEAQiyHISVv5cJbMerq2/gW465ME8DCpNM5ll1BcTleYZSocNpUE+NPIo1lqoVCMUiiWukh9m6n6CkYjzDUWg0pi5Wb9kZlppXB4/pNA9dUwmzbDNmDCjKshXY4RxE1FcRUR9df0ybL8KtxxRespzlvyYFPrRoekWii5ZxoFOeVaYYkUdKSb8EiFTaAchCmEdXlhFrVFFJfJhlqoUxSqC+h/QdR1ZmvZcSUmnUrBpuqZu0qQ9vihYli23QF7UeR8lOvx84tOTQjbRLJMfZpaRyeiiPCpZ5RuFxVAYx1H4WforQxkrpAk6UQ3h+jqab9bg19sot96i0vqT2lCFSYZn0E1zpHq8tqaWnEomoVBZxTDiJEHchu0V+GGNlgWzlEpXvhPZ93EMpxPSTbY8dUWDYdBSoNJHm+Zl/CZj+GoP67QcJDKsZTu8Z48Er0Vv5lCYwna7hRwNwGDL1PVGcROyIyW/muVu9xOarTYUIrMLAWTNgGLTcijkkTMNrlycyPPMbfPp82ds/P0O5bW/0H67gbjVhE/bx6eFoRs6DUF+8lJ6DtZ3Znb2kuKEe3t7iNvr0OgVanseDJMMrIjIiBlkpDTSQgrpbArJdBIrKysvsLq6iqWlJdhUFX/rHR8f45+PH/H+/Ttsb2/jw4ctbG1t8c/bOxPYfh07OzvY3NzE7u4uzs/PkWB/Iy4vL9EfDDB4jv4A/f7oOhhMR7/fx8XFBe7u7vAfNZftHnKr2AcAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"11\"\n        title=\"11\"\n        src=\"/static/ee7f4e7c3c2450e79e929fe0bb403567/fcda8/11.png\"\n        srcset=\"/static/ee7f4e7c3c2450e79e929fe0bb403567/12f09/11.png 148w,\n/static/ee7f4e7c3c2450e79e929fe0bb403567/e4a3f/11.png 295w,\n/static/ee7f4e7c3c2450e79e929fe0bb403567/fcda8/11.png 590w,\n/static/ee7f4e7c3c2450e79e929fe0bb403567/efc66/11.png 885w,\n/static/ee7f4e7c3c2450e79e929fe0bb403567/c83ae/11.png 1180w,\n/static/ee7f4e7c3c2450e79e929fe0bb403567/cea38/11.png 1644w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span>\n<br /></p>\n<br />\n<p><strong><a href=\"#-%EB%AA%A9%EC%B0%A8\">⬆ 목차</a></strong></p>\n<hr />\n<br />\n<blockquote>\n<p>출처</p>\n<p><a href=\"https://joshua1988.github.io/web-development/javascript/javascript-pattern-design/\" target=\"_blank\">CAPTAIN PANGYO > javascript-pattern-design</a></p>\n</blockquote>\n<h1 id=\"여러분의-댓글이-큰힘이-됩니다-๑̀ㅂ́و✧\" style=\"position:relative;\"><a href=\"#%EC%97%AC%EB%9F%AC%EB%B6%84%EC%9D%98-%EB%8C%93%EA%B8%80%EC%9D%B4-%ED%81%B0%ED%9E%98%EC%9D%B4-%EB%90%A9%EB%8B%88%EB%8B%A4-%E0%B9%91%CC%80%E3%85%82%CC%81%D9%88%E2%9C%A7\" aria-label=\"여러분의 댓글이 큰힘이 됩니다 ๑̀ㅂ́و✧ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>여러분의 댓글이 큰힘이 됩니다. (๑•̀ㅂ•́)و✧</h1>","frontmatter":{"title":" 디자인 패턴 💠 ▻ 디자인 패턴 ","date":"September 04, 2019"}}},"pageContext":{"slug":"/javascript/design-pattern.2/","previous":{"fields":{"slug":"/javascript/design-pattern.1/"},"frontmatter":{"title":" 디자인 패턴 💠 ▻ 객체 생성 패턴 ","category":"JavaScript"}},"next":{"fields":{"slug":"/javascript/design-pattern.3/"},"frontmatter":{"title":" 디자인 패턴 💠 ▻ DOM과 브라우저 패턴 ","category":"JavaScript"}}}},"staticQueryHashes":["3128451518","3956431471"]}