본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


디자인 패턴

디자인패턴 - 빌더 패턴

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 5. 2.

 

 

빌더패턴은 필요한 변수, 옵션적인 변수를 골라 받기위한 패턴이다.

즉, 어떠한 기능을 가진 클래스가 필수적으로 받아야할 변수와 옵션형태(있던지 없던지)로 존재하는 변수를 사용자가 쉽게 적용하기 위한 패턴이다.

특히 이러한 패턴은 안드로이드 개발을 하다보면 자주 볼 수 있다.

public class MyBuilder {
	private String must_important;  //반드시 존재해야 되는 변수
	private String text;  //옵션
	private String desc; //옵션
	private int number;  //옵션
	
	//private로 new 로 객체가 생성되는 것을 방지
	private MyBuilder(String must,String txt,String des, int num){
		this.must_important = must;
		this.text = txt;
		this.desc = des;
		this.number = num;
	}
	
	public static class Builder{  //빌더 클래스
		private String mustbe;
		private String text = "default_value";  //디폴트값
		private String desc = "default_value"; //디폴트값
		private int number = 0; //디폴트값
		
		public Builder(String arg){  //필수로 받는 변수
			this.mustbe = arg;
		}
		
		public Builder setTxt(String txt){
			this.text = txt;
			return this;
		}
		public Builder setDesc(String des){
			this.desc = des;
			return this;
		}
		public Builder setNumber(int num){
			this.number = num;
			return this;
		}				
		public MyBuilder build() {
			return new MyBuilder(mustbe, text, desc, number);
		}
	}

	@Override
	public String toString() {  //데이터 확인을 위해 toString 메소드를 오버라이드.
		return "MyBuilder [must_important=" + must_important + ", text=" + text + ", desc=" + desc + ", number="
				+ number + "]";
	}
}

해당 소스코드를 보면 Mybuilder라는 클래스가 내부클래스로 Builder라는 클래스를 지니고 있다.

MyBuilder 클래스는 생성자를 private로 하였으므로 new로 객체 생성을 할 수 없다.

Builder 클래스는 객체 생성시 mustbe라는 String 형태의 변수를 받게되는데 해당 변수를 받으면 build라는 메소드를 통해 MyBuilder라는 클래스를 생성하여준다.

즉, Builder라는 클래스를 초기에 생성할 때의 변수는 필수조건 파라미터이며 나머지 set으로 집어 넣는 데이터는 옵션적인 데이터임을 알 수 있다.

해당 클래스를 메인메소드로 실행하면 아래처럼 볼 수 있다.

	public static void main(String[] args) throws Exception {
		//처음 생성자에 default값을 준다. 해당 값은 필수 값
		MyBuilder build = new MyBuilder.Builder("default")
				.setTxt("other value!!")
				.setNumber(3).setDesc("other value!!").build();  //나머지 set 메소드에 있는 데이터 형태는 옵션형태
		System.out.println(build.toString());
		
		build = new MyBuilder.Builder("default").setNumber(11).build();
		System.out.println(build.toString());  //set number만 실행, 나머지 파라미터 2개는 디폴트 값 적용된 모습.
    }

약속된 데이터나 형태를 위와같이 필수 데이터, 옵션형태의 데이터로 나뉘는데 빌더패턴이 용이하다.

반응형

'디자인 패턴' 카테고리의 다른 글

디자인패턴 - 프로토타입 패턴  (0) 2019.05.02
디자인패턴 - 싱글톤 패턴  (0) 2019.05.02
디자인패턴 - 팩토리 패턴  (0) 2019.05.02
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글