Builder 패턴

구름코딩·2020년 10월 23일

Java 디자인 패턴

목록 보기
3/12

Main함수

public static void main(String[] args) {
    text();
}
private static void text()
{
    Text text = new Text.Builder()
            .setTitle("Hello")
            .setContent("Name")
            .setItems()
            .build();

    System.out.println(text);
}
위 코드의 출력값
타이틀 : Hello
내용 : Name
항목 : 
 - null

Text클래스의 인스턴스를 .을통해서 계속 값을 추가하고 설정하는 방법에 대해서 알아보자

Text클래스 및 변수 설정

먼저 Text클래스를 생성해주고 반환을 할 문자열과 이를 출력해줄 toString()을 생성해준다

public class Text {
    private String text;

    @Override
    public String toString() {
        return text;
    }
}
Builder 클래스를 Text의 정적 내부 클래스로 생성

단지 Text의 클래스 내부에 존재해서 접근시 Text.Builder로 접근할 뿐 하나의 클래스로 취급한다

public static class Builder {
    private String title;
    private String content;
    private Optional<String[]> items = Optional.empty();

    public Builder setTitle(String title){

    }
    public Builder setContent(String content) {

    }
    public Builder setItems (String ...  items) {

    }

    public Text build() {

    }
}
Builder (inner static class)의 메소드 구현

이제 처음 메인함수의 모습처럼 Text.Builder를 통해 메소드에 접근이 가능해졌고 .을 이어 붙임으로서 원하는 출력 및 값을 가지도록 구현

public static class Builder {
    private String title;
    private String content;
    private Optional<String[]> items = Optional.empty();

    public Builder setTitle(String title){
        this.title = title;
        return this;
    }
    public Builder setContent(String content) {
        this.content = content;
        return this;
    }
    public Builder setItems (String ...  items) {
        if (items.length > 0)
            this.items = Optional.of(items);
        else
            this.items = Optional.empty();
        return this;
    }

	//메소드를 모두 구현 후 구현된 메소드를 통해 얻은 값을 출력하는 최종메소드
    public Text build() {
        Text Text = new Text();

        String*Builder* <--- Builder형식이다.(.)을 통해 값을 append()하는 방식으로 구현되는 문자열 처리 클래스처럼
        현재 메소드 또한 이런 방식을 통해 만드는 것이다
        
        StringBuilder sb = new StringBuilder();
        sb.append("타이틀 : ").append(title).append("\n");
        sb.append("내용 : ").append(content).append("\n");
        sb.append("항목 : ").append("\n");
        if (items.isEmpty())
            sb.append(" - ").append("null").append("\n");
        else {
            for (String item : items.get())
                sb.append(" - ").append(item).append("\n");
        }
        Text.text = sb.toString();
        return Text;
    }
}

결론

Text클래스를 통해 원하는 출력 형식의 문자열을 생성할수 있게된다

profile
내꿈은 숲속의잠자는공주

0개의 댓글