text: (window.webpackJsonp=window.webpackJsonp||[]).push([[102],{258:function(t,a,e){"use strict";e.r(a);var r=e(19),s=Object(r.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"design-pattern-개요"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#design-pattern-개요"}},[t._v("#")]),t._v(" [Design Pattern] 개요")]),t._v(" "),e("hr"),t._v(" "),e("br"),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("일종의 설계 기법이며, 설계 방법이다.\n")])])]),e("br"),t._v(" "),e("ul",[e("li",[e("h3",{attrs:{id:"목적"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#목적"}},[t._v("#")]),t._v(" 목적")]),t._v(" "),e("p",[t._v("SW "),e("strong",[t._v("재사용성, 호환성, 유지 보수성")]),t._v("을 보장.")]),t._v(" "),e("br")]),t._v(" "),e("li",[e("h3",{attrs:{id:"특징"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#특징"}},[t._v("#")]),t._v(" 특징")]),t._v(" "),e("p",[e("strong",[t._v("디자인 패턴은 아이디어")]),t._v("임, 특정한 구현이 아님.")]),t._v(" "),e("p",[t._v("프로젝트에 항상 적용해야 하는 것은 아니지만, 추후 재사용, 호환, 유지 보수시 발생하는 "),e("strong",[t._v("문제 해결을 예방하기 위해 패턴을 만들어 둔 것")]),t._v("임.")]),t._v(" "),e("br")]),t._v(" "),e("li",[e("h3",{attrs:{id:"원칙-solid-객체지향-설계-원칙"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#원칙-solid-객체지향-설계-원칙"}},[t._v("#")]),t._v(" 원칙 - SOLID (객체지향 설계 원칙)")]),t._v(" "),e("p",[t._v("(간략한 설명)")]),t._v(" "),e("ol",[e("li",[e("h4",{attrs:{id:"single-responsibility-principle"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#single-responsibility-principle"}},[t._v("#")]),t._v(" Single Responsibility Principle")]),t._v(" "),e("p",[t._v("하나의 클래스는 하나의 역할만 해야 함.")])]),t._v(" "),e("li",[e("h4",{attrs:{id:"open-close-principle"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#open-close-principle"}},[t._v("#")]),t._v(" Open - Close Principle")]),t._v(" "),e("p",[t._v("확장 (상속)에는 열려있고, 수정에는 닫혀 있어야 함.")])]),t._v(" "),e("li",[e("h4",{attrs:{id:"liskov-substitution-principle"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#liskov-substitution-principle"}},[t._v("#")]),t._v(" Liskov Substitution Principle")]),t._v(" "),e("p",[t._v("자식이 부모의 자리에 항상 교체될 수 있어야 함.")])]),t._v(" "),e("li",[e("h4",{attrs:{id:"interface-segregation-principle"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#interface-segregation-principle"}},[t._v("#")]),t._v(" Interface Segregation Principle")]),t._v(" "),e("p",[t._v("인터페이스가 잘 분리되어서, 클래스가 꼭 필요한 인터페이스만 구현하도록 해야함.")])]),t._v(" "),e("li",[e("h4",{attrs:{id:"dependency-inversion-property"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#dependency-inversion-property"}},[t._v("#")]),t._v(" Dependency Inversion Property")]),t._v(" "),e("p",[t._v("상위 모듈이 하위 모듈에 의존하면 안됨.")]),t._v(" "),e("p",[t._v("둘 다 추상화에 의존하며, 추상화는 세부 사항에 의존하면 안됨.")])])])])]),t._v(" "),e("br"),t._v(" "),e("ul",[e("li",[e("h3",{attrs:{id:"분류-중요"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#분류-중요"}},[t._v("#")]),t._v(" 분류 (중요)")])])]),t._v(" "),e("p",[e("code",[t._v("3가지 패턴의 목적을 이해하기!")])]),t._v(" "),e("ol",[e("li",[e("h4",{attrs:{id:"생성-패턴-creational-객체의-생성-방식-결정"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#생성-패턴-creational-객체의-생성-방식-결정"}},[t._v("#")]),t._v(" 생성 패턴 (Creational) : 객체의 "),e("u",[t._v("생성 방식")]),t._v(" 결정")]),t._v(" "),e("p",[t._v("Class-creational patterns, Object-creational patterns.")]),t._v(" "),e("div",{staticClass:"language-text extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("예) DBConnection을 관리하는 Instance를 하나만 만들 수 있도록 제한하여, 불필요한 연결을 막음.\n")])])]),e("br")]),t._v(" "),e("li",[e("h4",{attrs:{id:"구조-패턴-structural-객체간의-관계-를-조직"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#구조-패턴-structural-객체간의-관계-를-조직"}},[t._v("#")]),t._v(" 구조 패턴 (Structural) : 객체간의 **"),e("u",[t._v("관계")]),t._v("**를 조직")]),t._v(" "),e("div",{staticClass:"language-text extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("예) 2개의 인터페이스가 서로 호환이 되지 않을 때, 둘을 연결해주기 위해서 새로운 클래스를 만들어서 연결시킬 수 있도록 함.\n")])])]),e("br")]),t._v(" "),e("li",[e("h4",{attrs:{id:"행위-패턴-behavioral-객체의-행위-를-조직-관리-연합"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#행위-패턴-behavioral-객체의-행위-를-조직-관리-연합"}},[t._v("#")]),t._v(" 행위 패턴 (Behavioral): 객체의 **"),e("u",[t._v("행위")]),t._v("**를 조직, 관리, 연합")]),t._v(" "),e("div",{staticClass:"language-text extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("예) 하위 클래스에서 구현해야 하는 함수 및 알고리즘들을 미리 선언하여, 상속시 이를 필수로 구현하도록 함.\n")])])])])]),t._v(" "),e("br")])}),[],!1,null,null,null);a.default=s.exports}}]);