ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Android 앱 개발시 Java 7 사용하기 - 펌
    Programming/Android 2014.01.13 21:57

    Android 앱 개발시 Java 7 사용하기

    GDG Korea Android 의 공동 운영자이신 김기완(hl5pma 골뱅이 gmail.com) 님께서 
    안드로이드의 새로운 빌드시스템인 gradle 설정을 통해, 작년 가을 새롭게 릴리즈된 Java 7 

    컴파일러를 이용하여 안드로이드 어플리케이션을 개발하는 방법에 관한 내용을 정리해 주셨습니다.
    개발자의 삶을 한층 더 편안하게 만들어줄 수 있는 Java 의 새로운 기능들을 함께 살펴보면 어떨까요?

    buildToolsVersion 19 부터 Java 7 로 앱을 빌드할 수 있게 됨에 따라 gradle 빌드 스크립트에 아래 내용을 추가해주면 Java 7 의 특성들을 이용하여 앱을 개발할 수 있게 되었습니다.

    android {
      compileSdkVersion 19
      buildToolsVersion "19.0.0"
    
      defaultConfig {
        minSdkVersion 7
        targetSdkVersion 19
      }
    
      compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
      }
    }
    
    안드로이드앱 개발시 이용할 수 있는 Java 7 의 특징들은 다음과 같습니다.

    이진수 표현

    숫자 앞에 "0b" 또는 "0B" 를 붙여 이진수 표현이 가능합니다.
    int hex = 0x8;  // 16진수
    int dec = 8;  // 10진수
    int oct = 08; // 8진수
    int bin = 0b101010; // 2진수
    

    숫자 사이에 언더스코어(_)표시

    숫자 사이에 언더스코어(_)를 넣을 수 있게 되어 가독성을 향상시킬 수 있게 되었습니다.
    long creditCardNumber = 1234_5678_9012_3456L;
    long socialSecurityNumber = 999_99_9999L;
    float pi = 3.14_15F;
    long hexBytes = 0xFF_EC_DE_5E;
    long hexWords = 0xCAFE_BABE;
    long maxLong = 0x7fff_ffff_ffff_ffffL;
    byte nybbles = 0b0010_0101;
    long bytes = 0b11010010_01101001_10010100_10010010;
    

    switch 구문에서 String 사용

    그동안 switch 구문에 기본형과 열거형만 사용할 수 있었고 String 을 사용할때는 다수의 if else 문으로 제어문을 구성해야 했다면 Java 7 부터는 switch 구문에서 String 을 사용할 수 있게 되었습니다.
    public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
      String typeOfDay;
      switch (dayOfWeekArg) {
        case "Monday":
          typeOfDay = "Start of work week";
          break;
        case "Tuesday":
          case "Wednesday":
          case "Thursday":
            typeOfDay = "Midweek";
            break;
          case "Friday":
            typeOfDay = "End of work week";
            break;
          case "Saturday":
          case "Sunday":
            typeOfDay = "Weekend";
            break;
          default:
            throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
      }
      return typeOfDay;
    }
    

    다이아몬드(<>)

    제네릭 인스턴스를 생성할 때 그동안 인스턴스 선언/생성 양쪽에 모두 타입을 적어주었어야 했었습니다.
    Map<String, List<String>> myMap = new HashMap<String, List<String>>();
    
    다이아몬드 기호(<>) 표시만으로 인스턴스 생성 부분에서의 타입을 생략할 수 있게 되었습니다.
    Map<String, List<String>> myMap = new HashMap<>();
    

    try-with-resources (Api level 19)

    그동안 사용 후 close() 메서드를 호출하여 자원을 반납해야 했던 InputStream/OutputStream 등은 Java 7 에서 try 구문 시작시 간단한 선언으로 자동으로 자원반납이 가능하게 되었습니다.
    static String readFirstLineFromFileWithFinallyBlock(String path) throws IOException {
      BufferedReader br = new BufferedReader(new FileReader(path));
      try {
        return br.readLine();
      } finally {
        if (br != null) br.close();
      }
    }
    
    Java 7 이전까지는 이렇게 BufferedReader 를 사용하고 난 후 finlly 에서 close() 를 호출해 stream 을 닫아주어야 했었다면 아래 코드와 같이 try 구문이 시작할 때 BufferedReader 선언하면 try 구문이 끝날 때 자동으로 close() 를 호출하게 됩니다.
    static String readFirstLineFromFile(String path) throws IOException {
      try (BufferedReader br = new BufferedReader(new FileReader(path))) {
        return br.readLine();
      }
    }
    
    주의: AutoCloseable interface 에 의한 close() 호출이기 때문에 Api level 19(Kitkat) 버전부터 사용할 수 있습니다.

    multi-catch Exception

    그동안 예외를 처리할 때 서로 다른 예외간 처리방식은 동일함에도 불구하고 같은 내용의 코드를 중복 작성해야 하는 불편함이 있었습니다.
    catch (IOException ex) {
        logger.log(ex);
        throw ex;
    catch (SQLException ex) {
        logger.log(ex);
        throw ex;
    }
    
    Java 7 에서는 '|' 연산자로 여러개의 예외를 한번에 묶어 처리할 수 있게되었습니다.
    catch (IOException|SQLException ex) {
      logger.log(ex);
      throw ex;
    }
    

    참고 사이트




    -- 위 문서 출저: http://googledevkr.blogspot.kr/2014/01/using-java7-in-android.html

    너무 좋은 문서라 퍼왔슴당

    댓글 0

Designed by Tistory.

티스토리 툴바