본문 바로가기

Android/현업에 투입되기위한 STUDY

0714 3일차 AlramStudy project 컨설팅

* 결정사항 *

  1. [D-14] 7/28 (7회차 스터디) App Components 정리해서 발표하기
  2. TimeItemManager의 구조와 역할을 재정의해볼 것
> 누구한테 뭘 받고, 그걸 어떻게 처리해서, 누구한테 줄 것인지!


  • 특별한 이유가 없으면 실제 구현체를 사용하지말고, 그 구현체가 정의한 인터페이스를 사용하자.
방법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라면, 최대한 역할을 나누자!
자신이 직접 일을 하기보다는 다른 이에게 일을 최대한 시켜라.
> 안드로이드 디바이스의 시간을 다루는것이 핵심이다.