인기 글
-
2. 생성자, 소멸자 및 대입 연산자
항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상함수를 호출하지 말자
주식 거래를 본떠 만든 클래스 계통 구조가 있다고 하자. 매도, 매수 등등이 있어야 할 것인데 이러한 거래를 모델링할 때 꼭 감사(audit)기능이 있어야 한다. 그래서 어떤 주식 거래 객체가 생성될 때 마다 감사 로그에 적 절한 거래 내역이 나오게 하고 싶다. 그래서 다음과 같이 코드를 짰음. BuyTransaction의 생성자가 호출될 탠데, 생성자의 호출 순서는 base 클래스의 생성자가 먼저 호출되고 그 다음 derived 생성자가 호출되고 … 순서이다. base 클래스 생성자에 가상함수인 logTransaction을 호출하는 부분이 보이는데, 이때의 logTransaction은 BuyTransaction가 아니라 Transaction의 것이다. 기본 클래스의 생성자가 호출될 동안에는 가상 함수는..
-
2. 생성자, 소멸자 및 대입 연산자
항목 7: 다형성을 가진 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자
시간 기록을 유지하는 방법은 활용에 따라 무궁무진 하다. 그래서 TimeKeeper 라는 기본 클래스를 만들어 놓은 후 적절한 용도에 따라 이것을 상속하도록 설계하면 딱 알맞을 거 같다. TimeKeeper를 쓰는 사용자들은 시간 정보에 접근하고 싶은데, TimeKeeper에서 시간 계산을 어떻게 하는지는 관심이 없고, 그냥 시간 정보에 접근만 하고 싶다. => 이럴 때 어떤 시간기록 객체에 대한 포인터를 반환하는 용도로 팩토리 함수(factory function, 새로 생성된 derived class 객체에 대한 base class 포인터를 반환하는 함수) 를 만들어 두면 딱 좋을 거 같다.(getTimeKeeper()) [C++] 팩토리 함수 :: IT's me (tistory.com) 참고 팩토리 ..
-
1. 서론
1.5 카탈로그 조직화하기
패턴의 목적 · 생성 o 객체의 생성 과정에 관여 · 구조 o 클래스나 객체의 합성 · 행동 o 클래스나 객체들이 상호작용 하는 방법 o 클래스나 객체들이 책임을 분산하는 방법 패턴의 적용 범위 · 클래스 패턴 o 클래스와 서브클래스 간의 관련성을 다루는 패턴 o 관련성은 주로 상속 o 컴파일 타임에 정적으로 결정되는 패턴 · 객체 패턴 o 객체간의 관련성을 다룸 o 런타에 변경할 수 있고, 동적인 패턴 대부분은 객체 패턴이다.
-
1. 서론
1.2 스몰토크 MVC를 사용한 디자인 패턴
MVC의 구성요소 모델 : 응용프로그램 객체 뷰 : 스크린에 모델을 디스플레이하는 방법 컨트롤러 : 사용자 인터페이스가 사용자 입력에 반응하는 방법 원래는 하나의 객체인 것을 3가지로 분리 -> 유연성 + 재사용성 증대가 목적 뷰 모델 간의 등록(subscribe)/통지(notify) 프로토콜 각 구성 요소가 독립성을 갖도록 변경(종속성을 없앰) 뷰는 반드시 모델의 state(상태)를 반영하여 모델을 디스플레이한다는 보장(guarantee) 모델의 데이터가 변경 -> 모델이 뷰에게 nofity 각 뷰는 스스로 자신 외형을 변경 이런 디자인을 통해 한 모델을 여러가지 뷰로 표현 가능 뷰/모델이 하나의 객체였다면, 한 모델에 여러가지 뷰를 제공하기 위해 데이터는 같고 인스턴스는 다른 3가지의 모델이 필요했다..
-
카테고리 없음
항목 45: "호환되는 모든 타입"을 받아들이는 데는 멤버 함수 템플릿이 직방!
스마트 포인터(smart pointer)는 일반적인 포인터처럼 동작하면서, 포인터가 주지못하는 다양한 기능을 제공하는 객체이다. 말만 들어서는 스마트 포인터가 완벽한 일반 포인터의 대체제처럼 들리지만, 스마트 포인터가 절대 대신할 수 없는 일반 포인터만의 특징이 있다. 바로 암시적 변환(implicit conversion)을 지원한다는 점이다. 이런 식의 타입 변환을 사용자 정의 스마트 포인터를 써서 흉내내기란 상당히 어렵다. 위 코드를 보면, 전부 같은 템플릿(SmartPtr)으로 만들어진 인스턴스들인데, 이들 사이에는 어떤 관계도 없기 때문에 컴파일러 입장에서 보면 SmartPtr과 SmartPtr은 완벽히 별개의 클래스이다. 이 변환을 가능하게 할려면 SmartPtr 클래스에서 변환을 지원할 타입에..