* 결정사항 *
> 누구한테 뭘 받고, 그걸 어떻게 처리해서, 누구한테 줄 것인지! |
- 특별한 이유가 없으면 실제 구현체를 사용하지말고, 그 구현체가 정의한 인터페이스를 사용하자.
방법1) ArrayList(실제 구현체)를 사용하면 확장성이 없다.
1 | public ArrayList<TimeItem> mArrayData = new ArrayList<>(); | cs |
방법2) ArrayList가 정의한 인터페이스를 사용하면 확장성이 좋다.
1 | List<TimeItem> mArrayData = new ArrayList<TimeItem>(); | cs |
자바 컬렉션의 List는 세 종류가 있다. → ArrayList, LinkedList, Vector
> 위의 방법1처럼 구현하면 오로지 ArrayList만 사용할 수 있고,
> 방법2처럼 구현하면 아래의 세 종류를 상황에 맞게 사용할 수 있다.
API에서 ArrayList를 보니 "AbstracList<E>"를 확장하고 있다.
AbstractList<E>에 가보니 "List<E>" 인터페이스를 구현중이다.
즉, List<E> 인터페이스를 통해 ArrayList, LinkedList, Vector를 이용하는 것이다.
data의 접근 제어 지시자를 public으로 하지말 것
왜 public인지, 왜 싱글톤인지 설명할 수 있어야함
data를 주고 받지 않는 구조가 가장 이상적임
Thread는 반드시 종료되도록 만들자!
> 좀비 쓰레드가 되면 프로세스가 죽지 않는다.
[무한루프 Thread] 1. Boolean 변수 생성 2. Boolean 변수로 Thread의 시작과 정지를 컨트롤 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @Override protected void onStart() { Thread.start(); } @Override protected void onStop() { IsRunning = false; } private Boolean IsRunning = true; @Override public void run() { while(IsRunning){ //any work } } | cs |
* [volatile] thread-safe한 data로 만들고 싶다면 사용하자! |
1 | private volatile Boolean IsRunning = true; | cs |
[내가 만든 무한루프 Thread] 이건 평생루프... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | @Override protected void onStart() { Thread.start(); } @Override protected void onStop() { //empty } @Override public void run() { while(true){ //any work } } | cs |
MainActivity는 깔끔하게 유지해야함
> Runnable 구현하지 말기
프로그램은 곧 컨트롤러다.
> 뷰와 모델은 단지 거들을뿐
- 앱의 작업흐름도를 총괄하는 Manager라면, 최대한 역할을 나누자!
> 자신이 직접 일을 하기보다는 다른 이에게 일을 최대한 시켜라.
> 안드로이드 디바이스의 시간을 다루는것이 핵심이다.
'Android > 현업에 투입되기위한 STUDY' 카테고리의 다른 글
나인패치 적용하기 (0) | 2017.03.03 |
---|---|
0724 4차 App Componenets 발표 (0) | 2015.07.24 |
App Components > Activities Intro (0) | 2015.07.10 |
0710 2일차 AlramStudy project 컨설팅 (0) | 2015.07.10 |
App Components > Intents and Intent Filters (0) | 2015.07.07 |