본문 바로가기
프로그래밍/ITK

Pluggable Factories

by 이재만박사 2016. 7. 2.
- ITK 에서 사용된 입력/출력 메커니즘 뒤의 원리는 장착형 팩토리라고 알려져 있다
- 사용자 시점으로부터 파일을 읽고 쓰는 것에 대한 책임이 있는 객체는 itk::ImageFileReader와 itk::ImageFileWriter 클래스 이다
- 그러나 이 두 개의 클래스는 PNG 또는 DICOM과 같은 특별한 파일 포맷을 읽거나 또는 쓰면서 포함된 세부 사항을 알지 못한다
- 그것들이 하는 것은 이미지 파일 포맷의 세부 사항을 알고 있는 특별한 클래스의 집합에 사용자의 요청을 보내는 것이다
- ITK 위임 메커니즘은 사용자가 새로운 클래스를 ImageIO 계층에 단지 추가함으로써 지원되는 파일 포멧의 수를 확장 가능하게 하는 것이다
- ImageFileReader와 ImageFileWriter의 각 인스턴스는 ImageIO 객체에 대한 포인터를 가진다
- 만약 이 포인터가 비어 있으면, 이미지를 읽거나 또는 쓰는 것이 불가능할 것이고 이미지 파일 reader/writer는 IO 연산을 수행하기 위해 어떤 ImageIO 클래스를 사용해야 하는지 결정해야 한다

- 이것은 기본적으로 중앙 클래스 itk::ImageIOFactory에 파일 이름을 전달함으로써 행해지고 사용자 지정 파일을 읽거나 또는 쓰기 가능한 ImageIO의 어떤 하위 클래스를 정하는 것을 요구함으로써 행해진다

 

- ImageIO를 상속 받은 각 클래스들은 ImageIO 클래스의 인스턴스를 생성할 수 있는 연관된 팩토리 클래스를 제공해야 한다

- 예를 들면, PNG 파일에 대해, 이 이미지 파일을 읽는 방법을 아는 itk::PNGImageIO 객체가 있고 PNGImageIO 객체를 생성하고 그것의 포인터를 리턴하는 itk::PNGImageIOFactory 클래스가 있다

- 매번, 새로운 파일 포맷은 추가되고(즉, 새로운 ImageIO 클래스가 생성된다), 팩토리는 ImageIOFactory 클래스의 자식 클래스로 구현된다

 

- 예를 들면, PNG 파일을 읽기 위해, PNGImageIOFactory 가 생성되고 중앙의 ImageIOFactory 싱글톤 클래스에 등록된다

- ImageFileReader가 filename을 가지고 확인할 수 있는 파일을 읽을 수 있는 ImageIO에 대한 ImageIOFactory를 요청할 때 ImageIOFactory는 등록된 팩토리의 리스트를 순환할 것이고 그 파일을 읽는 방법을 알고 있는 것들 중에서 요청할 것이다

- 확실하게 반응하는 팩토리는 ImageFileReader에 리턴할 구체적인 ImageIO 인스턴스를 생성하는데 사용될 것이고 읽기 연산을 수행하기 위해 사용된다

 

- 대부분의 경우에 메커니즘은 ImageFileReader와 ImageFileWriter에 오직 반응하는 사용자에 투명하다

-  그러나 사용하는 ImageIO 객체의 타입을 명시적으로 선택하는 것도 가능하다

-  이것은 다음의 예제에 의해 설명된다


댓글