πκ΅μ‘μμ λ€λλ κ°μ¬λκ»μ μλ €μ£Όμ μλ°λ²μ μ΄ 8λ²μ μ΄μλ€. μμΈμ§λ λͺ°λλ€. κ·Έ λΉμ 11λ λμμμμ§λ§, μ΄λ ν μ΄μ μμ μλ° 8λ²μ μ μ¬μ©νλΌκ³ νμ ¨κ³ , λ λ±ν κΆκΈμ¦μ νμ§μκ³ μ΄κ² μλ°8λ²μ μ΄κ΅¬λ~! νκ³ μ무μκ°μμ΄ μ¬μ©νλ€,,, νλ‘μ νΈλ₯Ό μ§νν λλ λΉμ°νλ―μ΄ 8λ²μ μ μ¬μ©νλ€.
κ·Έλ°λ° λ©ν λκ»μ Java 8λ²μ μμ λ³κ²½λ κ² λ¬΄μμ΄λ©°, νΉμ§μ 무μμΌκΉμ~? λΌκ³ μ§λ¬Έμ μ£Όμ ¨μ λ λ μμ μ λ°μ±νκ² λμλ€... μ λ§ μ무κ²λ λͺ¨λ₯΄κ³ μ¬μ©νκ³ μμꡬλ μΆμλ€.
λ€μ μμ μ§λ¬Έμ λ°μμ λ λ²μ°μ§ μκ² μ€λμ Java 8μ νΉμ§μ μμ보λλ‘ νμ.
Java 8 νΉμ§
1. λλ€ ννμ(lambda expression) : ν¨μν νλ‘κ·Έλλ°
2. Method Reference : λ©μλ μ μλ₯Ό νμ©νμ¬ λλ€μ²λΌ μ¬μ© κ°λ₯
3. μ€νΈλ¦Ό API(Stream API) : λ°μ΄ν°μ μΆμν
4. Parallel Stream : μ€νΈλ¦Ό λ³λ ¬μ²λ¦¬
5. java.time ν¨ν€μ§ : Joda-Timeμ μ΄μ©ν μλ‘μ΄ λ μ§μ μκ° API(Calendarκ° κ°μ§κ³ μλ λ¨μ μ 보μ)
6. Default Method : μΈν°νμ΄μ€μ ꡬν체λ₯Ό μΈν°νμ΄μ€ μ체μμ κΈ°λ³ΈμΌλ‘ μ 곡 κ°λ₯
7. λμ¦νΌ(Nashorn) : μλ°μ€ν¬λ¦½νΈμ μλ‘μ΄ μμ§
λλ€ ννμ(Lambda expression)
λλ€ννμμ΄λ? κ°λ¨ν λ§ν΄μ λ©μλλ₯Ό νλμ 'μ(expression)'μΌλ‘ ννν κ²μ΄λ€. λ©μλλ₯Ό λλ€μμΌλ‘ νννλ©΄ λ©μλμ μ΄λ¦κ³Ό λ°νκ°μ΄ μμ΄μ§λ―λ‘ λλ€μμ λ€λ₯Έλ§λ‘ 'μ΅λͺ ν¨μ(anonymous function)'μ΄λΌκ³ λ νλ€. λλ€μμ λͺ ννλ©΄μ κ°λ΅νκ² ννν μ μκ² ν΄μ€λ€.
λ§λ‘ μ€λͺ νλ κ²λ³΄λ€ μ½λλ‘ μ΄ν΄νλ κ²μ΄ λ λΉ λ₯Ό κ² κ°λ€. μλμ μ½λλ₯Ό μ°Έκ³ νμ¬ λλ€μμ κ°λ΅ν¨κ³Ό λͺ λ£ν¨μ μ§μ λ껴보μ.
// (1) μΌλ° λ©μλ
int max(int a, int b){
return a < b ? a : b;
}
// (2) λλ€ ννμ
(a, b) -> a < b ? a : b
νλμ 보기μλ κ°κ²°ν΄μ§ κ²μ λ³Ό μ μμ΅λλ€.
λλ€μ μμ±λ°©λ²μ μλμ κ°λ€.
λ°ννμ λ©μλμ΄λ¦(맀κ°λ³μ) -> { λ©μλλ΄μ© }
λ°ννμ κ³Ό λ©μλλͺ μ μ κ±°νκ³ λ§€κ°λ³μ μ μΈλΆμ λ©μλλ΄μ© μ¬μ΄μ '->'λ₯Ό μΆκ°νλ€.
μ€νΈλ¦Ό(Stream)
μλ°μμ μλ§μ λ°μ΄ν°λ₯Ό λ€λ£° λ 컬λ μ μ΄λ λ°°μ΄μ λ°μ΄ν°λ₯Ό λ΄κ³ μνλ κ²°κ³Όλ₯Ό μ»κΈ° μν΄ forλ¬Έκ³Ό iteratorλ₯Ό μ¬μ©νμ¬ μ½λλ₯Ό μμ±νλ€.
μ΄μκ°μ λ°©μμ κ°λ μ±μ΄ λ¨μ΄μ§λ κ² λΏλ§ μλλΌ μ¬μ¬μ©μ±λ λ¨μ΄μ§λ€. λν, λ°μ΄ν° μμ€λ§λ€ λ€λ₯Έ λ°©μμΌλ‘ λ€λ€μΌ νλ€λ λΆνΈν¨μ΄ μλ€. μλ₯Όλ€μ΄ Listλ₯Ό μ λ ¬ν λλ Collection.sort();λ₯Ό λ°°μ΄μ μ λ ¬ν λλ Arrays.sort();λ₯Ό μ¬μ©ν΄μΌ νλ€.
μ€νΈλ¦Ό(Stream)μ μ΄μκ°μ λ¬Έμ μ λ€μ ν΄κ²°νκΈ° μν΄μ λ§λ κ²μ΄λ€.
μ€νΈλ¦Όμ λ°μ΄ν°μμ€λ₯Ό μΆμνμ¬ λ°μ΄ν° μμ€(List,λ°°μ΄,,,,)κ° λ€λ₯΄λλΌλ κ°μ λ°©μμΌλ‘ μ²λ¦¬κ° κ°λ₯νκ² μ¬μ¬μ©μ±μ λμλ€.
μλμ μ½λλ₯Ό 보며 μ¬μ©λ°©λ²μ μ΅ν보μ.
public class StreamTest {
public static void main(String[] args) {
String[] arr = {"aaa","bbb","ccc"}; //(1)
List<String> strArr = Arrays.asList(arr); //(2)
Stream<String> stream = strArr.stream(); //(3)
Stream<String> stream2 = Arrays.stream(arr);
stream.sorted().forEach(System.out::println); //(4)
stream2.sorted().forEach(System.out::println);
}
}
(1) λ°°μ΄μμ±
(2) List μμ±
(3) Stream μ μ©
(4) Streamμ μ μ©ν λ³μμ streamλ©μλμΈ sorted()λ₯Ό μ μ©νμ¬ μ λ ¬ ν λ°λ³΅λ¬Έμ μ¬μ©νμ¬ μΆλ ₯
λ€λ₯Έλ°μ΄ν° μμ€μμλ μ€νΈλ¦Όμ μ¬μ©νμ¬ κ°μ λ©μλλ₯Ό μ¬μ©νλ€. μ΄λ₯Ό ν΅ν΄ μ½λκ° κ°κ²°ν΄μ§κ³Ό μ€νΈλ¦Όμ μ¬μ¬μ©μ±μ΄ λλ€λ κ²μ μ μ μλ€.
Parallel Stream
μμ Streamμ λ³λ ¬λ‘ μ²λ¦¬κ°λ₯νλλ‘ νλ κΈ°λ₯μ΄λ€. μ¬λ¬ μ€λ λμμ μ²λ¦¬ν μ μλλ‘ λΆν ν Streamμ΄λ€.
java.time ν¨ν€μ§
κΈ°μ‘΄μ μλ°μμ μ 곡νλ Dateμ Calendarκ° κ°μ§κ³ μλ λ¨μ μ 보μνκΈ° μν΄ java.timeν¨ν€μ§κ° μΆκ°λμλ€.
μ λ λ³λ‘ λΆνΈν¨ μμ΄ μ¬μ©νλλ°μ©? λΌλ μ¬λμ΄ μμ κ² κ°μΌλ κΈ°μ‘΄μ μ΄λ€ λ¨μ μ΄ μμλμ§ λ¨Όμ μ€λͺ νκ² λ€.
1. Calendarν΄λμ€λ μ(month)λ₯Ό ννν λ 0λΆν° μμνλ€. μ¦ 1μμ 0, 2μμ 1... κ·Έλμ +1μ ν΄μ€μΌ μνλ μμ μ»μ μ μλ€.
2. Calendarν΄λμ€λ λΆλ³κ°μ²΄κ° μλλ€. μ΄ λ§μ μμ μ΄ κ°λ₯νμ¬ λ©ν°μ€λ λ νκ²½μ λ ΈμΆλμμ λ μμ νμ§ μλ€λ κ²μ΄λ€.
3. Calendarν΄λμ€λ μ€μ΄μ κ°μ νΉλ³ν μν©μ κ³ λ €νμ§ μλλ€.
μ΄λ₯Ό 보μνμ¬ λμ¨ κ²μ΄ λ°λ‘ 'java.time' μ΄λ€. λ μ§μ μκ°μ κ°μ΄ 보μ¬μ£Όλ Calendarμ λ€λ₯΄κ² java.timeμμλ λ³λλ‘ ν΄λμ€λ₯Ό λΆλ¦¬ν΄ λμλ€. μλμ μμ λ₯Ό λ³΄κ³ νμΈν΄λ³΄μ.
public class timeTest {
public static void main(String[] args) {
LocalDate ld = LocalDate.now();
System.out.println(ld);
LocalTime lt = LocalTime.now();
System.out.println(lt);
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
}
}
κ²°κ³Όλ μλμ κ°λ€.
2021-08-18
00:49:08.560
2021-08-18T00:49:08.560
μμ μμ μμ μ¬μ©ν ν΄λμ€ λ§κ³ λ λ€μν νμ ν΄λμ€κ° μ‘΄μ¬νλ κΆκΈνλ€λ©΄ λ κΉκ² μμ보면 μ’μ κ² κ°λ€.
Default Method
- μΈν°νμ΄μ€μ ꡬν체λ₯Ό μΈν°νμ΄μ€ μ체μμ κΈ°λ³ΈμΌλ‘ μ 곡 κ°λ₯νλ€
- ꡬν ν΄λμ€μμ μΈν°νμ΄μ€λ₯Ό ꡬννμ§ μμλ λλ€
public interface test {
int no();
default boolean test() { // Default Method
return no() == 0;
}
}
λμ¦νΌ(Nashorn)
μ§κΈκΉμ§ μλ°μ€ν¬λ¦½νΈμ κΈ°λ³Έ μμ§μΌλ‘λ λͺ¨μ§λΌμ λ¦¬λ Έ(Rhino)κ° μ¬μ©λμ΄ μλ€.
νμ§λ§ μλ°μ μ΅μ κ°μ μ¬ν λ±μ μ λλ‘ νμ©νμ§ λͺ»νλ λ± λ Έννλ λͺ¨μ΅μ 보μ¬μ£Όκ² λλ€.
λ°λΌμ μ΄λ² Java SE 8 λ²μ λΆν°λ μλ°μ€ν¬λ¦½νΈμ μλ‘μ΄ μμ§μΌλ‘ μ€λΌν΄μ λμ¦νΌ(Nashorn)μ λμ νκ² λμλ€.
λμ¦νΌ(Nashorn)μ κΈ°μ‘΄μ μ¬μ©λμ΄ μ¨ λ¦¬λ Έμ λΉν΄ μ±λ₯κ³Ό λ©λͺ¨λ¦¬ κ΄λ¦¬ λ©΄μμ ν¬κ² κ°μ λ μ€ν¬λ¦½νΈ μμ§μ΄λΌκ³ μ΄ν΄νλ©΄ λ κ² κ°λ€.
μλ° λ²μ λ³ νΉμ§μ΄ κΆκΈνλ€λ©΄ μλμ λ§ν¬λ₯Ό μ°Έμ‘°νμ. (λμ€μ μκ°μ΄ λλ€λ©΄ νλ‘ μ 리ν΄λ³΄κ² λ€..)
μ°Έκ³ ν μ¬μ΄νΈ
μλ°μ μ
μλ°μ μ μ
'Language > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] final μ μμ보μ (0) | 2021.08.22 |
---|---|
[Java]μΆμν΄λμ€μ μΈν°νμ΄μ€(μ°¨μ΄,곡ν΅μ ) (0) | 2021.08.21 |
[Java] λ€νμ±(polymorphism)μ΄λ? (0) | 2021.08.15 |
[Java] μμ(Inheritance)μ λν΄μ (0) | 2021.08.14 |
[Java] μ€λ²λΌμ΄λ©(Overriding)κ³Ό μ€λ²λ‘λ©(Overloading)μ μ°¨μ΄μ (0) | 2021.08.11 |
λκΈ