[안드로이드] 디자인 패턴(Design Pattern) 이란? 이전 Design Pattern 개념 정리에 이어서  생성(Creational) 에 해당하는 빌더 패턴(Builder Pattern) 에 대해 정리하려고 합니다. 1. 빌더 패턴 (Bu...

[안드로이드] 빌더 패턴 (Builder pattern) 예제포함



[안드로이드] 디자인 패턴(Design Pattern) 이란?

이전 Design Pattern 개념 정리에 이어서 

생성(Creational) 에 해당하는 빌더 패턴(Builder Pattern) 에 대해 정리하려고 합니다.





1. 빌더 패턴 (Builder Pattern)

"빌더 패턴(Builder pattern)이란 복합 객체의 생성 과정과 표현 방법을 분리하여 

동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다." (위키 피디아)


(저 같은 경우 위키 피디아에 정의된 내용을 봤을 때 바로 와닿지 않더라구요..)

좀 더 쉽게 아래와 같이 생각해도 좋을 것 같습니다.

"복합객체의 구성요소를 포함한 별도의 (Builder)클래스 만든다.

이 (Builder)클래스는 구성요소를 조합하여 객체를 생성하는 역할을 한다."




2. 빌더 패턴 (Builder Pattern) 예시

회원(Member) 객체에 Builder Pattern 을 적용한 예시 입니다.

class Member {
private var name: String = ""
private var gender: String = ""
private var age: Int = 0
private var job: String = ""

class Builder(
// 필수 매개변수
val name: String,
val gender: String) {

// 선택적 매개변수
var age = 25
var job = ""

fun age(age: Int): Builder {
this.age = age
return this
}

fun job(job: String): Builder {
this.job = job
return this
}

fun build(): Member {
return Member(this)
}
}

// Builder 패턴 생성자
constructor(builder: Builder) {
name = builder.name
gender = builder.gender
age = builder.age
job = builder.job
}
}
 
val member = Member.Builder("Nasa", "") // 필수 인자
.age(25) // 선택적 인자
.job("의사") // 선택적 인자
.build()
 
 
 

3. 빌더 패턴(Builder Pattern) 왜 사용해야 할까?

  • 각 인자의 의미를 파악하기 쉽다. (가독성)

  • 필수 매개변수, 선택적 매개변수를 통해 객체를 생성할 때 보다 유연하게 활용 할 수 있다. (유연성)

 

필수 인자로만 Member 객체 생성

val member = Member.Builder("Kain", "") // 필수 인자
.build()

선택적 인자도 포함하여 Member 객체 생성

val member = Member.Builder("Nasa", "") // 필수 인자
.age(25) // 선택적 인자
.build()

 

 

 

4. 빌더 패턴(Builder Pattern) 언제 사용해야 할까?

  • 생성자 인자가 많을 경우 Builder 패턴을 고려한다.


아래 생성자 인자가 많아졌을 때 예시입니다.

각각의 인자의 의미를 알기 어려워 가독성이 떨어진다.

val member = Member("Mia", "", 25, "교사", "서울", 60, 160)


(필요에 따라) 여러 생성자를 정의해줘야 되는 경우가 있을 수 있다.

constructor(name: String, gender: String) {
this.name = name
this.gender = gender
this.age = 0
this.job = ""
this.location = ""
this.weight = 0
this.height = 0
}

constructor(name: String, gender: String, job: String) {
this.name = name
this.gender = gender
this.age = 0
this.job = ""
this.location = ""
this.weight = 0
this.height = 0
}

constructor(name: String, gender: String, age: Int, job: String, location: String, weight: Int, height: Int) {
this.name = name
this.gender = gender
this.age = age
this.job = job
this.location = location
this.weight = weight
this.height = height
}


정리하자면 생성자 인자가 많아지면 가독성도 떨어지고 필요에 따라 여러 생성자를 정의해줘야되는 

번거로움이 생길 수 있습니다. 이때 빌드 패턴을 활용하면 이러한 문제들을 보완할 수 있습니다.

 

 

 

끝으로..

빌더 패턴 (Builder Pattern) 을 공부하면서 깊게 파고드는 느낌보다는

주요 내용을 정리한 느낌이라서..

좀 더 자세한 내용을 원하시면 아래 잘 정리된 블로그 링크 보셔도 좋을 것 같습니다.

좋은 하루 되세요:)

 

 

 

 

<참조자료>

위키피디아

기계인간 John Grib

 

 

 

0 comments: