반응형
1. 방문자 패턴 정의 💡 방문자 패턴 (Visitor Pattern) 알고리즘을 객체 구조에서 분리시키는 디자인 패턴이다. 데이터 구조와 처리를 분리하는 것이다. 'visitor'는 방문자 라는 의미로 데이터 구조를 방문하고 다니는 주체인 '방문자'를 나타내는 클래스를 준비하고 그 클래스에 처리를 맡기는 것이다. 2. 예제 프로그램 (1) 예제 코드 Visitor 패턴을 사용해 파일과 디렉토리 구조를 표현 역할 이름 내용 Visitor Visitor 클래스 파일이나 디렉토리를 방문하는 방문자를 나타내는 추상 클래스 Element Element 인터페이스 Visitor 클래스의 인스턴스를 받아들이는 데이터 구조를 나타내는 인터페이스 ConcreteVisitor ListVisitor 클래스 Visitor ..
1. 컴포지트 패턴 정의 💡 컴포지트 패턴 (Composite Pattern) 객체들을 트리 구조로 구성하여 개별 객체와 복합 객체를 동일한 방식으로 다룰 수 있게 하는 구조적인 패턴 중 하나 이다. 이 패턴은 "전체-부분" 계층 구조를 표현할 때 유용하며, 클라이언트 코드가 단일 객체든 복합 객체든 동일한 인터페이스를 통해 사용할 수 있게 한다. 컴퓨터의 파일 시스템에는 '디렉토리'(폴더라 부르기도 함)가 있다. 디렉토리 안에는 또 다른 디렉토리나 파일이 들어간다. 디렉토리를 그릇, 파일을 내용물이라 생각하자. 그릇안에 더작은 그릇을 넣을 수 있듯이 디렉토리안에 디렉토리를 넣을 수 있다. 디렉토리는 이렇게 중첩 구조, 재귀적인 구조를 만들어 낸다. 컴포지트 패턴은 이러한 '중첩 구조', '재귀적인 구조..
1. 브릿지 패턴 정의 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다. 💡 브릿지 패턴 (Bridge Pattern) 객체의 구현부(implementation)와 추상층(abstraction)을 분리하여 각각 독립적으로 변형할 수 있게 하는 구조적인 디자인 패턴 중 하나이다. 이 패턴은 서로 독립된 두 개의 계층이 서로 연결되어 동작하게 하는 것을 중점으로 한다. 'bridge' 란 '다리' 라는 의미로 다음의 두 장소에서 연결하는 역할을 한다. 기능의 클래스 계층 구현의 클래스 계층 2. 클래스 계층의 두 가지 역할 (1) 기능을 추가하는 '기능의 클래스 계층에서 연결' Pizza 라는 클래스에 새로운 기능을 추가하고 싶을 때, CheesePizza 하위 클래스를 생성한다...
1. 중재자 패턴 정의 💡 중재자 패턴 (Mediator Pattern) 객체 간의 상호 작용을 캡슐화하여 객체 간의 직접적인 통신을 방지하고, 중재자 객체를 통해 간접적으로 상호 작용하도록 하는 디자인 패턴이다. 'Mediator'는 '중재자'라는 뜻이다. 그룹의 멤버들이 많아 소통이 원활하지 않을때, '중재자'를 두는 것을 생각하면 된다. 멤버는 모두 중재자에게만 보고하고, 중재자는 멤버에게 지시를 내리도록 하면 '중재자'를 통해 소통이 원활해지게 된다. 2. 예제 프로그램 Mediator 패턴을 사용해 나타낸 간단한 채팅 어플리케이션 역할 이름 내용 Mediator ChatMediator 인터페이스 중재자 역할을 정의 Colleague User 클래스 사용자 역할을 정의 ConcreteMediato..
0. 프록시란? 클라이언트 (client) 와 서버 (server) 개념에서 클라이언트는 서버에 필요한 것을 요청하고, 서버는 그 요청을 처리하는 것이다. 네트워크 개념으로 생각하면, 클라이언트는 웹브라우저가 되고 서버는 웹 서버이다. 객체로 생각하면 요청하는 객체가 클라이언트이고 요청을 처리하는 객체가 서버이다. 이 때, 클라이언트가 서버를 직접 호출하고 처리 결과를 직접 받는다면 직접 호출이라하고, 어떤 대리자를 통해서 대신 간접적으로 요청하고 결과를 받는다면 간접 호출이라 한다. 여기서 대리자를 프록시 (Proxy) 라고 한다. 그런데, 대리자를 이용하면 그 대리자가 중간에 여러가지 일을 할 수 있다는 점이 특징이다. 대리자에게 "커피 좀 사와"라고 부탁했는데, 그 대리자가 이미 커피가 준비되어 있..
💡 이터레이터 패턴 (Iterator Pattern) 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있는 방법을 제공한다. ■ 예제 : 레스토랑 합병 Steak 레스토랑과 Burger 레스토랑의 합병이 결정되었다. 두 레스토랑이 합병하면서 메뉴를 통일화하고 판매하기로 했다. (1) 문제인식 1. 두 레스토랑이 합의한 메뉴 항목 : MenuItem /** * 두 가게의 합의한 메뉴 */ public class MenuItem { String name; // 메뉴명 String description; // 메뉴설명 boolean vegetarian; // 베지테리언 여부 Long price; // 가격 public MenuItem(String name, String..