* Builder Pattern - 빌더 패턴
- 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서
서로 다른 표현 결과를 만들수 있게 하는 패턴
- 복잡한 객체 생성을 표현으로부터 분리
- 이렇게 함으로써 같은 생성 과정에서 다른 표현을 만들어냄
- 쉽게 말해서 하나의 객체를 생성할 때 객체를 이루는 구성요소들을
분리하여 객체의 세부 구성 요소 클래스들을 별도로 만들고
그 구성 요소 클래스들을 조합하여 하나의 객체를 만듦
- 자동차를 만든다고 하면 자동차의 부품들을 모아서 하나의 자동차를 만듦
- Builder : 제품(객체)를 생성하는 추상 인터페이스
- Concrete Builder : Builder의 구현 클래스
다른 객체를 생성할 수 있도록 하는 구체적인 클래스
객체를 만들기 위해 부품을 생성하고 조립
- Director : 객체 생성의 정확한 순서를 다루는 부분에 책임
ConcreteBuilder를 인자로 받아서 필요한 동작을 수행
- Product : Builder를 이용해서 Director가 만들어낸 최종 객체
- 빌더는 복잡한 객체를 한 단계 한 단계씨기 생성하는데에 초점을 맞춘다
- 추상 팩토리는 제품 객체들의 집단을 강조
- 생성되는 객체가 단일 객체이던지, 복잡한 객체던지 상관 없다
- 빌더는 마지막 단계에 반환하지만, 추상 팩토리가 하는 것처럼
제품을 바로 얻어냄
- 빌더는 주로 복잡한 객체를 생성(Composite)
- 설계는 팩토리 메서드를 사용해서 시작하지만 설계자가 어느 부분에서
유연성에 따라 추상 팩토리, 프로토타입 또는 빌더 등으로 발전
- 빌더는 어떤 컴포넌트를 만드는지 정하기 위해 다른 패턴 중 하나 사용
추상 팩토리, 빌더, 프로토타입은 싱글톤을 구현에 사용
- 빌더는 Fluent Interface의 좋은 지원자
- 스마트 포인터의 아이디어는 레퍼런스 카운팅과 더 자동적인 메모리 관리
- 만약 객체가 영역 밖으로 벗어나고 그 밖의 다른 곳에서 사용하지 않는다면 자동적으로 삭제됨
- 이것은 예외 안전 코드 작성의 중요한 부분
- 스마트 포인터를 적절히 사용하면 너의 코드에서 명시적인 삭제 부분은 볼 수 없다
- 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());
- OpenGL 명령들을 하드웨어 렌더러에 보다 빨리 전달하는 OpenGL 기능
- 많은 시간과 자원을 필요로 하는 드로잉 명령을 보다 빠르게 처리
* 뉴럴 네트워크 (Neural Network)
- 인공 지능 분야에 속하는 기술
- 인간의 뇌 속에 있는 신경 네트워크를 모델링하여 문제를 해결
- 복잡하거나 해가 알려지지 않은 문제에 대해서 만족할만한 해를 구함
- 이 만족할 만한 해를 뉴럴 네트워크를 통해 스스로 학습을 해서 구함
* 뉴런 (Neuron)
- 신경망을 구성하는 신경 세포 한 개
- 핵을 중심으로 여러 개의 작은 수상돌기와 한 개의 커다란 축색돌기
- 수상돌기 : 다른 뉴런이 보내주는 신호를 받는 곳, Input
한 개의 뉴런은 수상돌기를 통해서 만개 정도의 다른 뉴런과 연결
- 축색돌기 : 다른 뉴런에게 신호를 전달하는 역할, Output
뉴런은 축색돌기를 하나씩만 가지고 있음
- 뉴런은 받은 신호를 무조건 전달하는 게 아니라 연산이 가능해 변환 가능
- 시냅스 : 연결부, 전기신호를 화학신호로 바꾸어서 전달.
각 시냅스마다 연결 강도가 달라서 이 화학 신호의 강도가 제각각
다른 뉴런에게서 받은 이 화학신호 강도의 합이 일정한 값(역치) 이상이 되면 비로소 축색돌기로 전기신호를 전달
* 뉴런의 특징 및 동작 정리
1. 수상 돌기는 다른 여러 개의 뉴런에게 화학신호를 받아들인다
2. 각 연결부의 화학신호의 강도가 다르다
3. 받은 화학신호 강도의 합이 일정값 이상되면 축색돌기로 전기신호를 전달
4. 축색돌기의 전기신호가 다른 뉴런들에게 전달
* 스마트 포인터
- C++ 언어에서 사용되는 보통의 포인터처럼 기능을 제공하도록 설계된 C++ 객체
* 스마트 포인터 사용 이유
1. 생성과 소멸 작업을 조절할 수 있음
- 스마트 포인터가 생성되고 소멸되는 시기를 프로그래머가 결정
- 스마트 파인터는 생성될 때 기본 값을 널(nullptr) 포인터를 가지기 때문에, 값을 주지 않으면 초기화되지 않는 멍텅구리 포인터가 일으키는 골치 아픔을 원천적으로 봉쇄
- 객체를 가리키고 있던 최후의 포인터가 소멸될 때, 자동으로 그 객체를 삭제하는 기능도 가지고 있음
2. 복사와 대입 동작을 조절할 수 있음
- 스마트 포인터가 복사되거나 대입될 때 일어나는 일을 프로그래머가 결정
- 어떤 경우에는 포인터가 가리키고 있는 객체를 자동으로 복사(깊은 복사)
- 어떤 경우에는 포인터 자체만 복사 (얕은 복사)
- 이외의 경우에는 어떤 동작도 전혀 하지 않음
- 바라는 바를 그대로 이행하는 포인터가 스마트 포인터
3. 역참조 동작을 조절(dereferencing)
- 사용자가 스마터 포인터가 가리키는 객체를 가져오려고 할 때 결정
- 지연 방식의 데이터/명령어 가져오기를 구현 (fetching)