ìë
íìžì ð€ 늬ë¹ììŠì
ëë€ ð
ì€ë í¬ì€í
ììë ìë°ì ëë€ì ëíŽì ë€ë£šìŽ ë³Žë €ê³ íŽì ð
ëë€ë ìë° 8ìì ë±ì¥íê² ë ê°ë ìŒë¡ ëë€ë¥Œ ìŽì©íë©Ž ë©ìë륌 ê°ížíê² íêž°í ì ìê³ ìŒêž 컬ë ì ì ìŽì ë ë늎 ì ìê² ëëµëë€!
ëë€ì ì¥ì 곌 íšê» ì¬ì© ëª ìžê¹ì§ ìŽíŽíì€ ì ìëë¡ ì ê° ìŽì¬í ì€ëª í ë² ëë €ë³Žê² ìµëë€!
ëë€ììâìµëª
íšìâ륌 ìì±íêž° ìí ìì ì§ì¹íë ì©ìŽì
ëë€.
ì¬ìŽ ë§ë¡ íííë©Ž ë©ìë륌 íëì ì ìŒë¡ ì¶ìœ ííí ê²ìŽëŒê³ 볌 ì ììŽì
ë°ë¡ ìì륌 ëŽ
ìë€!
public int addOperation(int a, int b) {
return a + b;
}
ìì ë©ìëë ì ì ëê°ë¥Œ íëŒë¯ží°ë¡ ë°ìì ëíë ê°ëší ë©ìëì
ëë€.
ëë€ììŒë¡ ë°êŸžë©Ž ìëì²ëŒ ííìŽ ê°ë¥íŽì§ëë€
(int a, int b) -> a + b
ìŽì ë³Žë€ íšì¬ ê°ëšíê² ííí ì ìì£ ?
ë¡ì§ì ìíŽì ë©ìë륌 ìì±í íì ììŽ íìí ê³³ìì ë°ë¡ ë©ìë êž°ë¥ì ëë€ë¡ ìì±íì¬ ê¹ëíê² ì¬ì©í ì ìê² ëìë€ì!
ê°ëšíê² ííë ëë€ìì ìŒêž ê°ì²Žë¡ìš ë€ìíê² íì©ë ì ìê³ ìŽë¡ ìží ì¥ì ì ì¶ê°ì ìŒë¡ ë늎 ì ìê² ëëµëë€.
ìŒêž ê°ì²Žë¡ìš ëë€ììŽ íëŒë¯ží°ë¡ ì ë¬ ë ìë ìê³ ë°í íì ìŒë¡ë ë€ë£° ì ìê² ëë©° êž°ì¡Žì ë©ìëë³Žë€ ë§ì ìí ì í ì ìê² ë ê²ìŽì£ ð
ìŒêž ê°ì²Žë¡ìšì ëë€ìì ì¥ì ë°ë¡ ìŽìŽì ììë¡ ë³Žìì£ !
ì°ëŠ¬ê° Personì 컬ë ì
ìì ëìŽ ìì±ìŽ 25ìŽ ìŽììž ì¬ëë€ì ë°ë¡ 몚ìŒê³ ì¶ë€ê³ ë¹ìŠëì€ ìí©ì ê°ì íŽëŽ
ìë€!
ëë€ë¥Œ ì¬ì©íì§ ìëë€ë©Ž ë€ì곌 ê°ì ë©ìë륌 ë§ë€ê² ì£ ð€
public List<Person> collectAgeOver24(List<Person> people) {
List<Person> res = new ArrayList<>();
for (Person p : people) {
if (p.getAge() > 24) {
res.add(p);
}
}
return res;
}
ìì ìœëë íšì âëŽë¶ììâ íìí ëìë€ì 몚ë ì ìíê³ ìë ê²ì íìží ì ììµëë€.
ê·žë°ë° ì구ì¬íìŽ ë³ê²œëìŽì 25ìŽ ë¯žë§ìž ì¬ëë€ë 몚ì íìê° ìë€ê³ íŽëŽ
ìë€!
ì í¬ë íšì ëŽë¶ì ë¡ì§ì ê³ ì íìêž°ì ìë¡ìŽ íšì륌 ë§ë€ìŽìŒ í©ëë€ ð¢
public List<Person> collectAgeOver24(List<Person> people) {
List<Person> res = new ArrayList<>();
for (Person p : people) {
if (p.getAge() > 24) {
res.add(p);
}
}
return res;
}
public List<Person> collectAgeUnder24(List<Person> people) {
List<Person> res = new ArrayList<>();
for (Person p : people) {
if (p.getAge() <= 24) {
res.add(p);
}
}
return res;
}
결곌ì ìŒë¡ êµì¥í ë¹ì·íê² ìꞎ ë©ìë륌 ì¶ê°íŽìŒë§ íìµëë€..!
ìŽì ê°ìŽ ë©ìë륌 ì¶ê°íë íì¥ì ì구ì¬íìŽ ì¶ê°ë ëë§ë€ ê³ì ì ì©ëìŽìŒë§ íê² ì£ !
ì€ë³µëë age ë¶ë¶ì íëŒë¯ží°ë¡ ì¶ì¶íëëŒë í¬ê±°ë ê°ì ëë íìíŽì!
ìê±°ë ê°ì 겜ì°ë ë°ì žìŒíŽì!
ì ê°ì ì구ì¬íì ëíŽìë ë°ë³µì ìž ìœë륌 íê³ ìë ë©ìëê° ì¶ê°ë ì ë°ì ìì ê²ì
ëë€.
ì í¬ê° íë¡ê·žë뚞륌 ê¿êŸžë ìŽì ì€ë³µ ìœëìë ìŽëì ë ê±°ë¶ê°ì ê°ì žìŒê² ì£ !
ì°ì ì ëë€ë¡ ë©ìë륌 ë°êŸžìŽ ëŽ
ìë€.
//ëìŽê° 24ìŽ ìŽê³Œë§ íí°ë§
public List<Person> collectAgeOver24(List<Person> people) {
personList.stream()
.filter(person -> person.getAge() > 24)
.toList();
}
//ëìŽê° 24ìŽ ìŽíë§ íí°ë§
public List<Person> collectAgeUnder24(List<Person> people) {
personList.stream()
.filter(person -> person.getAge() <= 24)
.toList();
}
ì¬ì í ë¹ì·íê² ìꞎ ë©ìëê° ëê°ìŽêžŽ íì§ë§ ìë¹í ë³Œë¥šìŽ ì€ìë€ì ð€
ì¬êž°ìì!! ëë€ìì ìŒêž ê°ì²ŽìŽêž° ë묞ì filter()
ë©ìëì íëŒë¯ží°ë¡ ì ë¬ìŽ ê°ë¥í 몚ìµìŽ 볎ìŽìì£ !?
결곌ì ìŒë¡ ëë€ìì íµíŽì ìŽë€ 조걎ìŒë¡ íí°ë§í ì§ë¥Œ filter ë©ìëìâìžë¶ììâ ì íŽì€ ì ìê² ë 몚ìµì ëë€!
ìžë¶ìì ëìì ì§ì í ì ìë€ë ì ì ì¢ ë ìŽì©íŽì ì€ë³µëë ë¶ë¶ì ë ì€ì¬ëŽ ìë€ ð€
public List<Person> filterByAge(List<Person> persons, Predicate<Integer> ageCondition) {
return persons.stream()
.filter(person -> ageCondition.test(person.getAge()))
.collect(Collectors.toList());
}
ìŽë€ ë°©ììŒë¡ íí°ë§ í ì§ë¥Œ íëŒë¯ží°ë¡ ë°ìì ì ì©íëë¡ ìì ë ìœëì ëë€.
filterByAge()
ë©ìëë ììŒë¡ ë€ìí ëë€ë¥Œ ë°ìŒë©Žì íí°ë§ 조걎ì ë³ê²œíŽëê° ì ìê² ëììµëë€!
// ì¶ì¶í ë©ìë ì¬ì©
List<Person> filteredList = filterByAge(personList, age -> age <= 24);
List<Person> filteredList = filterByAge(personList, age -> age > 24);
ìŽë¡ìš ì구 ì¬íì íì¥ìì ë¹ë¡¯ëë ì¶ê° ë©ìë륌 ê°ë¹í íìê° ìê² ëìì£ .
ì€ë³µ ìœëê° í ì€ìë€ì ð€ ìžë¶ìì ëìì ì§ì í ì ìê² ëë ê²ìŽ ìŽë ê²ë ê°ë ¥íëµëë€.
ì ëë€ë¥Œ ì¬ì©íë ê°ë°ìì ìëê° ì íí ëë¬ëë©Žì ìœëë íšì¬ ê°ê²°íŽì§ê³ íì¥ ì구ì¬íìë ì€ë³µììŽ ì ì°íê² ëì²í ì ìê² ëììµëë€.
ë²ê±°ë¡ê² íŽëì€ì ë©ìë륌 ìì±í íìë ìê² ëìê³ ìžë¶ìì ëìì ì§ì í ì ìê² ëììµëë€.
ëë€ì ì¥ì ìŽì ë ë껎ì§ìëì? ð
ì ì§êžê¹ì§ ëë€ì ì¥ì ì ëíŽì ìì볎ììµëë€!
ë©ìë륌 ê¹ëíê² ì¶ìœìí€ë©° ê°ë
ì±ì í¥ììí¬ìë ìê³ ìžë¶ìì ëì ì§ì ì ê°ë¥íê² íšìŒë¡ìš ìŒêž 컬ë ì
ì ì¥ì ë ê°ì§ ì ìë€ê³ ì€ëª
ëë žìµëë€ ð
ê·žë ë€ë©Ž ëë€ì ì 첎ë 묎ììŒê¹ì..?
ë©ìë륌 ì¶ìœìíš ê²ìŽëŒê³ 볎멎 ììë ë©ìëìŒê¹ì..?
ë©ìëëŒêž°ì íšìí ìžìŽê° ìë ìë°ìì íëŒë¯ží°ë¡ ì ë¬ë ê°ë¥íê³ returnëìë ë ì ìê³ ë³ìë ë ì ìëë° ë©ìëëŒê³ 볎Ʞì ìŽë µê² ì£ !
ìì ëë€ë ë©ìëê° ìëëŒ ê°ì²Ž..?
ì í¬ ì§ì íë² ëë€ìì ë³ìë¡ ì¶ì¶íŽëŽ
ìë€ ð€
ì°ì ìží
늬ì ìŽë¥Œ í€ê³ ë€ìì ëë€ìì ìì±
() -> System.out.println();
ê·ž ë€ìì ctrl + alt + v륌 íµíŽ ì ì²Žê° ë¬Žììžì§ ì¶ì¶íŽë³Žì£ !
Runnable runnable = () -> System.out.println();
RunnableìŽëŒë íšìí ìží íìŽì€ê° ëë€ì ì 첎ìë€ì!
íšìí ìží°íìŽì€ë ì¶ì ë©ìëê° ë± 1ê°ë§ ìë ìží°íìŽì€ë¥Œ ë§í©ëë€!
ëë€ì ì ì²Žê° ìŽê²ìŽìì£ ð€
ìží°íìŽì€ë¥Œ implementíë íŽëì€ê° ììŽìŒ ëìì í í
ë° ì í¬ë 구í첎륌 ë§ë€ìŽì€ ì ìŽ ììµëë€!
ê·žëŒìë ëë€ë ì ëìíìì£ !
ìŽì ë ë°ë¡ ëë€ììŽ ë¬žë²ì íµíŽì ìží°íìŽì€ì ìžì€íŽì€ë¥Œ ë§ë€ìŽì£Œê³ ììë ê²ìŽêž° ë묞ì
ëë€!
결곌ì ìŒë¡ ëë€ìì íšìí ìží°íìŽì€ì 구í첎ìŽê³ ëììŽ ížì¶ë ëë§ë€ íëë°ì ìë ë©ìë륌 ì€íìí€ëë¡ ì€ê³ê° ëìŽ ìë ê²ìŽë€ì!
ìŽë¬í ë³µì¡í 곌ì ì ëë€ ë¬žë²ìŒë¡ ì¶ìí ëìŽ ììêž°ì ì í¬ë ëë€ììŒë¡ìš ë©ìë륌 ìŽì©í ì ìê² ëìë€ê³ 볌 ì ìê² ìµëë€ ð
ì í¬ë ëë€ììŽ íšìí ìží°íìŽì€ì 구í첎ìì ìê² ëììµëë€.
ê·žë°ë° íšìí ìží°íìŽì€ë ì¶ì ë©ìëê° í ê°ëŒê³ ì€ëª
ëë žìì£ !
ë§€ë² íšìí ìží°íìŽì€ë¥Œ ì ìíŽì ëë€ììŽë 1:1 맀íììŒ ì¬ì©íŽìŒ í ê¹ì?
ì ëµì ê·žë ì§ ìë€ë ê²ì
ëë€ ì í¬ë 믞늬 ë§ë€ìŽì§ íšìí ìží°íìŽì€ë¥Œ ìŽì©í ì ììŽì!
ì ìŽì ìê°íŽë³Žë©Ž ììì ëë€ì ì 첎륌 íì
íêž° ìíŽ í
ì€íž íŽëŽ€ë Runnableë ì í¬ê° ë§ë ì ìŽ ìì£ ð€
믞늬 ì ìë ìží°íìŽì€ë¡ ì¶ì¶ëìë€ê³ ìŽì ë ìê°íŽë³Œ ì ìê² ë€ì
맀ê°ë³ìê° ìëì§, ë°íê°ìŽ ìëì§ ë±ë±ì êž°ì€ìŒë¡ java.util.functioníší€ì§ì ë§ì íšìí ìží°íìŽì€ë€ìŽ ìŽë¯ž ë§ë€ìŽì ž ìëµëë€ ð
ë°ëŒì ì í¬ê° ëë€ìì ì¬ì©íê³ ì í ëìë FunctionalInterface
륌 ì§ì ë§ë€ìŽì ì°êž° 볎ë€ë ì 곚ëŒì ì°ë©Ž ížëŠ¬íšì ëì± í¬ê² ë늎 ì ìê² ì£ ð
íšìí ìží°íìŽì€ | ë§€ê° ë³ì | ë©ìë | ë°íê° |
---|---|---|---|
Runnable | X | void run() | X |
Supplier | X | T get() | O(T) |
Consumer | O(T) | void accept(T t) | X |
Predicate | O(T) | boolean test(T t) | O(boolean) |
ììì ì§ì ìží
늬ì ìŽì í
ì€ížíŽë³Žìë () -> System.out.println()
ì 맀ê°ë³ìë ìê³ ë°íê°ë ììêž°ì Runnable íšìí ìží°íìŽì€ë¡ ì¶ì¶ë ê²ë ìŽì ë ì ì ìê² ë€ì
https://velog.io/@reveloper-1311/%EC%9D%BC%EA%B8%89-%EA%B0%9D%EC%B2%B4First-Class-Object%EB%9E%80