[Android] 빌더 패턴 (Builder Pattern)

민채·2024년 2월 26일
0

Android

목록 보기
10/16

빌더 패턴 (Builder Pattern)

  • 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴
  • 생성(Creational) 패턴 중 하나로써 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴

장점

  • 별도의 Builder 객체에서 복잡한 객체의 일부를 만들고 조합하는 걸 캡슐화 함
  • 클래스는 객체를 직접 생성하는 대신 Builder 객체에 객체 생성을 위임함
  • 가독성 : 각 인자의 의미를 파악하기 쉬움
  • 유연성 : 필수 매개변수, 선택적 매개변수를 통해 객체를 생성할 때 보다 유연하게 활용 할 수 있음

사용 이유

  • 인자가 많다면 각각 인자의 의미를 알 수 없게 됨
  • 생성자를 여러 개 만들어야 하는 경우가 있음
  • 아래와 같은 예시에서 객체를 생성할 때 데이터를 몇 번째 파라미터에 넣어야 할지 헷갈리는 경우가 있기 때문에 사용하는 것
class Member {
	constructor(name: String, sex: String) {
    	this.name = name
        this.sex = sex
        this.age = 0
        this.job = ""
        this.address = ""
        this.weight = 0
        this.height = 0
  	}
  
    constructor(name: String, sex: String, age: Int, job: String, address: String, weight: Int, height: Int) {
        this.name = name
        this.sex = sex
        this.age = age
        this.job = job
        this.address = address
        this.weight = weight
        this.height = height
    }
}
// 객체 생성
val member = Member("Lion", "남", 20, "학생", "서울", 60, 160)

사용법

작성할 클래스 내부에 Builder 클래스를 따로 만듦

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

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

        // 선택적 매개변수 -> 초기화를 해줘야함
        var sex = "여"
        var age = 26
        var job = ""
        
        fun sex(sex: String): Builder {
        	return this.sex = sex
            return this
        }

        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
        sex = builder.sex
        age = builder.age
        job = builder.job
    }
}

객체 생성 방법

// 첫 번째 방법
val member = Member.Builder("권민채")
member.sex("여")
member.age(26)
member.job("취준생)

val minchae = member.build()

// 두 번째 방법 - 체이닝을 통해 한 번에 객체 생성
val member = Member.Builder("권민채") // 필수 매개변수
	.sex("여") // 선택적 매개변수
    .age(26)
    .job("취준생")
    .build()
profile
코딩계의 떠오르는 태양☀️

0개의 댓글