1. 요약

빌더 패턴은 생성 패턴의 한 종류로 복잡한 단계로 생성되는 생성자를 더 쉽고 가독성이 높게 생성할 수 있도록 고안된 패턴입니다. 대부분의 디자인 패턴이 그러하듯 기본적인 개념을 갖고 더 좋고 편리하게 확장할 수 있습니다. 빌더 패턴의 경우 기존 생성자를 통해서 객체를 생성하는 방식이 아닌, 객체를 생성하는 클래스를 만들어 해당 클래스에서 인스턴스를 생성하므로 가독성과 유지보수가 쉽도록 고안된 패턴입니다.

2. 빌더 패턴

빌더 패턴에서는 빌더라는 클래스가 필요합니다. 빌더 클래스는 해당 객체의 값을 설정하고 다시 반환하는 역할을 합니다. 예를 들어 학생의 점수를 기록하는 객체가 있다고 할때, 과목이 10개가 있다고 하면 각 과목마다 점수를 저장하는 변수가 있을 것이고 이 변수에 값을 하나하나 입력을 해야합니다. 이런 경우 각 과목의 점수를 모두 생성자를 이용해서 입력을 한다거나, 직접 접근해서 점수를 입력할 수 있지만 이런 경우 새로운 과목이 추가될 경우 변경사항을 적용하는데 귀찮음이 생기게 됩니다. 따라서 이런 경우 각 과목의 점수를 입력하는 Builder를 만들어 해당 Builder에서 점수를 기록하는 방식으로 변경하게 된다면 기존의 방식보다 훨씬 더 가독성이 좋고 유지보수하기 쉽게 변경할 수 있습니다. 빌드 패턴을 이용하는 목적은 편리함과 가독성에 중점을 두고 있기 때문에 성능상에 큰 차이는 없지만 작업능률에 큰 차이가 있을 수 있습니다. 그렇다면 이제 학생들의 점수를 기록하는 빌더 패턴을 코드를 보면서 예제를 만들어보도록 하겠습니다. 

3. 예제

해당 예제는 개념적인 설명을 위해 아주 간단하게 작성하였고, 추가적으로 다양한 개념을 추가하여 자신만의 빌더 패턴을 완성할 수 있습니다...

우선 학생들의 점수를 저장하는 클래스가 필요합니다. 해당 클래스의 이름은 StudentScore라고 하고 해당 클래스에는 수학(Mat), 영어(Eng), 국어(Kor), 사회(Soc), 과학(Sci), 기술(Ski), 체육(Ath), 미술(Art), 음악(Mus) 이렇게 과목이 있다고 가정하겠습니다.

생성자는 다음과 같이 만들 수 있습니다. 생성자 내부는 귀찮아서 패스하겠습니다. 이렇게 많은 값들을 입력을 해야지 객체를 생성할 수 있습니다. 따라서 입력을 할때 자신도 모르게 실수를 하거나 중간에 입력을 추가하게 되는 경우, 혹은 입력값이 바뀌는 경우 이를 변경하기 쉽지 않습니다. 따라서 이런 경우 빌더 패턴을 이용하여 쉽게 객체를 생성할 수 있습니다. 

해당 빌더에서는 StudentScore 라는 객체를 들고 있고 하나의 빌더가 생성될때 StudentScore가 같이 생성이 됩니다. 그리고 각 과목의 점수를 설정할때마다 값이 설정되고 설정이 된 빌더 객체를 반환하도록 설계되어 있습니다. 이런 경우 각 과목마다 값을 설정하는 함수를 만들어 값을 설정하기 때문에 생성자를 사용해서 값을 설정하는 것보다 더 직관적으로 값을 설정할 수 있기 때문에 문제를 덜 만들게 됩니다. 그렇다면 실제 값을 설정하여 인스턴스를 생성하는 과정을 보도록 하겠습니다.

이런식으로 객체를 생성할 수 있고 여기에 Builder 객체에서 ToBuild() 라는 함수를 추가해서 설정한 StudentScore 객체를 반환 받으면 Builder를 이용하여 복잡한 객체를 생성할 수 있게 되는 것입니다. 

지금까지 설명한 빌더 패턴의 기본 구조를 유지한 상태로 더 다양한 기능을 추가하여 자신만의 빌더 패턴을 만들 수 있습니다.

+ Recent posts