관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[디자인패턴] 스타터 패턴 ( Android Starter Pattern ) 본문

디자인패턴

[디자인패턴] 스타터 패턴 ( Android Starter Pattern )

막무가내막내 2019. 8. 3. 17:28
728x90

 

 

 

 

부스트코스 에이스를 진행하면서 Intent로 값을 전달해주고 화면전환을 하는 코드에서 위와 같이 코드리뷰를 받았다.

 

 

 

 

그래서 스타터 패턴에 대해서 찾아봤다.

https://riptutorial.com/android/example/5357/starter-pattern

 

Android - Starter Pattern | android Tutorial

android documentation: Starter Pattern

riptutorial.com

https://hackernoon.com/object-oriented-tricks-4-starter-pattern-android-edition-1844e1a8522d

 

Object Oriented Tricks: #4 Starter Pattern -Android Edition

OOT is a mini series on writing maintainable Object Oriented code without pulling your hair out. Click here for trick #1, trick #2, trick #3. Construction We usually construct our objects in one place. It could be a constructor, builder, static factory met

hackernoon.com

간단히 설명하자면 이 패턴의 장점은 코드의 가독성을 높이는 동시에 코드 복잡성, 유지 관리 비용 및 구성 요소 연결을 줄이는 것이다. 즉 가독성과 실수 유지비용 측면에서 좋다고 볼 수 있다.

(위 두 사이트를 보면 하는방법에 대해 조금이나마 익힐 수 있다...)

 

 

 

 

   //스타터패턴
    public static void start(Context context) {
        Intent starter = new Intent(context, MovieInfoActivity.class);
        starter.putExtra();
        context.startActivity(starter);
    }

먼저 자바에서 라이브템플릿을 제공하는데 starter이라고 치면 위와 같이 자동완성 된다.

 

 

안드로이드 스타터패턴에 대해 구글링을 해봤는데 위 두개 사이트와 몇개의 글밖에 보이지 않았고 어떻게 사용하는지 넓게 설명하거나 예제가 있는글을 찾지 못했다. 그냥 단순하게 putExtra하고 startActivity하는거 밖에 없었다... startActivirtForResult나 화면전환하는 인텐트가 여러개인 경우 어떻게 분기문으로 처리할것인지 등 기타사항들은 못찾았다. (찾으시면 댓글로 사이트링크좀 부탁드립니다.)

 


그래서 이게 맞게하는건지는 아직 확실하진 않지만

위에 올려진 두 사이트에서 예제를 참고로 내 프로젝트에도 적용해보았다. 

 

1. 먼저 startActivity일 때이다. 난 List를 전달할꺼니깐 보통 예제와 다르게 String이 아니라 List를 매개변수로 선언했다.

   final static String COMMENT_LIST_EXTRA = "COMMENT_LIST_EXTRA";
 //스타터패턴
    public static void start(Context context, ArrayList<Comment> commentList ) {
        Intent starter = new Intent(context, CommentTotalActivity.class);
        starter.putExtra(COMMENT_LIST_EXTRA, commentList);
        context.startActivity(starter);
    }

starter를 호출할 때

    start(this, mCommentList);

 

2. startActivityForResult일 때이다. 

    final static int TOTAL_REQUEST = 12;
//스타터패턴
    public static void start(Activity context, ArrayList<Comment> commentList ) {
        Intent starter = new Intent(context, CommentTotalActivity.class);
        starter.putExtra(COMMENT_LIST_EXTRA, commentList);
        context.startActivityForResult(starter, TOTAL_REQUEST);
    }
   start(this, mCommentList);

 

 


받는건 다음과 같이 일반적인 인텐트 받듯이 받는 것 같다.

Intent intent = getIntent();
        if(!intent.getExtras().containsKey(COMMENT_LIST_EXTRA)){
            throw new UnsupportedOperationException("Activity should be started using the static start method");
        }
        String data = intent.getStringExtra(COMMENT_LIST_EXTRA);

 

 

써보긴 했는데 아직 손에 익지는 않고 확실한 예제가 없어서 기본적인 한개의 인텐트를 실행하는게 아니면 써도 되는건진 잘 모르겠다. (패턴인데 내 멋대로쓰면 안쓰는것보다 못해서..)

 

 

 

댓글과 공감은 큰 힘이됩니다. ! 감사합니다.

728x90

'디자인패턴' 카테고리의 다른 글

[디자인패턴] Design Pattern 요약 및 참고 모음  (0) 2020.05.26
Comments