posted by By훈트 2010.09.13 09:06

안드로이드 설계/코드 노하우

안드로이드사이드 운영자
한동호

안드로이드 개발 단계

아이디어 > 기획  개발 > 테스트 > 리리즈

설계 > 코드

좋은 설계에 집중하라.

설계

좋은 설계에 집중하라.
변경이 유연한 설계를 하라.
초반부터 성능을 고려하지 말라.
필요한 기능에 집중하라.

설계시 꼭 지켜야 할 5가지
 1. UI 스레드는 UI만 처리하게 하라.
 2. 사용자를 방해하지 말라.
 3. 다양한 화면 해상도를 지원하라.

 1) wrap_content, fill_parent와 DIP를 사용하라.

  layout_width="100dip"

  = 100 pixels on a HVGA@160 density
  = 150 pixels on a WVGA@240 density

 * 사용자가 보기에는 거의 동일한 크기로 보여짐.

 2) AbsoluteLayout을 사용하지 말아라.
  1.5에서 deprecated된 클래스
  *FrameLayout과 이 레이아웃의 layout_margn 속석으로 동일한 
  화면을 구성할 수 있음.

 3) 코드에서 픽셀로 크기를 지정하지 말아라.
   안드로이드는 내부적으로 픽셀을 기본 단위로 사용

  * 필요하다면 DIP를 PIXEL로 변경해야 함.

 4) 화면 해상도에 맞게 다양한 리소스를 제공하라.

  * 다양하게 제공할수 없을 경우에는 HDPI를 제공함.
  
  텍스트를 지정할 때 사용해야 하는 단위는?

  SP : 사용자 설정에 따라 텍스트 크기 변경됨.
  (Scale-independent pixel)

  DP : 사용자 설정에 따라 텍스트 크기 변경되지 않음.
  (Density-independent pixel)

 4. 네트웍크는 항상 느리다고 가정하라.

 5. 다양한 하드웨어에 대비하라.
  처티스크린
  키보드
  센서

  좋은 코드를 작성하라.

  모바일 기기에서 어떤 코드가 좋은 코드일까?

   CPU 낮고, 메모리 낮고, 가독성 높은.
  
  코드
  
  좋은 코드를 작성하라.
  필요한 기능을 최대한 간결히 작성하라.
  클래스/메소드/변수 이름을 명확히 하라.
  코드르 어렵게/복잡하게 작성하지 말아라.

  코드 작성시 알아둬야 할 10가지
  1. 객체는 최대한 적게 생성하라.
   static 메소드를 사용해서 객체 생성을 줄일 수 있다.
   반복문에서는 객체 생성을 중여야 한다.
   객체를 재사용한다.
   
   int myNum = Integer.valueOf("123").intValue();
   
   int myNum = Integer.parseInt("123");
   
   String result = "";
   for(int i = 0; i < 10; i++){
    String temp = new String("" + i);
    result += temp;
   }
   
   StringBuffer result = new StringBuffer();
   
   for(int i = 0; i < 10; i++){
    result.append("" + i);
   }
  ================================= 
   StringBuffer total = new StringBuffer();
   total.append("PRE");
   //....
   total = new StringBuffer();
   total.append("AFTER");
   
   StringBuffer total = new StringBuffer();
   total.append("PRE");
   //....
   total.setLength(0);
   total.append("AFTER");
   
  2. 불필요한 코드는 제거하라.
   쓸데없는 캐스팅을 줄여야 한다.
   
   for(int i = 0; i < vect.size(); i++){
    if(((String) vect.get(i)).equals("1")){
     //처리
    } else if(((String) vect.get(i).equals("2")){
     //처리 
    } else if(((String) vect.get(i).equals("3")){
     //처리
    }
   } 
  ================================= 
   String val = null;
   
   for(int i = 0; i < vect.size(); i++){
    val = (String) vect.get(i);
    
    if(val.equals("1")){
     //처리
    } else if(val.equals("2")){
     //처리
    } else if(val.equals("3")){
     //처리
    }
   }   
   
   
   
  3. 구현타입을 사용하라.
   List list1 = new ArrayList();
   
   ArrayLists list1 = new ArrayList();
 
  4. 메소드는 정적 메소드로 선언하라.
   class State{
    int currentNum;
    
    public int getMaxNum(){
     return 100;
    }
   } 
  
   class State{
    int currentNum;
    
    public static int getMaxNm(){
     return 100;
    }
   } 
  
  
  5. 클래스 내에서는 Getter와 Setter 를 사용해서 변수에 접근하지 말아라.
   getAge() -> age
   
   class Person{
    int age;
    
    private int getAge(){
     return age;
    }
    
    public int getPersonAge(){
    if(getAge() <0) return 0;
    else return getAge();
    }
   }
  ================================= 
   class Person{
    int age;
    
    public int getPersonAge(){
     if(age < 0) return 0;
     else return age;
    }
   }
   
  6. 값이 고정된 변수는 상수로 선언하라.
   static in intVal = 42;
   static final int intVal = 42;
   
  7. enum은 되도록 사용하지 말아라.
   class WINTER{
    private final int num;
    
    private WINTER(int num){
     this.num = num;
    }
    
    public int getNum(){
     return num;
    }
   }
   
  8. 부동소수형은 되도로 사용하지 말아라.
   부동소수형   정수형
   float     int
   dougle    long
   
  9. 네이티브 코드는 되도록 사용하지 말아라.
   JNI - Java Native Interface
   자바에서 C/C++를 호출하기 위한 메커니즘
   
   자바보다 더 나은 속도를 위해 사용됨.
   하드웨어를 제어하는 용도로 사용됨.
   
   디바이스에 따라 호환되지 않을 수 있음.
   디버깅을 하는 것이 쉽지 않음.
   
  10. 자바의 코드 노하우가 반드시 안드로이드의 코드 노하우는 아니다.
   가독성을 위해 중첩 클래스를 사용하지 마라.
   클래스는 되도록 작게 생성하라.
 
오늘의 내용을 한 마디로 정리하자면.....
 작은 차이가 큰 차이를 만듭니다.

저작자 표시
신고