소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 해결책재사용할 수 있는 코드 조각은 아니고 특정 문제를 해결할 수 있는 방식을 알려주는 일반적인 개념알고리즘이 목표를 달성하기 위해 필요한 일련의 절차를 나타내면, 패턴은 결과와 기능들은 제시하나, 구현은 직접 해
Factory Method : 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성된 객체들의 유형을 변경할 수 있도록 하는 생성 패턴물류관리앱을 개발중이라 가정해보자. 앱의 초기버전은 트럭운송만 처리가 가능해 대부분 코드가 Truck
추상 팩토리: 관련 객체들의 구상 클래스들을 지정하지 않고도 관련 객체들의 모음을 생성할 수 있도록 하는 생성패턴가구 판매장을 위한 프로그램을 만들고 있다. 코드에는 다음 클래스들이 있다제품군: 의자, 소파 커피 테이블 등등..제품군의 여러 변형: 각각은 현대식, 빅토
복잡한 개체들을 단계적으로 생성할 수 있도록 하는 생성 디자인 패턴같은 제작 코드를 사용하여 객체의 다양한 유형들과 표현 제작 가능집을 짓고 싶다 해보자. 집 자체의 클래스는 이미 구현이 되어있다.그런데 정원, 차고, 수영장 등을 조합하고자 한다. 제일 간단한 방법은
출처:https://refactoring.guru/ko/design-patterns/prototype
클래스에 인스턴스가 하나만 있도록 하면서 인스턴스에 대한 전역 접근 지점을 제공하는 생성 디자인 패턴한번에 두가지 문제를 해결 -> 단일 책임 원칙 위반에 유의클래스에 인스턴스가 하나만 있도록 하기데이터페이스, 파일 등 공유 리소스에 대한 접근을 제어할 필요가 있음기존
의도 어댑터는 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 하는 구조적 디자인 패턴 문제 XML 데이터를 받아오는 주식 서비스의 값을 사용하고 싶다. 그런데 분석 라이브러리는 JSON 형식 데이터로만 작동하게 된다. XML 형식의 데이터를 받아오도록
큰 클래스 또는 밀접하게 관련된 클래스 집합을 두 개의 개별 계층구조로 나누어 독립적으로 개발할 수 있도록 하는 구조 디자인 패턴원과 직사각형 모양이 있는 Shape 클래스가 있다 가정해보자Shape 클래스를 확장해 빨강, 파란색이 있는 원, 사각형을 만들고자 한다.지
복합체 패턴 => 객체들을 트리 구조들로 구성하고, 이러한 구조들과 개별 객체들처럼 작업할 수 있도록 하는 구조 패턴앱의 핵심 모델이 트리로 표현 가능할때만 사용할것제품, 상자의 2개의 객체들이 있다 가정해보자. 상자 내부에는 여러개의 다른 상자들과 여러 제품들이 포함
객체들을 새로운 행동들을 포함한 래퍼 객체들 내에 넣어서 행동들을 연결시키는 디자인 패턴알림 라이브러리를 만들고 있다 가정해 보자. 다른 프로그램들이 사용자들에게 중요한 이벤트들에 대해 알릴 수 있도록 하는 것이다.초기 라이브러리 구조는 Notifier을 바탕으로 몇개
퍼사드 패턴 => 라이브러리, 프레임워크, 다른 클래스들의 복잡한 집합에 대한 단순화된 인터페이스를 제공하는 구조 패턴라이브러리, 프레임워크의 광대한 객체들의 집합을 가지고 코드를 작동시켜야 한다 하자.이 경우 객체들을 모두 초기화하고, 종속성 관계들을 추적하고, 올바
플라이웨이트 -> 각 객체에 모든 데이터를 유지하는 대신 RAM에 더 많은 객체들을 포함하게 하는 디자인 패턴게임 프로그램을 제작하고 있다 해보자. 이 때 어느 디버그 로그를 분석한 결과, 메모리 부족으로 인해 게임이 충돌할 가능성이 발견되었다.현재 Particle 객
프록시: 다른 객체에 대한 대체물을 제공할 수 있는 구조 디자인 패턴매우 많은 양의 자원을 소비하는 객체가 하나 있다 가정해보자.항상 필요한 객체가 아니라면, 객체를 지연되게 초기화 시킬 수 있을 것이다.그렇다면 객체를 사용하는 모든 클라이언트 코드들은 지연된 코드를
책임 연쇄 패턴 -> 핸들러들의 체인을 따라 요청을 전달할 수 있게 해주는 행동 디자인 패턴온라인 주문 시스템을 개발하고 있다 가정해보자. 인증된 사용자들만 주문을 생성할 수 있고, 관리 권한이 있는 사용자들은 모든 주문에 대한 전체 접근 권한을 가질 수 있어야 한다.
커맨드 -> 요청을 하나의 큰 독립실행형 객체로 변환하는 행동 디자인 패턴다양한 요청들이 있는 메서드들을 인수화 할 수 있도록 하며, 요청의 실행을 기억하고 취소할 수 있는 작업을 지원할 수 있게 됨텍스트 편집기 앱을 개발하고 있다 가정해보자. 현재 여러 버튼이 있는
반복자 -> 리스트, 스택, 트리 등의 컬렉션 요소들으 기본 뵤현을 노출하지 않고 순회할 수 있도록 해주는 행동 디자인 패턴객체 그룹의 집합인 컬렉션이 있다 가정해보자.보통 컬렉션들을 저장하는 곳은 배열이지만, 일부는 스택, 트리, 그래프 등의 조금 더 복잡한 자료 구
중재자 -> 객체 간의 직접적인 의존을 제한하고 중재자를 통하도록 하는 행동 디자인 패턴프로필을 만들고 편집하기 위한 대화 상자가 있다고 가정해보자. 이미 구조가 상당히 복잡한 상태이다.일부 요소들은 다른 요소들과 상호작용할 수 있다. 가령 "집에 개가 있다"라는 조건
메멘토 -> 객체의 세부 사항을 공개하지 않으면서 해당 객체의 이전 상태를 저장하고 복원할 수 있게 해주는 행동 디자인 패턴텍스트 편집기 앱을 만들고 있다 가정해보자. 편집기에는 텍스트 이외에도 텍스트 서식, 인라인 이미지 삽입 등의 기능을 지원한다.텍스트 편집기에서
여러 객체에 자신이 관찰 중인 객체에 발생하는 모든 이벤트에 대하여 알리는 구독 메커니즘을 정의할 수 있도록 하는 행동 디자인 패턴휴대폰을 파는 가게가 있고 새로운 아이폰이 출시되었다 가정해보자.손님이 새 아이폰을 사고싶다면 가게에 직접갈 수 있지만, 가게에서 재고가
상태 => 객체의 내부 상태가 변경될 때 해당 객체가 행동을 변경할 수 있도록 하는 행동 디자인 패턴다음 그림과 같은 문서 상태가 있다 가정해보자이 상태를 관리하고자 할 경우 행동에 따라 조건문을 만들어 상태를 변경해야 할 것이다.그런데 문서를 관리하는 객체가 복잡해지
전략 패턴 => 알고리즘의 패밀리를 정의해 각각을 클래스에 넣고, 객체간 상호작용을 할 수 있도록 하는 행동 디자인 패턴지도앱을 만들고 있다 해보자. 주된 기능은 목적지로 가는 가장 빠른 경로를 나타내주는 것이다.처음에는 차량 이동만을 고려했지만, 기능을 추가하면서
템플릿 메서드 => 부모 클래스에서 알고리즘의 골격을 정의하지만, 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계를 오버라이딩 할 수 있도록 하는 행동 디자인 패턴데이터 마이닝 앱을 개발하고 있다 가정해보자.처음에는 Doc 파일만을 지원하다, 나중
비지터 => 알고리즘을 작동하는 객체로부터 분리할 수 있도록 하는 행동 디자인 패턴거대한 그래프로 구성된 지도를 사용한 앱을 개발하고 있다.그래프의 각 노드는 도시와 같은 복잡한 객체를 나타낼 수 있고, 관광지와 같은 세부적인 항목 역시도 포함할 수 있다. 도로가 있으