Java JDK 7과 8의 정리
JDK 7
Type Inference
JDK 7 이전1
2Map<String, List<String>> employeeRecords = new HashMap<String, List<String>>();
List<Integer> primes = new ArrayList<Integer>();
JDK 7 이후1
2Map<String, List<String>> employeeRecords = new HashMap<>();
List<Integer> primes = new ArrayList<>();
String in Switch
1 | switch (day) { |
Automatic Resource Management
JDK 7 이전1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 FileInputStream fin = null;
BufferedReader br = null;
try {
fin = new FileInputStream("info.xml");
br = new BufferedReader(new InputStreamReader(fin));
if (br.ready()) {
String line1 = br.readLine();
System.out.println(line1);
}
} catch (FileNotFoundException ex) {
System.out.println("Info.xml is not found");
} catch (IOException ex) {
System.out.println("Can't read the file");
} finally {
try {
if (fin != null)
fin.close();
if (br != null)
br.close();
} catch (IOException ie) {
System.out.println("Failed to close files");
}
}
}
JDK 7 이후1
2
3
4
5
6
7
8
9
10
11
12try (FileInputStream fin = new FileInputStream("info.xml");
BufferedReader br = new BufferedReader(new InputStreamReader(
fin));) {
if (br.ready()) {
String line1 = br.readLine();
System.out.println(line1);
}
} catch (FileNotFoundException ex) {
System.out.println("Info.xml is not found");
} catch (IOException ex) {
System.out.println("Can't read the file");
}
Underscore in Numeric literal
1 | int billion = 1_000_000_000; // 10^9 |
JDK 8
Lambda expressions
람다 표현식은 Anonymous Function라고 할 수 있다
람다를 이용하여 코드를 간결하게 할 수 있다1
2
3
4
5
6
7
8
9
10
11// Before
Runnable oldRunner = new Runnable(){
public void run(){
System.out.println("I am running");
}
};
// After
Runnable java8Runner = () -> {
System.out.println("I am running");
};
Method Reference
특정 람다 표현식을 축약한 것으로 볼 수 있다
메서드 정의를 활용하여 람다처럼 사용 가능하다1
2
3
4
5
6
7
8
9
10
11
12// Before
inventory.sort((Apple a1, Apple a2) ->
a1.getWeight().compareTo(a2.getWeight()));
// After
inventory.sort(comparing(Apple::getWeight));
/*
Lamda -> Method Reference
(Apple a) -> a.getWeight Apple::getWeight
() -> Thread.currentThread().dumpStack() Thread.currentThread()::dumpStack
*/
Stream
간결하게 컬렉션의 데이터를 처리하는 기능1
2
3
4
5
6
7
8
9
10// Before
List<Shape> list = new ArrayList<Shape>();
for (Shape s : shapes) {
if (s.getColor() == RED) {
list.add(s);
}
}
// After
shapes.stream().filter(s -> s.getColor() == Red).collect(toList());
Default Method
인터페이스의 구현체를 인터페이스 자체에서 기본으로 제공 가능하다
구현 클래스에서 인터페이스를 구현하지 않아도 된다1
2
3
4
5
6
7public interface Sized {
int size();
default boolean isEmpty() { // Default Method
return size() == 0;
}
}
Optional
값을 Optional
값이 존재한다면 Optional 클래스는 값을 감싼다
값이 없다면 Optional.empty메서드로 Optional을 리턴한다
New date / time APIs
- Joda-Time의 많은 기능을 java.time 패키지로 추가했다
- LocalDate, LocalTime, Instant, Duration, Period …