Memento Pattern
1. Memento 패턴이란 오브젝트 지향의 프로그램에서 undo 기능을 실행하려면 인스턴스가 가지고 있는 정보를 저장해 둘 필요가 있다. 단, 저장만 해서는 쓸모가 없고 저장한 정보로부터 인스턴스를 원래의 상태로 되돌려야 한다. 인스턴스를 복원하기 위해서는 인스턴스 내부의 정보를 자유롭게 액세스할 수 있어야 한다. 그러나 원하지 않는 액세스를 허용...
1. Memento 패턴이란 오브젝트 지향의 프로그램에서 undo 기능을 실행하려면 인스턴스가 가지고 있는 정보를 저장해 둘 필요가 있다. 단, 저장만 해서는 쓸모가 없고 저장한 정보로부터 인스턴스를 원래의 상태로 되돌려야 한다. 인스턴스를 복원하기 위해서는 인스턴스 내부의 정보를 자유롭게 액세스할 수 있어야 한다. 그러나 원하지 않는 액세스를 허용...
1. Observer 패턴이란 Observer 패턴에서는 관찰 대상의 상태가 변화하면 관찰자에게 알려준다. Observer 패턴 은 상태 변화에 따른 처리를 기술할 때 효과적이다. 2. 객체 Observer 패턴의 클래스 다이어그램 1) Subject(관찰 대상자)의 역할 Subject 역할은 관찰자인 Observer 역할을 동록하는 ...
1. Mediator 패턴이란 mediator는 ‘조정자’, ‘중개자’라는 의미이지만, 의지할 수 있는 ‘중개인’을 상상하는 편이 이해하기 쉬울 것이다. 곤란한 일이 생기거나 모임 전체에 영향을 미칠만한 일이 발생하면 중개인에게 알리고, 중개인의 지시대로 실행한다. 모임의 각 회원이 멋대로 다른 회원과 대화해서 판단하는 것이 아니라, 언제나 중개인을 ...
1. Facade 패턴이란 프로그램이라는 것은 점점 커지는 경향이 있다. 많은 크래스가 만들어져 서로 관계를 맺으면서 복잡하게 된다. 클래스를 사용할 경우에는 클래스 간의 관계를 정확히 이해하고 정확한 순서대로 메소드를 호출할 필요가 있다. 커다란 프로그램을 사용해서 처리를 실행하려면 상호 관련된 많은 클래스를 적절하게 제어해야 한다. 그렇다면 그 ...
1. Chain of Responsibility 패턴이란 책임 떠넘기기라는 단어는 부정적인 의미가 강하지만 ‘책임 떠넘기기’같은 처리가 필요 할 경우도 있다. 어떤 요청이 발생했을 때 그 요청을 처리할 오브젝트를 직접 결정할 수 없는 경우, 복수의 오브젝트(객체)를 사슬(chain)처럼 연결해 두면, 그 오브젝트(객체)의 사슬을 차례로 돌아다니면서 목...
1. Visitor 패턴이란 데이터 구조 안에 많은 요소가 저장되어 있고, 그 각 요소에 대해서 무엇인가 ‘처리’해 간다고 가정한다. 이때 그 ‘처리’의 코드는 일반적으로 생가하면 데이터 구조를 표시하고 있는 클래스 안에 기술할 것이다. 그러나 만약, 그 ‘처리’가 여러 종류라면 새로운 처리가 필요할 때마다 데이터 구조의 클래스를 수정해야 한다. V...
1. Decorator 패턴이란 스펀지 케이크가 1개 있다고 가정한다. 크림을 바르면 아무 모양이 없는 크림 케이크가 된다. 여기에 딸기를 얹으면 딸기 케이크가 되고, 초콜릿으로 장식을 하고 이름을 쓰고 나이 수만큼 초를 꽂으면 생일 케이크가 완성된다. 오브젝트(객체)도 이런 케이크와 비슷한 경우가 있다. 우선 스펀지 케이크와 같은 중심이 되는 오프...
1. Composite 패턴이란 컴퓨터의 파일 시스템에는 ‘디렉터리’라는 것이 있다. 디렉터리 안에는 파일이 있거나 다른 디렉터리(하위 디렉터리)가 있기도 한다. 또 그 하위 디렉터리 안에는 다른 파일이나 하위 디렉터리가 있기도 한다. 디렉터리는 이와 같이 ‘상자 안의 상자’로 된 구조, 즉 재귀적인 구조를 만들어 낸다. 디렉터리와 파일은 서로 다르...
1. Strategy 패턴이란 모든 프로그램은 무제를 해결하기 위해 작성된다. 그리고 문제를 해결하기 위해 특정 알고리즘이 구현되고 있다. Strategy 패턴에서는 그 알고리즘을 구현한 부분을 모두 교환할 수 있다. 알고리즘(전략, 작전, 방책)을 빈틈없이 교체해서 같은 문제를 다른 방법으로도 해결할 수 있도록 도와주는 패턴이 Strategy 패턴 ...
1. Bridge 패턴이란 Bridge 패턴이 다리 역할을 하고 있는 두 곳은 ‘기능의 클래스 계층’과 ‘구현의 클래스 계층’이다. 기능의 클래스 계층은 새로운 기능을 추가하고 싶을 경우 클래스 계층 안에서 자신의 목적과 가까운 클래스를 찾아내 그 하위 클래스를 만들어, 목적한 기능을 추가한 새로운 클래스를 만드는 것이다. 구현의 클래스 계층은 새...