분류 전체보기 썸네일형 리스트형 [GoF] 경량 (Flyweight) 패턴 경량 (Flyweight) 패턴 구조 패턴중복된 정보를 가진 객체를 공유하여 메모리를 최적화합니다. 경량 (Flyweight) 패턴을 알아보기에 앞서, 이번에는 마인크래프트를 구현해보겠다. 마인크래프트는 수 많은 블럭들로 이루어진 세계를 실체화하는데, 이를 관리하는 기본적인 단위인 청크 (Chunk) 에서 블럭들의 정보가 담겨지게 된다. 블럭을 구현하기 위해 블럭 클래스를 작성하고 청크에서 블럭 클래스를 생성하여 참조하도록 하자. (0, 0, 0) 지점에 블록 객체 생성, 또 (0, 0, 1) 지점에 블럭 객체를 생성하고.. 그렇게 끊임없이 반복하면 한 청크당 16 * 16 * 256 개, 즉 65536 개의 블럭이 생성되어 참조될 것이다.이는 마인크래프트 세계를 표현해낼 수 있게 하겠지만, 메모리의 입.. [GoF] 파사드 (Facade) 패턴 파사드 (Facade) 패턴 구조 패턴복잡한 객체 구조에 대한 간략화된 인터페이스를 클라이언트에게 제공합니다. 어는 날 당신은 파일럿이 되어 비행기를 이륙시키기 위해 비행기에 탑승했다. 당신은 엔진에 직접 라이터로 불을 붙여 시동을 켜고, 어느 정도 속력이 붙었을 즈음 직접 수평 꼬리 날개를 당겨 비행기를 이륙시켰다. 이번엔 상공에서 천천히 좌회전을 하겠다. 당신은 수직 꼬리 날개를 회전 방향으로 천천히 당겨서... 무언가 좀 이상하지 않은가? 그렇다. 파일럿이 탔던 비행기는 조종석이 없었던 것이다. 그래서 파일럿은 비행기의 모든 구성 요소에 대한 제어를 일일이 하고 있었다. 이래서야 제대로 된 비행은 커녕 목숨을 부지하기도 어려울 것이다.다시 처음부터 시작해 보자. 이번엔 조종석이 있는 비행기이다. 당.. [GoF] 데코레이터 (Decorator) 패턴 데코레이터 (Decorator) 패턴 구조 패턴 여러 객체의 참조 관계를 통해 객체의 기능을 동적으로 확장합니다. 블로그를 방문할 때 Powered by ~ 라는 글귀를 본 적이 있을 것이다. 이는 사용자가 작성했던 글이 해당 사이트에 의해 제공되었다는 의미이다. 그러므로, 지금 이 글은 'Powered by Tistory'이다. 만약 이 글이 네이버 블로그에서 작성되었다면 'Powered by NaverBlog'가 될 것이다. 사용자가 작성했던 글은 HTML로 작성된 텍스트 더미이나, 이것이 사이트로부터 제공되어지면 사이트가 가진 스타일시트(CSS)에 의해 글은 꾸며져 방문자에게 보여진다. 따라서 사용자가 작성했던 글은 같은 내용일지라도 서로 다른 사이트에 의해 다르게 꾸며진다. 여기서 사이트라는 개념.. [GoF] 컴포지트 (Composite) 패턴 컴포지트 (Composite) 패턴 구조 패턴복합 객체가 동일하게 취급할 수 있는 복수의 단일 객체에 대한 트리 구조를 형성하며, 단일 객체와 동일한 인터페이스를 클라이언트에게 제공합니다. 컴포지트(Composite)는 합성이라는 개념을 의미하는데, 컴포지트 패턴에서는 여러 객체의 합성을 제어할 수 있도록 하는 객체를 정의한다. 이것은 우리가 운영체제에서 자주 접하는 폴더와 파일의 개념에서 예로 들 수가 있다.파일은 일련의 정보를 저장하기 위한 최소의 단위이고 폴더는 다수의 파일을 관리하기 용이하도록 분류하는 네임스페이스이다. 이와 같이 둘은 서로 다른 개념이지만, 폴더는 파일과 같이 용량을 확인할 수가 있으며 파일과 달리 내부 파일들의 용량의 합을 용량으로 보여준다. 파일의 집합을 관리하는 폴더가 용량.. [GoF] 브릿지 (Bridge) 패턴 브릿지 (Bridge) 패턴 구조 패턴클래스의 구현 계층과 추상 계층을 분리하여 각자의 독립적인 변형을 용이하게 합니다. 객체 지향 프로그래밍에 있어 클래스의 상속이란 다형성의 의미 그 자체를 담는다. 그렇기에 프로그래머는 수 많은 이유로 클래스의 상속을 통해 다형성을 구현하는데, 그 이유를 분류하자면 두 가지 의미로 귀결된다: 상위 클래스의 기능을 확장하기 위해 상속하여 추상 계층을 형성하는 것과, 상위 클래스의 기능을 구현하기 위해 상속하여 구현 계층을 형성할 수가 있다. 그러나, 이 두가지 의도로 클래스를 복합적으로 상속해나갈 경우, 추상 계층과 구현 계층이 뒤섞여 확장하는데에 어려움이 발생할 것이다.그래서 브릿지 패턴은 이 두 계층을 개별적인 클래스로 나누게 되며, 교량이 두 지점을 잇듯이 추상 .. [GoF] 프록시 (Proxy) 패턴 프록시 (Proxy) 패턴 구조 패턴사용할 객체의 제어권을 위임함으로써, 객체에 대한 클라이언트의 요청을 대신 받아 전달합니다. 프록시(Proxy) 란 대리권을 의미하는 단어로써, 프록시 패턴은 객체에 대한 제어권을 위임받는 별도의 객체를 통해 객체에 대한 클라이언트의 요청을 대리하여 수행한다. 그렇다면, 프록시는 구체적으로 어떻게 클라이언트의 요청을 대리하여 수행하는것인가?대표적으로 레스토랑의 예를 들어보겠다. 레스토랑은 고객이 요청한 음식을 셰프가 제공하는 형태의 업체이다. 하지만, 대부분의 경우에는 셰프가 직접 음식을 고객으로부터 요청받지 않고, 요리된 음식을 고객의 테이블에 가져다놓지도 않는다. 고객과 셰프 사이의 중개인으로써 웨이터가 존재한다. 웨이터는 고객으로부터 요청받은 음식을 셰프에게 전달.. [GoF] 어댑터 (Adapter) 패턴 어댑터 (Adapter) 패턴 구조 패턴클래스의 인터페이스를 클라이언트가 요구하는 인터페이스로 변환합니다. 어댑터를 통해 클라이언트는 직접적으로 호환되지 않는 클래스를 연결해서 사용할 수 있습니다. 우리는 살면서 어댑터라는 개념을 가진 물건을 한번 쯤 사용해본 적이 있을 것이다. 핸드폰을 충전할 때 사용하는 전원 어댑터, 컴퓨터와 모니터 사이에 연결하는 HDMI 어댑터 등등... 이처럼 어댑터는 서로 다른 물체를 간접적으로 연결하게 하는 역할을 가지고 있다. GoF는 이 어댑터의 개념을 소프트웨어 설계에 적용하였다.클라이언트는 클래스가 다양한 인터페이스에 대응하는것을 원하기도 하는데, 그럴 경우에 클래스에 인터페이스를 직접 구현하는것도 방법이지만, 그것은 SOLID의 개방-폐쇄의 원칙에 어긋나기도 하고 .. GoF 디자인 패턴에 대하여 기술에 대하여 조금이라도 눈여겨보았던 사람은 국제 표준화 기구 (ISO)에 대해 한 번쯤 들어 보았을 것이다. 이는 나라마다 다른 표준을 전 세계적으로 사용하기 적합하게 함으로써 국가 간의 유연한 교환을 하도록 국제적으로 공인된 표준을 정의한다. 표준화는 불협화한 상호 간의 기준을 위하여 공용화된 소통의 수단으로써 활용된다. 소프트웨어를 만드는 프로그래머에게 있어 표준화란 매우 중요한 자리에 서 있을 것이다. 셀 수도 없이 많은 프로그래밍 언어들은 표준화된 규칙을 가지고 있고, 프로그래머는 이를 활용하기만 하면 무궁무진한 가능성을 가진 구조를 설계할 수 있다. 하지만, 소프트웨어 구조의 설계 또한 표준이 없으면 다소 모호해진다. 새로운 구조의 설계에는 수많은 방안이 요구되고, 이를 설명하는 데에도 많은 .. 이전 1 2 3 다음