2. 빌더 패턴(Builder Pattern)

2.1 개요

프로그래밍하다 보면 여러 요소로 구성되는 개체가 있습니다. 그리고 이와 같은 개체를 생성하는 방법이 목적에 따라 다양한 경우가 생깁니다. 이 경우에 빌더 패턴은 목적에 따라 개체를 생성하는 과정의 약속과 구체적인 알고리즘 구현을 분리하여 개체를 생성하는 패턴입니다.

빌더 패턴에서 빌더는 추상 클래스로 개체를 생성하는 과정들을 약속합니다. 빌더를 기반으로 파생한 클래스에서는 생성 과정들에 대해 구체적으로 구현합니다. 이처럼 정의하면 빌더를 사용하는 곳에서는 서로 다른 구조를 갖는 개체를 같은 방법으로 생성할 수 있습니다.

“개체를 생성하는 과정의 약속과 구체적인 알고리즘 구현을 분리”

2. 2 시나리오

우리 가족은 매주 토요일에는 여행을 갑니다. 여러분도 아시다시피 우리 가족은 사진을 찍는 것을 좋아합니다. 자연스럽게 사랑하는 아들 혁재는 카메라와 사진에 호기심이 많아졌어요.

“아빠, 아빠 카메라를 보면 조금씩 모양이 다른 것 같은데 왜 그런거야?”

“카메라 제조사에 만드는 공정이 조금씩 달라서 그런게 아닐까?”

“그럼, 같은 회사에서 만든 렌즈들은 왜 달라?”

계속되는 아들의 질문에 답변하는데 한계에 부딪칠 때쯤 두서없는 나의 얘기가 지겨운지 자기 방으로 들어가더군요. 이제껏 대부분 아들의 호기심을 해결했다고 자부했었는데 내가 좋아하는 카메라에 대해 설명을 못 해 안타까웠어요. 밤새 고민을 하다가 근처에 있는 EHCamera  회사를 견학하는 것이 좋겠다는 생각을 하게 되었죠. 바로 견학에 필요한 것이 무엇인지 확인하고 견학 신청을 하였습니다.

며칠 뒤에 우리 가족은 EHCamera 회사를 방문했어요. 회사 입구에서부터 안내원이 반갑게 맞아주었고 회사에 대한 간단한 소개와 생산 설비를 견학할 수 있었어요. 그리고 엔지니어와 만남의 시간을 가졌는데 그가 건네준 명함에는 ‘이 매핑’이라는 이름이 적혀있더군요.

“매핑님, 카메라에 상이 맺혀 사진이 되는 과정이 어떻게 되나요?”

“음, 카메라로 사진을 찍을 수 있는 원리는 사람의 눈으로 사물들을 보는 원리와 흡사합니다. 우리가 사물을 볼 수 있는 것은 빛이 사물에 부딪혀 반사되는 것이 눈에 그려지는 것입니다. 쉽게 얘기하면 빛이 그림을 그리는 것이지요.”

“아빠, 학교에서 배웠어. 빛은 여러 가지 색을 지니고 있다고 배웠어. 그리고 실험 시간에 스펙트럼을 통해 빛의 반사에 대해 알게 되었어. 카메라도 사람의 눈과 마찬가지구나.”

매핑씨는 혁재가 하는 말을 듣고 좀 더 자세한 얘기를 해주었어요. 조리개를 열어 빛을 얻어오는 것과 반사경을 통해 상이 맺히는 것에 대하여 알게 되었습니다. 그리고 카메라에 따라 얻어온 상을 이미지로 변환하는 알고리즘이 다르다는 얘기도 해줬어요. 그리고 이 부분은 소프트웨어적으로 처리한다고 하더군요.

“아빠, 그럼 아빠도 저런 거 만드는 거야?”

“음. 비슷해.”

그리고 집에 돌아와서 카메라 효과에 관련된 자료를 조사했어요. 빛이 모여서 적절한 양이 되면 상을 맺히고 내부 센서에 의해 보정 작업을 하여 사진 파일이 되더군요. 렌즈에 따라서 상을 맺히기 위해 필요한 빛의 양을 결정하는 것이 다르고 지원되는 보정 작업도 다르더군요.