2016. 4. 28. 15:19

Builder 패턴

프로그래밍/C++ 2016. 4. 28. 15:19

* Builder Pattern - 빌더 패턴


- 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 

   서로 다른 표현 결과를 만들수 있게 하는 패턴

- 복잡한 객체 생성을 표현으로부터 분리

- 이렇게 함으로써 같은 생성 과정에서 다른 표현을 만들어냄


- 쉽게 말해서 하나의 객체를 생성할 때 객체를 이루는 구성요소들을 

  분리하여 객체의 세부 구성 요소 클래스들을 별도로 만들고

  그 구성 요소 클래스들을 조합하여 하나의 객체를 만듦

- 자동차를 만든다고 하면 자동차의 부품들을 모아서 하나의 자동차를 만듦


- Builder : 제품(객체)를 생성하는 추상 인터페이스

- Concrete Builder : Builder의 구현 클래스

다른 객체를 생성할 수 있도록 하는 구체적인 클래스

객체를 만들기 위해 부품을 생성하고 조립

- Director : 객체 생성의 정확한 순서를 다루는 부분에 책임

              ConcreteBuilder를 인자로 받아서 필요한 동작을 수행

- Product : Builder를 이용해서 Director가 만들어낸 최종 객체


- 빌더는 복잡한 객체를 한 단계 한 단계씨기 생성하는데에 초점을 맞춘다

- 추상 팩토리는 제품 객체들의 집단을 강조

- 생성되는 객체가 단일 객체이던지, 복잡한 객체던지 상관 없다

- 빌더는 마지막 단계에 반환하지만, 추상 팩토리가 하는 것처럼 

   제품을 바로 얻어냄

- 빌더는 주로 복잡한 객체를 생성(Composite)

- 설계는 팩토리 메서드를 사용해서 시작하지만 설계자가 어느 부분에서

  유연성에 따라 추상 팩토리, 프로토타입 또는 빌더 등으로 발전

- 빌더는 어떤 컴포넌트를 만드는지 정하기 위해 다른 패턴 중 하나 사용 

  추상 팩토리, 빌더, 프로토타입은 싱글톤을 구현에 사용

- 빌더는 Fluent Interface의 좋은 지원자

2016. 4. 9. 19:07

- 스마트 포인터의 아이디어는 레퍼런스 카운팅과 더 자동적인 메모리 관리

- 만약 객체가 영역 밖으로 벗어나고 그 밖의 다른 곳에서 사용하지 않는다면 자동적으로 삭제됨

- 이것은 예외 안전 코드 작성의 중요한 부분

- 스마트 포인터를 적절히 사용하면 너의 코드에서 명시적인 삭제 부분은 볼 수 없다


- vtkSmartPointer


- vtk 객체 생성

- vtkObject * myObject = vtkObject::New();


* 수동 삭제

- myObject->Delete();


* 헤더 파일

- #include <vtkSmartPointer.h>


* vtk 스마트 포인터를 이용한 객체 생성

vtkSmartPointer<vtkObject> myObject =

                                          vtkSmartPointer<vtkObject>::New();



* 기존에 존재하는 객체를 스마트 포인터에 대입


vtkSmartPointer<vtkPolyData> myObject;

myObject.TakeReference(vtkPolyData::New());



2016. 3. 29. 21:18

- OpenGL 명령들을 하드웨어 렌더러에 보다 빨리 전달하는 OpenGL 기능

- 많은 시간과 자원을 필요로 하는 드로잉 명령을 보다 빠르게 처리




2016. 3. 24. 09:58

* 뉴럴 네트워크 (Neural Network)

- 인공 지능 분야에 속하는 기술

- 인간의 뇌 속에 있는 신경 네트워크를 모델링하여 문제를 해결


- 복잡하거나 해가 알려지지 않은 문제에 대해서 만족할만한 해를 구함

- 이 만족할 만한 해를 뉴럴 네트워크를 통해 스스로 학습을 해서 구함


* 뉴런 (Neuron)

- 신경망을 구성하는 신경 세포 한 개

- 핵을 중심으로 여러 개의 작은 수상돌기와 한 개의 커다란 축색돌기

- 수상돌기 : 다른 뉴런이 보내주는 신호를 받는 곳, Input

            한 개의 뉴런은 수상돌기를 통해서 만개 정도의 다른 뉴런과 연결

- 축색돌기 : 다른 뉴런에게 신호를 전달하는 역할, Output

              뉴런은 축색돌기를 하나씩만 가지고 있음

- 뉴런은 받은 신호를 무조건 전달하는 게 아니라 연산이 가능해 변환 가능

- 시냅스 : 연결부, 전기신호를 화학신호로 바꾸어서 전달.

            각 시냅스마다 연결 강도가 달라서 이 화학 신호의 강도가 제각각

            다른 뉴런에게서 받은 이 화학신호 강도의 합이 일정한 값(역치)               이상이 되면 비로소 축색돌기로 전기신호를 전달


* 뉴런의 특징 및 동작 정리

1. 수상 돌기는 다른 여러 개의 뉴런에게 화학신호를 받아들인다

2. 각 연결부의 화학신호의 강도가 다르다

3. 받은 화학신호 강도의 합이 일정값 이상되면 축색돌기로 전기신호를 전달

4. 축색돌기의 전기신호가 다른 뉴런들에게 전달

2016. 2. 26. 14:29

* 스마트 포인터

- C++ 언어에서 사용되는 보통의 포인터처럼 기능을 제공하도록 설계된 C++ 객체


* 스마트 포인터 사용 이유


1. 생성과 소멸 작업을 조절할 수 있음

- 스마트 포인터가 생성되고 소멸되는 시기를 프로그래머가 결정

- 스마트 파인터는 생성될 때 기본 값을 널(nullptr) 포인터를 가지기 때문에, 값을 주지 않으면 초기화되지 않는 멍텅구리 포인터가 일으키는 골치 아픔을 원천적으로 봉쇄

- 객체를 가리키고 있던 최후의 포인터가 소멸될 때, 자동으로 그 객체를 삭제하는 기능도 가지고 있음


2. 복사와 대입 동작을 조절할 수 있음

- 스마트 포인터가 복사되거나 대입될 때 일어나는 일을 프로그래머가 결정

- 어떤 경우에는 포인터가 가리키고 있는 객체를 자동으로 복사(깊은 복사)

- 어떤 경우에는 포인터 자체만 복사 (얕은 복사)

- 이외의 경우에는 어떤 동작도 전혀 하지 않음

- 바라는 바를 그대로 이행하는 포인터가 스마트 포인터


3. 역참조 동작을 조절(dereferencing)

- 사용자가 스마터 포인터가 가리키는 객체를 가져오려고 할 때 결정

- 지연 방식의 데이터/명령어 가져오기를 구현 (fetching)