[안드로이드] 디자인 패턴(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) 을 공부하면서 깊게 파고드는 느낌보다는
주요 내용을 정리한 느낌이라서..
좀 더 자세한 내용을 원하시면 아래 잘 정리된 블로그 링크 보셔도 좋을 것 같습니다.
좋은 하루 되세요:)
<참조자료>
0 comments: