본문 바로가기

디자인패턴13

[디자인패턴] 컴포짓 패턴 (Composite Pattern) 목적 클라이언트가 각 객체와 객체의 묶음을 동일하게 다룰 수 있도록 함 요소 문제 : 프로그램에서 각각의 객체(개별 객체) 또는 계층 구조로 이루어진 객체 묶음(복합 객체)을 다뤄야 함 해결 : 개별 객체와 복합 객체에 대해 동일한 작업을 적용. 대부분의 경우에 개별 객체와 복합 객체의 차이를 무시할 수 있도록 함 결과 : 유지보수에 유리 정의 컴포넌트 개별 객체와 개별 객체들을 계층 구조로 포함하는 복함 객체를 나타내는 인터페이스 또는 추상 클래스 개별 객체(Leaf) 다른 컴포넌트를 포함할 수 없는 컴포넌트 복합 객체(Composite) 개별 객체 또는 다른 복합 객체를 포함할 수 있음 컴포짓 패턴을 이용한 메뉴 디자인 MenuItem은 개별객체(Leaf), Menu는 복합 객체(Composite) .. 2021. 12. 13.
[디자인패턴] MVC 패턴 목적 업무 로직(Business Logic) 및 데이터(Model)와 보이는 부분(View)을 분리 요소 문제 : 데이터와 해당 데이터를 보여주는 부분(뷰)의 코드가 섞여있음 해결 : 데이터와 뷰를 분리하고 이들을 연동시키는 컨트롤러를 추가 결과 : loose coupling, 재사용성 설계 모델 : 데이터를 관리하는 부분 뷰 : 화면에 보이는 부분 컨트롤러 : 사용자의 입력을 처리하고, 모델과 뷰 사이에서 상호작용을 할 수 있도록 지원 MVC 패턴의 장단점 장점 클래스간 정보 공유를 최소화시킴 - 모델과 뷰가 서로에 대해 잘 몰라도 됨 같은 모델에서 여러 개의 뷰를 지원할 수 있음 단점 뷰가 업데이트 되어야 함을 알려줘야함 - 모델이 뷰에게 데이터를 직접 전달하는 것 보다 비효율적임 컨트롤러의 역할이 .. 2021. 12. 12.
[디자인패턴] 템플릿 메소드 패턴 (Tempalate Method Pattern) 목적 알고리즘의 뼈대를 정의하고, 일부를 서브 클래스로 위임. 알고리즘의 구조를 변경하지 않고 알고리즘의 일부 내용을 서브 클래스에서 재정의 할 수 있도록 함 요소 문제 : 알고리즘들을 캡슐화시키면서 중복되는 코드가 여러 클래스에 존재함 해결 : 알고리즘의 중복되는 부분을 부모 클래스에 캡슐화, 달라지는 부분만 서브 클래스에 구현 결과 : 중복되는 코드를 줄임 정의 추상 클래스에서 고정된 알고리즘 즉, 알고리즘 뼈대를 구현 - templateMethod. 구현체마다 다를 수 있는 primitivOperation은 추상 메소드로 구현 상속받은 Concrete 클래스는 primitiveOperation 메소드를 구현하여 전체 알고리즘을 완성한다. 음료 레시피 구현 "물을 끓인다 (boilWater)"와 "컵.. 2021. 12. 11.
[디자인패턴] 상태 패턴 (State Pattern) 목적 객체의 내부 상태가 바뀔 때 객체의 동작을 변경할 수 있도록 함. 객체는 자신의 클래스를 바꾸는 것 처럼 보임. 요소 문제 : 상태가 여러개 있고, 이를 if 문으로 통제함 해결 : 상태를 한 곳에서 관리 결과 : 변경 최소화 정의 A상태의 handle과 B상태의 handle의 동작이 다르다. -> 상태가 다르면 객체의 동작이 다름 뽑기 기계 구현 뽑기 기계는 4 가지의 상태(매진, 동전없음, 동전있음, 판매)가 있고, 다음의 4 가지 메소드(동전 투입, 반환, 손잡이 돌림, 알맹이 내보냄)가 있다. 상태 패턴을 사용하지 않고 이를 구현하려면 메소드마다 state에 대한 조건문을 구현해야 한다. (4*4 = 16가지를 구현) 만약 state가 추가된다면 조건문을 모든 메소드에 추가해야 된다 -> 문.. 2021. 12. 11.