3가지 패턴
물류 관리 앱 가정앱 v1 - 트럭 운송만 처리 가능, 대부분의 코드가 Truck 클래스에 있음앱 v2 - 선박 운송도 처리해야 하는 상황 → 앱에 Ship 클래스를 추가하려면 전체 코드 베이스를 변경해야 함, 추후 다른 교통수단 추가하려면 또 변경 필요결과 - 많은
가구 매장 시뮬레이터를 만든다고 가정코드는 다음을 나타내는 클래스들로 구성됨:연관된 제품들 (Chair + Sofa + CoffeeTable)해당 제품군의 변종(variant)들 (Modern, Victorian, ArtDeco)새로운 가구 객체 생성 시 같은 제품군의
많은 필드와 중첩된 객체들을 힘들게 단계별로 초기화해야 하는 복잡한 객체 → 초기화 코드가 종종 많은 파라미터들로 이루어진 무시무시한 생성자 안에 파묻혀 있거나, 클라이언트 코드 전반에 흩어져 있음House 객체 가정기본적으로 4개의 벽, 바닥, 문, 창문, 지붕 필요
하나의 객체가 있고, 그 객체와 똑같은 복제본을 만들고 싶은 경우같은 클래스의 새로운 객체 생성 → 원본 객체의 모든 필드 값을 새 객체에 복사?프로토타입 패턴 - 실제로 복제되는 객체들에 복제 프로세스를 위임복제를 지원하는 모든 객체에 공통 인터페이스 선언 → 그 인
싱글톤 패턴 - 한 번에 두 가지의 문제를 해결하며 SRP를 위반함클래스가 하나의 인스턴스만 있도록 함클래스의 인스턴스 수를 제한하는 가장 흔한 이유 → 공유 자원 접근 제어를 위해 (e.g. DB/파일)객체를 하나 생성하고 또 객체를 생성하면 새로운 객체를 생성하는
주식 시장 모니터 앱 가정주식 데이터를 XML 포맷으로 다운받아서 차트와 다이어그램으로 보여주는 앱써드 파티 분석 라이브러리를 도입하고 싶은데, 라이브러리는 JSON 포맷의 데이터만 사용 가능한 상황라이브러리를 변경해 XML 데이터를 다룰 수 있게 할 수는 있지만 그렇
도형을 나타내는 Shape 라는 클래스에 Circle과 Square 라는 서브클래스가 있다고 가정이 클래스 계층을 확장해 색상을 도입하기 위해 Red와 Blue라는 서브클래스를 만들려고 하는 상황→ 이미 두 서브클래스가 있기 때문에 총 4개의 클래스 조합 필요 (e.g
앱의 핵심 모델이 트리로 표현될 수 있을 때만 컴포지트 패턴 사용 가능Product와 Box 두 종류의 객체가 있다고 가정Box에는 여러 개의 Product와 더 작은 Box들을 넣을 수 있음해당 클래스들을 사용해 주문 시스템을 만들 때, 박스 안에 제품들이 있는 박스
유저들에게 중요 이벤트에 대해 알림을 보내주는 알림 라이브러리 가정처음엔 Notifier 클래스에 이메일을 보내주는 send 메서드만 있었는데, 이메일 말고 SMS, Facebook, Slack 알림 등등도 지원해야 하는 상황Notifier 클래스를 확장해 새로운 알림
복잡한 라이브러리나 프레임워크에 속하는 광범위한 객체의 집합들을 다뤄야 하는 상황일반적으로 모든 객체들을 초기화하고, 의존성을 추적하고, 메서드들을 올바른 순서대로 실행하는 등등의 작업 필요결과적으로 클래스들의 비즈니스 로직이 써드 파티 클래스들의 세부 구현에 강하게
현실적인 입자 시스템을 가진 FPS 게임 가정총알, 미사일, 파편 등이 맵 전반에 날아다님→ RAM 부족으로 인해 게임이 멈추는 현상 발생입자 시스템에 문제 존재총알, 미사일, 파편 등 각각의 입자가 많은 데이터를 포함한 독립된 객체로 표현되고 있음Particle 클래
객체에 대한 접근을 제어하는 이유 - 많은 시스템 리소스를 소모하는 거대한 객체가 있다고 가정가끔 필요하지만 항상 필요한 객체는 아님객체가 실제로 필요할 때에 생성하는 지연 초기화를 구현할 수도 있지만, 이 경우 객체의 모든 클라이언트들은 지연된 초기화 코드를 실행해야
텍스트 에디터 앱 가정에디터의 다양한 작업을 위한 많은 버튼들이 있는 툴바를 만들어야 함툴바의 버튼과 대화 상자의 일반 버튼들이 사용하는 Button 클래스를 생성했음모든 버튼이 비슷하게 생겼지만 모두 다른 작업을 하는 상황 - 버튼의 클릭 핸들러는 어디에 위치해야 할
콜렉션은 프로그래밍에서 가장 많이 사용되는 데이터 타입 중 하나지만, 단지 객체 그룹의 컨테이너일 뿐콜렉션들은 단순한 리스트에 요소를 저장하지만, 어떤 콜렉션들은 스택, 트리, 그래프 또는 다른 복잡한 자료 구조를 기반으로 함콜렉션이 어떻게 구성되어 있든, 다른 코드들
고객 프로필 생성/관리 대화 상자 가정텍스트 필드, 체크박스, 버튼 등 다양한 form control로 구성form 요소 중 일부는 다른 요소들과 상호작용할 수도 있음e.g. “저는 반려동물이 있습니다” 라는 체크박스를 체크하면 반려동물 이름을 적는 숨겨진 텍스트 필드
텍스트 에디터 앱 가정텍스트에 실행된 작업을 실행 취소하는 기능을 구현해야 하는 상황 → 작업 실행 전에 앱이 모든 객체의 상태를 저장해 저장소에 저장하도록 하고, 실행 취소를 하면 기록에서 가장 최근 스냅샷을 가져와 모든 객체의 상태를 복원하기로 했음스냅샷 → 객체
고객, 매장 두 종류의 객체가 있음고객 - 매장에 곧 들어올 특정 브랜드의 제품에 관심이 있음 → 매일 매장에 방문해 재고를 확인할 수 있지만 제품이 들어오기 전까진 무의미함 매장 - 새 제품이 들어올 때 모든 고객들에게 이메일 보냄 → 몇몇 고객들은 좋지만 다른
유한 상태 기계의 개념과 밀접한 관련이 있음프로그램이 한 시점에 가질 수 있는 유한한 갯수의 상태 존재각 상태마다 프로그램은 다르게 행동하고, 한 상태에서 다른 상태로 즉시 변경 가능현재 상태에 따라 다른 상태로 변경이 될 수도 안 될 수도 있음이런 변경 규칙을 ‘전이
내비 앱 가정가장 빠른 경로 찾기 기능, 자동차 경로만 지원하다가 도보 경로, 대중교통, 자전거 등 추가새 경로 알고리즘 추가할 때바다 내비 클래스는 두 배로 커지는 상황알고리즘 하나가 변경되면 클래스 전체에 영향 끼침새로운 기능 구현 → 거대한 클래스 변경, 코드 충
기업 문서를 분석하는 데이터 마이닝 앱 가정앱에 다양한 포맷의 문서들을 넣어 동일한 포맷의 유의미한 데이터 추출앱의 첫 번째 버전 - DOC, 두 번째 버전 - CSV, 세 번째 버전 - PDF데이터 포맷을 다루는 코드는 다르지만 데이터 가공/분석 코드는 거의 동일 →
거대한 그래프로 구성된 지리적 정보를 나타내는 앱 가정각 노드는 도시와 같은 복잡한 개체도, 보다 작은 기업체, 관광지 등도 표현할 수 있음만약 실제 객체들 사이에 길이 존재한다면 노드 연결각 노드의 종류는 자체 클래스로 표현되고, 각 노드는 객체임그래프를 XML 포맷