Factory(class)

빌더처럼 Point를 생성하는 함수들을 별도의 클래스에 넣어서 이를 Factory라고 부른다.
Builder: 정보가 합쳐진 최종 객체를 반환
Factory: 전체를 위한 하위 객체를 바로 리턴

빌더는 최종 결과물을 바로 리턴해 주며, 팩토리는 최종 결과물에 필요한 객체를 리턴한다.
struct Point{
float x, y;
friend class PointFactory;
private:
Point(float x, float y): x(x), y(y) {}
};
struct PointFactory{
static Point NewCartesian(float x, float y){
return Point{x, y};
}
static Point NewPolar(float r, float theta){
return Point{r*cos(theta), r*sin(theta)};
}
};
//
auto my_point=PointFactory::NewCartesian(3, 4);
생성자를 private에 선언해 사용자가 직접 생성자를 호출하지 못하도록 한다.(필수는 아님)
Point에서 PointFactory 클래스를 friend로 선언해서 생성자에 접근 가능하도록 한다.