본문 바로가기
반응형

Design Pattern/구조 패턴(Structural patterns)7

Proxy Pattern, 프록시 패턴 프록시 패턴이란? 객체의 대변인 역할을 하는 객체를 만들어 제공하는 패턴이다. 그렇기에 프록시객체를 통해 접근을 제어하고 요청을 전달하며 전/후 처리를 수행하는 역할을 하게 된다. 예를 들어 우리가 은행에 가서 직접 거래를 하지 않고 ATM이라는 프록시를 통해 거래를 처리하는 것과 같다. 왜 사용해야 하는가? 원래 객체에 대한 접근 제어가 가능하다. 요청의 전처리나 후처리를 수행하여 로깅, 트랜잭션 관리 등의 기능을 추가할 수 있다. 원래 객체의 생성 비용이 높을 경우 프록시를 통해서 필요한 경우에만 객체를 생성하도록 하여 생성 비용을 절감할 수 있다 어떤 경우에 사용하는가? 접근 제어 혹은 전/후처리가 필요한 경우 지연로딩이 필요한 경우(객체의 생성 비용이 높은 경우) 문제점 프록시 객체를 추가해야 하.. 2024. 2. 15.
Flyweight Pattern, 플라이웨이트 패턴 플라이웨이트란? 메모리 사용량을 줄이기 위해서 사용된다. 수많은 객체를 생성할 때 객체들의 공통된 부분을 공유하여 메모리의 사용량을 줄일 수 있다. 예를 들어 배틀그라운X에서 나무, 총알, 파편등 많은 입자들을 각각 별도의 객체로 구현했다면 메모리가 매우 많이 필요하게 되어 사양이 매우 좋은 사람 빼고는 게임을 원활하게 진행하기 어려웠을 것이다. 이러한 부분을 플라이웨이트 패턴을 통해서 최대한 메모리를 적게 사용하도록 만들어서 슈퍼컴퓨터가 아닌 일반 사용자도 게임을 즐길 수 있게 된다. 왜 사용해야 하는가? 메모리 사용량을 줄일 수 있기 때문이다. 객체 생성 비용이 높은 경우 이를 줄여주어 성능 향상에 도움이 된다. 어떤 경우에 사용해야 하는가? 많은 수의 유사한 객체를 생성해야 하는 경우 메모리 사용량.. 2024. 2. 14.
Facade Pattern, 퍼사드 패턴 퍼사드 패턴이란? 일단 퍼사드의 의미는 건물의 출입구로 이용되는 정면을 의미한다 이와 마찬가지로 디자인패턴에서의 퍼사드 또한 여러 복잡한 서브시스템들을 묶어 단순한 인터페이스로 제공하는 것이다. 왜 사용해야 하는가? 클라이언트가 복잡한 서브시스템들과 직접 상호작용할 필요 없이, 퍼사드를 통해 손쉽게 사용할 수 있다. 서브시스템의 변경이 클라이언트 코드에 영향을 최소화할 수 있다. 언제 사용해야 하는가? 복잡한 서브시스템을 단순화할 때 서브시스템과 인터페이스를 통일하고 싶을 때 서브시스템 간 의존성을 낮추고 싶을 때 클라이언트 코드를 간소화하고 싶을 때 퍼사드 vs 어댑터 vs 데코레이터 퍼사드 => 인터페이스 간소화 어댑터 => 서로 다른 인터페이스 호환 데코레이트 => 인터페이스 기능 추가 문제점 새로.. 2024. 2. 7.
Decorator Pattern, 데코레이터 패턴 데코레이터 패턴이란? 기존 클래스의 기능을 유연하게 확장할 수 있도록 해준 디자인 패턴이다. 새로운 기능을 추가한 래퍼클래스로 감싸 기존의 코드를 수정하지 않고 기능을 추가할 수 있도록 한다. 예를 들어 커피숍에서 커피메뉴를 주문할 때 설탕, 우유, 휘핑크림 같은 것을 추가할 수 있는데 패턴을 사용하지 않으면 각 음료마다 이 많은 옵션들을 추가해주어야 한다. 관리도 힘들고 메뉴를 추가하기도 힘들게 된다. 하지만 데코레이터 패턴을 이용하면 커피메뉴와 추가옵션들을 분리하여 손쉽게 관리할 수 있게 된다. 왜 사용해야 하는가? 새 자식 클래스를 만들지 않고 기능을 확장할 수 있다. 객체를 여러 데코레이터로 래핑 하여 추가 기능들을 합성할 수 있다. 단일 책임의 원칙을 지킨다. (여러 개의 작은 클래스로 나뉨) .. 2024. 2. 6.
Composite Pattern, 복합체 패턴 복합체 패턴이란? 컴포지트 패턴 혹은 복합체 패턴이라고 불리는 이 패턴은 객체들을 트리구조로 구성하여 개별객체와 복합 객체를 동일하게 취급할 수 있도록 하는 구조적 디자인패턴이다. 이를 통해서 단일객체와 복합객체를 일관된 방식으로 다룰 수 있게 된다. 왜 사용해야 하는가? 단일 객체와 복합 객체를 동일하게 취급하기 때문에 클라이언트 쪽에서 코드를 일관된 방식으로 사용할 수 있게 된다. 재귀적인 구조로 편리하게 구현할 수 있다. 새로운 단일 객체나 복합 객체를 추가할 때 기존의 코드를 수정하지 않는다. 어떤 경우에 사용해야 하는가? 나무처럼 계층적인 부분-전체 구조를 갖고 있을 때 사용하면 좋다. 예를 들어, 그래픽 요소나, 문서 구조등이 있다. 클라이언트가 일관된 인터페이스로 사용해야 할 때 사용하면 좋.. 2024. 2. 5.
Bridge Pattern, 브릿지 패턴 브릿지 패턴이란? 큰 클래스나 클래스들의 집합을 추상화, 구현을 이용해서 계층구조로 작성하여 독립적으로 개발할 수 있도록 만든 디자인패턴이다. 마치 다리처럼 프로그램의 추상화 부분과 구현 부분을 연결을 해주어 서로 독립적으로 변경하거나 확장할 수 있도록 하는 것이다. 왜 사용해야 하나요? 추상화와 구현 부분을 독립적으로 확장할 수 있다 => 기능을 확장하면서도 기존 코드를 건들지 않는다는 말이다! 특히 복잡한 계층구조에서 이를 활용하면 많은 수의 클래스를 줄일 수 있습니다. 런타임시 구현을 바꿀 수 있는 유연성을 갖게 됩니다. 클라이언트에게 구현부의 변경을 숨길 수 있게 되어 안정성이 증가합니다! 어떤 경우에 사용하나요? 복잡한 클래스의 계층구조를 가지고 있어 많은 수의 클래스가 생겨 추가하거나 변경하기.. 2024. 2. 5.
Adapter Pattern, 어댑터 패턴 어댑터 패턴이란? 어댑터 패턴이란, 디자인패턴 중 구조적 패턴으로 서로 호환되지 않는 인터페이스들을 기존의 코드를 변경하지 않고 연결할 수 있도록 변환하는 디자인패턴이다! 마치 평소에 220V 플러그를 사용하는 우리가 해외로 여행 갔을 때 110V 플러그 '어댑터'를 사용하는 것처럼 기존에 사용하던 것을 변경시키지 않고 어댑터만 추가하여 변경할 수 있도록 해주는 것이다. 왜 사용해야 하나요? 기존 코드를 수정하지 않아 안정성을 유지할 수 있다 기존 코드를 그대로 사용할 수 있기에 개발 시간을 단축할 수 있다 서로 다른 클래스 간에 결합도를 줄여줄 수 있다 어떤 경우에 사용하나요? 이미 존재하고 있는 클래스나 라이브러리를 수정하지 않고 새로운 시스템에서 사용해야 할 때 사용할 수 있다 서로 다른 인터페이스.. 2024. 2. 1.
반응형