• 로그인 함 해보끄나?

  • Sarangnamu.net June 17, 2003
    Home Login Profile Study Open Project Q&A Google Code
    builder (빌더) 패턴
    Last Modify : 04 July, 2018(10:59)
    남이 짠 코드를 유지 보수하다가는 보통 인자를 추가해야하는 경우들이 있는데 이 인자만 수정하고 끝나면 좋으련만 여기저기 자주사용한 코드라면 모두다 고쳐야되는 -_ - 노가다가 시작된다. 물론 오버로딩으로 처리하기도 하지만 이것도 마찬가지로 한둘씩 늘어나게 되면 -_ - 나중에 가선 동일한 메소드명에 인자만 조금씩 다른 녀석들이 말도 안되게 늘어나게 되는데 이러한 문제를 한방에 해결해주기 위한 방법이 바로 빌더 패턴 되시겠다. 처음에 빌더 패턴을 접한건 스퀘어사에서 만들어진 오픈소스들과 AlertDialog 이 였고 이 코드들에 빌더 패턴들을 유심히 살펴볼 필요성이 있다. :) 암튼 빌더 패턴을 이용하려면 먼저 인자에 필요한 클래스와 그 인자를 생성해주는 빌더를 생성해야 하는데 나는 보통 코드를 작성할때 기본틀을 라이브 템플릿에 넣어두고 손코딩을 주로 하는데 아래와 같이 추가해두고 사용하고 있다. public final class $classname$ { private static final Logger mLog = LoggerFactory.getLogger($classname$.class); // public final int no; private $classname$(final Builder builder) { } public static Builder builder() { return new Builder(); } public final static class Builder { //private int no; private Builder() { } public Builder () { return this; } public $classname$ build() { return new $classname$(this); } } } $classnames$ 는 파일명으로 전환되어 클래스 명이 기입되며, 빌더패턴을 이용하기 위한 기본틀을 생성하게 된다. 이후 그 안에 필요한 인자들을 추가하여 사용하면 되는데 개인적으로 인자쪽은 final 을 붙여서 public 으로 만들고 Builder 쪽에는 private 하게 만들되 setter 를 둔 뒤 사용하는데 대충 아래와 같은 코드 형태이다. public final class Foo { private static final Logger mLog = LoggerFactory.getLogger(Foo.class); public final int no; public final String text; private Foo(final Builder builder) { this.no = builder.no; this.text = builder.text; } public static Builder builder() { return new Builder(); } public final static class Builder { private int no; private String text = "HELLO WORLD"; private Builder() { } public Builder no(int no) { this.no = no; return this; } public Builder text(String text) { this.text = text; return this; } public Foo build() { return new Foo(this); } } } Foo foo = Foo.builder().no(1).build(); 빌더 패턴의 구조상 사용자가 설정하지 않는 값들은 기본값으로 지정할 수도 있고 인자를 추가해도 해당 클래스쪽과 코드를 사용하는 쪽만 수정하면 되기 때문에 유지보수에 매우 유리한 듯 싶다.

    Comment


    입력하3 1532187346



    Locations of visitors to this page