μμ ν¨μλ₯Ό μ‘°ν©νκ³ κ³΅μ μν, λ³κ²½ κ°λ₯ν λ°μ΄ν° λ° λΆμμ©μ νΌν΄ μννΈμ¨μ΄λ₯Ό λ§λλ νλ‘μΈμ€
'μ μΈν' νλ‘κ·Έλλ°μΌλ‘, μ ν리μΌμ΄μ μ μνλ μμ ν¨μλ₯Ό ν΅ν΄ μ λ¬λλ€.
μ ν리μΌμ΄μ μ μνκ° μΌλ°μ μΌλ‘ 곡μ λκ³ κ°μ²΄μ λ©μλμ ν¨κ» λ°°μΉλλ OOPμλ λμ‘°λλ νλ‘κ·Έλλ° λ°©μ
-
μνμ μνλ₯Ό λ³κ²½μν€λ κ΄μ μμ μ°μ°μ μ€λͺ νλ λ°©μ
μκ³ λ¦¬μ¦μ λͺ μνκ³ , λͺ©νλ λͺ μνμ§ μμ
-
How보λ€λ Whatμ μ€λͺ νλ λ°©μ (μ΄λ»κ²λ³΄λ¨ 무μμ)
μκ³ λ¦¬μ¦μ λͺ μνμ§ μκ³ λͺ©νλ§ λͺ μν¨
λͺ
λ Ήν νλ‘κ·Έλλ°μ μ΄λ»κ² ν μ§ νννκ³ , μ μΈν νλ‘κ·Έλλ°μ 무μμ ν κ±΄μ§ νννλ€.
ν¨μν μ½λλ λͺ λ Ήν νλ‘κ·Έλλ°μ΄λ OOP μ½λλ³΄λ€ λ κ°κ²°νκ³ μμΈ‘κ°λ₯νμ¬ ν μ€νΈνλ κ²μ΄ μ½λ€.
(νμ§λ§ μ΅μμΉ μμΌλ©΄ λ 볡μ‘ν΄λ³΄μ΄κ³ μ΄ν΄νκΈ° μ΄λ €μ)
ν¨μν νλ‘κ·Έλλ°μ νλ‘κ·Έλλ° μΈμ΄λ λ°©μμ λ°°μ°λ κ²μ΄ μλ, ν¨μλ‘ νλ‘κ·Έλλ°νλ μ¬κ³ λ₯Ό λ°°μ°λ κ²μ΄λ€.
κΈ°μ‘΄μ μ¬κ³ λ°©μμ μ ννμ¬ νλ‘κ·Έλλ°μ λ μ μ°νκ² λ¬Έμ ν΄κ²° νλλ‘ μ κ·Όνλ κ²
-
μμ ν¨μ (Pure functions)
μ μΆλ ₯μ΄ μμν΄μΌν¨ : λ°λμ νλ μ΄μμ μΈμλ₯Ό λ°κ³ , λ°μ μΈμλ₯Ό μ²λ¦¬ν΄ λ°λμ κ²°κ³Όλ¬Όμ λλ €μ€μΌ ν¨. μΈμ μΈ λ€λ₯Έ λ³μ μ¬μ© κΈμ§
-
ν©μ± ν¨μ (Function composition)
-
곡μ μν νΌνκΈ° (Avoid shared state)
-
μνλ³ν νΌνκΈ° (Avoid mutating state)
-
λΆμμ© νΌνκΈ° (Avoid side effects)
νλ‘κ·Έλλ¨Έκ° λ°κΎΈκ³ μ νλ λ³μ μΈμλ λ³κ²½λλ©΄ μλ¨. μλ³Έ λ°μ΄ν°λ μ λ λΆλ³!
λνμ μΈ μλ°μ€ν¬λ¦½νΈ ν¨μν νλ‘κ·Έλλ° ν¨μ : map, filter, reduce
var arr = [1, 2, 3, 4, 5];
var map = arr.map(function(x) {
return x * 2;
}); // [2, 4, 6, 8, 10]
arrμ λ£μ΄μ mapμ μ»μμ. arrμ μ¬μ©νμ§λ§ κ°μ λ³νμ§ μμκ³ mapμ΄λΌλ κ²°κ³Όλ₯Ό λ΄κ³ μ΄λ ν λΆμμ©λ λ³μ§ μμ
μ΄λ° κ²μ΄ λ°λ‘ ν¨μν νλ‘κ·Έλλ°μ μμν¨μλΌκ³ λ§νλ€.
var arr = [1, 2, 3, 4, 5];
var condition = function(x) { return x % 2 === 0; }
var ex = function(array) {
return array.filter(condition);
};
ex(arr); // [2, 4]
μ΄λ μμν¨μκ° μλλ€. μ΄μ λ ex λ©μλμμ μΈμκ° μλ conditionμ μ¬μ©νκΈ° λλ¬Έ.
μμν¨μλ‘ κ³ μΉλ©΄ μλμ κ°λ€.
var ex = function(array, cond) {
return array.filter(cond);
};
ex(arr, condition);
μμν¨μλ‘ λ§λ€λ©΄, μλ¬λ₯Ό μΆμ νλ κ²μ΄ μ¬μμ§λ€. μΈμμ λ¬Έμ κ° μκ±°λ ν¨μ λ΄λΆμ λ¬Έμ κ° μκ±°λ λ μ€ νλμΌ μ λ°μ μκΈ° λλ¬Έμ΄λ€.
Java 8μ΄ λ¦΄λ¦¬μ¦λλ©΄μ, Javaμμλ ν¨μν νλ‘κ·Έλλ°μ΄ κ°λ₯ν΄μ‘λ€.
ν¨μν νλ‘κ·Έλλ° : λΆμν¨κ³Όλ₯Ό μμ κ³ μμ ν¨μλ₯Ό λ§λ€μ΄ λͺ¨λν μμ€μ λμ΄λ νλ‘κ·Έλλ° ν¨λ¬λ€μ
λΆμν¨κ³Ό : μ£Όμ΄μ§ κ° μ΄μΈμ μΈλΆ λ³μ λ° νλ‘κ·Έλλ° μ€νμ μν₯μ λΌμΉμ§ μμμΌ λλ€λ μλ―Έ
μ΅λν μμν¨μλ₯Ό μ§ν₯νκ³ , μ¨κ²¨μ§ μ μΆλ ₯μ μ΅λν μ κ±°νμ¬ μ½λλ₯Ό μμν μ μΆλ ₯ κ΄κ³λ‘ μ¬μ©νλ κ²μ΄ ν¨μν νλ‘κ·Έλλ°μ λͺ©μ μ΄λ€.
Javaμ κ°μ²΄ μ§ν₯μ λͺ λ Ήν νλ‘κ·Έλλ°μ΄κ³ , ν¨μνμ μ μΈν νλ‘κ·Έλλ°μ΄λ€.
λμ μ°¨μ΄λ λ¬Έμ ν΄κ²°μ κ΄μ
μ¬νκΉμ§ μ°λ¦¬λ Javaμμ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ ν λ 'λ°μ΄ν°λ₯Ό μ΄λ»κ² μ²λ¦¬ν μ§μ λν΄ λͺ λ Ήμ ν΅ν΄ ν΄κ²°'νλ€.
ν¨μν νλ‘κ·Έλλ°μ μ μΈμ ν¨μλ₯Ό ν΅ν΄ '무μμ νμ΄λκ°μΌν μ§ κ²°μ 'νλ κ²μ΄λ€.
- λλ€μ
- stream api
- ν¨μν μΈν°νμ΄μ€
Java 8μλ Stream APIκ° μΆκ°λμλ€.
import java.util.Arrays;
import java.util.List;
public class stream {
public static void main(String[] args) {
List<String> myList = Arrays.asList("a", "b", "c", "d", "e");
// κΈ°μ‘΄λ°©μ
for(int i=0; i<myList.size(); i++){
String s = myList.get(i);
if(s.startsWith("c")){
System.out.println(s.toUpperCase());
}
}
// stream APIλ₯Ό μ΄μ©ν λ°©μ
myList.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.forEach(System.out::println);
}
}
λκ° λ€λ₯Έκ±΄μ§ ν¬κ² μλΏμ§ μμ μ μμ§λ§, μ€μν건 νλ‘κ·Έλλ°μ ν¨λ¬λ€μ λ³νλΌλ κ²μ΄λ€.
λ¨μν ν¨μλ₯Ό μ μΈν΄μ λ°μ΄ν°λ₯Ό λ΄κ° μνλ λ°©ν₯μΌλ‘ μ²λ¦¬ν΄λκ°λ ν¨μν νλ‘κ·Έλλ° λ°©μμ λ³Ό μ μλ€. νλμ 보λλΌλ ν¨μν νλ‘κ·Έλλ°μ λ΄κ° 무μμ ꡬννλμ§ λͺ νν μ μ μλ€. (λ¬΄μ¨ ν¨μμΈμ§ μ¬μ νμ΅μ΄ νμν μ μ΄ μμ)