C/C++ 디자인 패턴 (18) — 옵저버(Observer)
지역별 매출 데이터가 바뀌면 변경 로그, 막대 차트, 합계 표가 모두 갱신돼야 한다. 데이터 클래스가 이 화면들을 직접 호출하면 새 화면을 추가할 때마다 데이터 클래스를 고쳐야 하고, 화면 없이 데이터만…
지역별 매출 데이터가 바뀌면 변경 로그, 막대 차트, 합계 표가 모두 갱신돼야 한다. 데이터 클래스가 이 화면들을 직접 호출하면 새 화면을 추가할 때마다 데이터 클래스를 고쳐야 하고, 화면 없이 데이터만…
문서 편집기의 글자 하나하나를 객체로 만들면 편하지만, 글자마다 글꼴 이름·크기·색을 들고 있으면 10만 글자짜리 문서가 수십 MB를 차지한다. 그런데 서식은 대부분 몇 가지뿐이고, 글자마다 다른 것은 위치 정도다. 플라이웨이트(Flyweight)는 객체의…
8편에서 만든 메뉴 시스템은 항목을 선택하면 command()가 불리는 데서 끝났다. 실제 프로그램에서는 "Save를 선택하면 문서를 저장한다"처럼 메뉴 항목과 애플리케이션의 동작을 연결해야 한다. 그런데 메뉴는 라이브러리 쪽 코드이고 문서는 애플리케이션 쪽…
new로 만든 객체는 누군가 정확히 한 번 delete해야 한다. 함수 중간에 return이나 예외가 끼면 해제가 빠지고, 두 곳에서 해제하면 이중 해제가 된다. 스마트 포인터(smart pointer)는 이 "누가 언제 해제하는가"를 타입으로…