아직도 1.5버전을 사용하는 개발자가 많은데 JDK 7 에 대해서는 많은 부분이 진행중입니다.
저도 최근에서야 JDK 6을 사용하고 있는데 말이죠.
Devoxx 컨퍼런스에서 JDK에 변경사항에 대한 설문조사를 진행한 것으로 보입니다.
간단히 살펴보도록 하겠습니다.
# Map for-each
차이점이 보이시나요..? 전 큰 잇점을 모르겠네요. ^^
# For-each iteration control
좀더 간단하게 할수 있도록 도와주는 것 같기는 하지만..
# List/map access
get메서드 대신에 일종에 배열처럼 또는 다른언어에서 제공하는 것처럼 지원하고자 하나 봅니다.
# Infer generics in declarations
실제 객체를 생성하는 부분에서 제네릭 타입을 명시하지 않는다면 선언부의 값을 그대로 사용한다는 것입니다.
# Multi-catch of Exceptions
여러개의 예외처리보다는 한꺼번에 처리하고자 할때는 간단히 처리하기 위한 지원입니다.
# String switch
이거보고 순간 멈찟 했는데 Java는 String타입에 대한 switch..case 구문을 지원하지 않고 이 부분에 대한 지원입니다.
# String interpolation
문자열 연산을 하면 아무래도 코드를 좀더 쉽게 처리할수도 있겠네요.
# Multi-line Strings
groovy나 다른 많은 언어에서 지원하는 형태인데 Java에서도 가져오는군요.
# Resource management
자원 해제에 대한 부담이 많이 줄어들듯 합니다.
# Null-handling
코드 전반에 걸쳐서 존재하는 많은 null 체크가 사라질수 있을듯 합니다.
상세한 결과물은 http://www.jroller.com/scolebourne/entry/jdk_7_language_changes_devoxx 에서 확인가능합니다. 결과만 보면 Infer generics in declarations, Multi-catch of Exceptions, Null-handling 에 대해서는 많은 점수를 주고 있습니다.
주의하셔야 할 것은 이 내용들이 모두 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());
}
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 (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변수에 할당된 문자열을 제거하고자 한다.
}
}
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();
}
}
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");
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"];
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>>();
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<>();
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) {
}
} catch (IOException ex) {
} catch (SQLException ex) {
}
- JDK 7
try {
} catch (IOException,SQLException ex) {
}
} catch (IOException,SQLException ex) {
}
여러개의 예외처리보다는 한꺼번에 처리하고자 할때는 간단히 처리하기 위한 지원입니다.
# String switch
- 현재
String str = ...
if (str.equals("name")) {
} else if (str.equals("surname")) {
} else if (str.equals("forename")) {
}
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;
}
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;
int value = ...
String out = "The value of "+ name + " is " + value;
- JDK 7
String name = ...
int value = ...
String out = $"The value of ${name} is ${value}";
int value = ...
String out = $"The value of ${name} is ${value}";
문자열 연산을 하면 아무래도 코드를 좀더 쉽게 처리할수도 있겠네요.
# Multi-line Strings
- 현재
String sql =
"SELECT surname, forename, title " +
"FROM person";
"SELECT surname, forename, title " +
"FROM person";
- JDK 7
String sql =
"""SELECT surname, forename, title
FROM person""";
"""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) {}
}
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);
}
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();
}
}
}
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();
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
'자바' 카테고리의 다른 글
[개발] Java와 Groovy 함께 사용하기 (0) | 2008.12.21 |
---|---|
[생각] 자바는 참 어려운 언어.. (17) | 2008.12.21 |
[REST] jersey로 REST구현하기 (2) | 2008.12.16 |
[eclipse] 시작시 에러 (4) | 2008.11.23 |
[eclipse] debug에서 toString() 내용 변경하기 (2) | 2008.11.08 |