달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'jdk 7'에 해당되는 글 1건

  1. 2008.12.20 [JDK] JDK 7의 변경사항 4

[JDK] JDK 7의 변경사항

자바 2008. 12. 20. 22:59
아직도 1.5버전을 사용하는 개발자가 많은데 JDK 7 에 대해서는 많은 부분이 진행중입니다.
저도 최근에서야 JDK 6을 사용하고 있는데 말이죠.

Devoxx 컨퍼런스에서 JDK에 변경사항에 대한 설문조사를 진행한 것으로 보입니다.
간단히 살펴보도록 하겠습니다.

# Map for-each
  • 현재
Map<String, Integer> map = new HashMap<String, Integer>();
for (Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + "=" + entry.getValue());
}

  • JDK 7
Map<String,Integer> map = new HashMap<String, Integer>();
for (String key, Integer value : map) {
    System.out.println(key + "=" + value);
}

차이점이 보이시나요..? 전 큰 잇점을 모르겠네요. ^^


# For-each iteration control

  • 현재
List<String> list = new ArrayList<String>();
for (String str : list) {
    if (str.length() > 100) {
        // str변수에 할당된 문자열을 제거하고자 한다.
    }
}

  • JDK 7
List<String> list = new ArrayList<String>();
for (String str : list : it) {
    if (str.length() > 100) {
        it.remove();
    }
}

좀더 간단하게 할수 있도록 도와주는 것 같기는 하지만..


# List/map access

  • 현재
List<String> list = ...
Map<String,Integer> map = ...
Map<String,Map<String,Task>> combined = ...

String str = list.get(0);
list.set(0, "Hi");

Integer value = map.get(str);
map.put("Hi", 56);

Task task = combined.get("Test").get("Monitor");
  • JDK 7
List<String> list = ...
Map<String,Job> map = ...
Map<String,Map<String,Task>> combined = ...

String str = list[0];
list[0] = "Hi";

Integer value = map[str];
map["Hi"] = 56;

Task task = combined["Test"]["Monitor"];

get메서드 대신에 일종에 배열처럼 또는 다른언어에서 제공하는 것처럼 지원하고자 하나 봅니다.


# Infer generics in declarations

  • 현재
List<String> list = new ArrayList<String>();
Map<String,Job> map = new HashMap<String,Job>();
Map<String,Map<Channel,Job>> map = new HashMap<String,<Channel,Job>>();
  • JDK 7
List<String> list = new ArrayList<>();
Map<String,Job> map = new HashMap<>();
Map<String,Map<Channel,Job>> map = new HashMap<>();

실제 객체를 생성하는 부분에서 제네릭 타입을 명시하지 않는다면 선언부의 값을 그대로 사용한다는 것입니다.


# Multi-catch of Exceptions

  • 현재
try {

} catch (IOException ex) {
} catch (SQLException ex) {
}
  • JDK 7
try {

} catch (IOException,SQLException ex) {
}

여러개의 예외처리보다는 한꺼번에 처리하고자 할때는 간단히 처리하기 위한 지원입니다.


# String switch

  • 현재
String str = ...
if (str.equals("name")) {
} else if (str.equals("surname")) {
} else if (str.equals("forename")) {
}

  • JDK 7
String str = ...
switch (str) {
    case "name":
        break;
    case "surname":
        break;
    case "forename":
        break;
}

이거보고 순간 멈찟 했는데 Java는 String타입에 대한 switch..case 구문을 지원하지 않고 이 부분에 대한 지원입니다.


# String interpolation

  • 현재
String name = ...
int value = ...
String out = "The value of "+ name + " is " + value;
  • JDK 7
String name = ...
int value = ...
String out = $"The value of ${name} is ${value}";

문자열 연산을 하면 아무래도 코드를 좀더 쉽게 처리할수도 있겠네요.


# Multi-line Strings
  • 현재
String sql =
"SELECT surname, forename, title " +
"FROM person";
  • JDK 7
String sql =
"""SELECT surname, forename, title
FROM person""";

groovy나 다른 많은 언어에서 지원하는 형태인데 Java에서도 가져오는군요.


# Resource management
  • 현재
File file = ...
FileReader in = null;
try {
    in = new FileReader(file);
    processFile(in);
} finally {
    try {
        if (in != null) {
            in.close();
        }
    } catch (IOException ignored) {}
}
  • JDK 7
File file = ...
try (FileReader in = new FileReader(file)) {
    processFile(in);
}

자원 해제에 대한 부담이 많이 줄어들듯 합니다.


# Null-handling
  • 현재
Session sess = ...
String code = null;
if (sess != null) {
    if (sess.person() != null) {
        if (sess.person().address() != null) {
            code = sess.person().address().postcode();
        }
    }
}
  • JDK 7
Session sess = ...
String code = sess?.person()?.address()?.postcode();

코드 전반에 걸쳐서 존재하는 많은 null 체크가 사라질수 있을듯 합니다.



상세한 결과물은 http://www.jroller.com/scolebourne/entry/jdk_7_language_changes_devoxx 에서 확인가능합니다. 결과만 보면 Infer generics in declarations, Multi-catch of Exceptions, Null-handling 에 대해서는 많은 점수를 주고 있습니다.

주의하셔야 할 것은 이 내용들이 모두 JDK 7에 반영되는 내용은 아닙니다. 설문조사니까 그래도 많은 부분이 반영은 되겠죠..??

참고자료
1. PPT : http://docs.google.com/Present?docid=ajkb8rnkwjk5_165g8wpxhf5
2. 설문조사 결과 페이지 : http://www.jroller.com/scolebourne/entry/jdk_7_language_changes_devoxx

Posted by fromm0
|