์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- ์์ ์ ๋ ฌ
- web
- error
- BFS
- GCP
- ์ด๋ถ ํ์
- dfs
- c++
- dynamic debugging
- ๋์ ํฉ
- CVE
- ๋งต
- ์คํ
- ๋ฌธ์์ด
- JPA
- ๋ถํ ์ ๋ณต
- ๋ฐฑํธ๋ํน
- java
- OS
- ์ฌ๊ท
- ๊ตฌํ
- ์ต๋จ ๊ฒฝ๋ก
- DP
- ๊ทธ๋ฆฌ๋
- ์๋ฎฌ๋ ์ด์
- Reversing
- Spring
- ์ฐ์ ์์ ํ
- ๋ฐ์ดํฌ์คํธ๋ผ
- thymeleaf
- Today
- Total
hades
[๋ชจ๋ ์๋ฐ ์ธ ์ก์ ] ๋๋ค ํํ์ ๋ณธ๋ฌธ
[๋ชจ๋ ์๋ฐ ์ธ ์ก์ ] ๋๋ค ํํ์
hades1 2024. 9. 4. 09:56ํ์์ฑ
์ต๋ช ํด๋์ค๋ก ๋ค์ํ ๋์์ ๊ตฌํํ ์ ์์ง๋ง, ๋ง์กฑํ ๋งํผ ์ฝ๋๊ฐ ๊น๋ํ์ง๋ ์์๋ค. ๋๋ค ํํ์์ ์ต๋ช ํด๋์ค์ฒ๋ผ ์ด๋ฆ์ด ์๋ ํจ์์ด๋ฉด์ ๋ฉ์๋๋ฅผ ์ธ์๋ก ์ ๋ฌํ ์ ์์ผ๋ฏ๋ก ๋๋ค ํํ์์ด ์ต๋ช ํด๋์ค๋ฅผ ๋์ ํ ์ ์๋ค.
๋๋ค๋ ๋ฌด์์ธ๊ฐ?
๋๋ค ํํ์์ ๋ฉ์๋๋ก ์ ๋ฌํ ์ ์๋ ์ต๋ช ํจ์๋ฅผ ๋จ์ํํ ๊ฒ์ด๋ผ๊ณ ํ ์ ์๋ค. ๋๋ค ํํ์์๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์๋ค.
- ์ต๋ช : ๋ณดํต์ ๋ฉ์๋์๋ ๋ฌ๋ฆฌ ์ด๋ฆ์ด ์์ผ๋ฏ๋ก ์ต๋ช ์ด๋ผ๊ณ ํํํ๋ค.
- ํจ์ : ๋๋ค๋ ๋ฉ์๋์๋ ๋ฌ๋ฆฌ ํน์ ํด๋์ค์ ์ข ์๋์ง ์์ผ๋ฏ๋ก ํจ์๋ผ๊ณ ๋ถ๋ฅธ๋ค. ํ์ง๋ง, ๋ฉ์๋์ฒ๋ผ ํ๋ผ๋ฏธํฐ ๋ฆฌ์คํธ, ๋ฐ๋, ๋ฐํ ํ์, ๊ฐ๋ฅํ ์์ธ ๋ฆฌ์คํธ๋ฅผ ํฌํจํ๋ค.
- ์ ๋ฌ : ๋๋ค ํํ์์ ๋ฉ์๋ ์ธ์๋ก ์ ๋ฌํ๊ฑฐ๋ ๋ณ์๋ก ์ ์ฅํ ์ ์๋ค.
- ๊ฐ๊ฒฐ์ฑ : ์ต๋ช ํด๋์ค์๋ ๋ฌ๋ฆฌ ๋ง์ ์์ง๊ตฌ๋ ํ ์ฝ๋๋ฅผ ๊ตฌํํ ํ์๊ฐ ์๋ค.
๋๋ค๋ ํ์ดํ ์ข์ธก์ ํ๋ผ๋ฏธํฐ, ํ์ดํ, ํ์ดํ ์ฐ์ธก์ ๋ฐ๋๋ก ์ด๋ฃจ์ด์ง๋ค. ๋๋ค ํํ์์๋ return์ด ํจ์ถ๋์ด ์์ผ๋ฏ๋ก return์ ๋ช ์ํ์ง ์์๋ ๋๋ค. ๋ํ ์ฌ๋ฌ ํ์ ๋ฌธ์ฅ์ ํฌํจํ ์ ์๋ค.
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());
๋๋ ํํ์์ ๋ฌธ๋ฒ์๋ ๋ ๊ฐ์ง ์คํ์ผ์ด ์๋ค.
- ํํ์ ์คํ์ผ : (parameter) -> expression
- ๋ธ๋ก ์คํ์ผ : (parameter) -> { statement1; statement2; }
์ฃผ์ํด์ผ ํ ๊ฒ์ ํํ์ ์คํ์ผ์๋ return์ด ํจ์ถ๋์ด ์์ง๋ง, ๋ธ๋ก ์คํ์ผ์์๋ ํจ์ถ๋์ด ์์ง ์๋ค. ๋ฐ๋ผ์, ํ์ํ ๊ฒฝ์ฐ์๋ ๋ช ์์ ์ผ๋ก return ๋ฌธ์ ์ฌ์ฉํด์ผ ํ๋ค.
์ด๋์, ์ด๋ป๊ฒ ๋๋ค๋ฅผ ์ฌ์ฉํ ๊น?
ํจ์ํ ์ธํฐํ์ด์ค
ํจ์ํ ์ธํฐํ์ด์ค๋ผ๋ ๋ฌธ๋งฅ์์ ๋๋ค ํํ์์ ์ฌ์ฉํ ์ ์๋ค. ํจ์ํ ์ธํฐํ์ด์ค๋ ์ ํํ ํ๋์ ์ถ์ ๋ฉ์๋๋ฅผ ์ง์ ํ๋ ์ธํฐํ์ด์ค์ด๋ค. ์์๋ฐ๋ ์๋๋, ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ํ๋์ ์ถ์ ๋ฉ์๋๋ง ๊ฐ์ ธ์ผ ํ๋ค. ํจ์ํ ์ธํฐํ์ด์ค๋ก Comparator, Runnable ๋ฑ์ด ์๋ค.
๋๋ค ํํ์์ผ๋ก ํจ์ํ ์ธํฐํ์ด์ค์ ์ถ์ ๋ฉ์๋๋ฅผ ์ง์ ์ ๋ฌํ ์ ์์ผ๋ฏ๋ก, ์ ์ฒด ํํ์์ ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ ์ธ์คํด์ค๋ก ์ทจ๊ธํ ์ ์๋ค.
ํจ์ ๋์คํฌ๋ฆฝํฐ
ํจ์ํ ์ธํฐํ์ด์ค์ ์ถ์ ๋ฉ์๋์ ์๊ทธ๋์ฒ๋ ๋๋ค ํํ์์ ์๊ทธ๋์ฒ์ ๋งค์น๋๋ค. ์ด ๋, ํจ์ํ ์ธํฐํ์ด์ค์ ์ถ์ ๋ฉ์๋ ์๊ทธ๋์ฒ๋ฅผ ํจ์ ๋์คํฌ๋ฆฝํฐ๋ผ๊ณ ํ๋ค.
cf) ์๊ทธ๋์ฒ๋ ๋ฉ์๋ ๋ช ๊ณผ ํ๋ผ๋ฏธํฐ ํ์ , ๊ฐ์๋ฅผ ์๋ฏธํ๋ค. ์ปดํ์ผ์ ํ ๋, ๋ฉ์๋ ์๊ทธ๋์ฒ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฉ์๋๋ฅผ ๋ถ๋ฅํ๋ค.
@FunctionalInterface
ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์ด๋ ธํ ์ด์ ์ด๋ค. ์ด ์ด๋ ธํ ์ด์ ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ์ ์ธํ์ง๋ง, ํจ์ํ ์ธํฐํ์ด์ค, ์ฆ ํ๋์ ์ถ์ ๋ฉ์๋๋ง ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, ์ปดํ์ผ ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค.
๋๋ค ํ์ฉ : ์คํ ์ด๋ผ์ด๋ ํจํด
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์ผ ์ฒ๋ฆฌ ๊ฐ์ ์์์ ์ฒ๋ฆฌํ ๋, ์์์ ์ด๊ณ (์ค์ ), ์ฒ๋ฆฌ, ์์์ ๋ซ๋(์ ๋ฆฌ) ์์๋ก ์ด๋ฃจ์ด์ง๋ค. ์ด ์์๋ก ์ด๋ฃจ์ด์ง ์ฝ๋๋ค์ ์คํ ์ด๋ผ์ด๋ ํจํด์ด๋ผ๊ณ ํ๋ค.
์๋ ์ฝ๋๋ ํ์ผ์ ์ด๊ณ , ํ ์ค์ ๋ฐํํ๊ณ , ๋ซ๋ ์ฝ๋์ด๋ค.
public String processFile() throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {
return br.readLine();
}
}
ํ์ง๋ง, ๋์์ ๋ค๋ฅด๊ฒ ํ๊ณ ์ถ๋ค๋ฉด, ํ์ผ์ ์ด๊ณ ๋ซ๋ ๊ฒ์ ์ ์งํ ์ฑ๋ก ์ฒ๋ฆฌ ๋ถ๋ถ์ ๋ฐ๊ฟ์ผ ํ๋ค.
@FunctionalInterface
public interface BufferedReaderProcessor {
public String process(BufferedReader br) throws IOException;
}
public String processFile(BufferedReaderProcessor brp) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {
return brp.process(br);
}
}
String oneLine = processFile((BufferedReader br) -> br.readLine());
String twoLine = processFile((BufferedReader br) -> br.readLine() + br.readLine());
ํจ์ํ ์ธํฐํ์ด์ค ์ฌ์ฉ
ํจ์ํ ์ธํฐํ์ด์ค์ ์ถ์ ๋ฉ์๋๋ ๋๋ค ํํ์์ ์๊ทธ๋์ฒ๋ฅผ ๋ฌ์ฌํ๊ณ , ํจ์ํ ์ธํฐํ์ด์ค์ ์ถ์ ๋ฉ์๋ ์๊ทธ๋์ฒ๋ฅผ ํจ์ ๋์คํฌ๋ฆฝํฐ๋ผ๊ณ ํ๋ค. ๋ค์ํ ๋๋ค ํํ์์ ์ฌ์ฉํ๋ ค๋ฉด, ๋ค์ํ ํจ์ํ ์ธํฐํ์ด์ค๊ฐ ํ์ํ๋ค.
์๋ฐ์์๋ ๋ง์ ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฉฐ, ๋ค์๊ณผ ๊ฐ๋ค.
Predicate
Predicate<T> ์ธํฐํ์ด์ค๋ test๋ผ๋ ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ฉฐ, test๋ T ํ์์ ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ์ ๋ถ๋ฆฌ์ธ์ ๋ฐํํ๋ค. ์ฐธ ๋๋ ๊ฑฐ์ง์ด๋ผ๋ ๋ช ์ (predicate)์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
public <T> List<T> filter(List<T> list, Predicate<T> p){
List<T> result = new ArrayList<>();
for (T t : list){
if (p.test(t)){
result.add(t);
}
}
return result;
}
List<String> nonEmptyList = filter(Arrays.asList("๋ชจ๋", "์๋ฐ", "์ธ", "์ก์
"), (String s) -> !s.isEmpty());
Consumer
Consumer<T> ์ธํฐํ์ด์ค๋ accept๋ผ๋ ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ฉฐ, accpet๋ T ํ์์ ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ์ void๋ฅผ ๋ฐํํ๋ค. ๋ฐํ๊ฐ ํ์์์ด ๋จ์ง ์๋น(consume)ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
public <T> void forEach(List<T> list, Consumer<T> c){
for (T t : list){
c.accept(t);
}
}
forEach(Arrays.asList("๋ชจ๋", "์๋ฐ", "์ธ", "์ก์
"), (String s) -> System.out.println());
Function
Function<T, R> ์ธํฐํ์ด์ค๋ apply๋ผ๋ ๋ฉ์๋๋ฅผ ์ ์ํ๋ฉฐ, ์ ๋๋ฆญ ํ์ T๋ฅผ ์ธ์๋ก ๋ฐ์์ ์ ๋๋ฆญ ํ์ R ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
public <T, R> List<R> map(List<T> list, Function<T, R> f){
List<R> result = new ArrayList<>();
for (T t : list){
result.add(f.apply(t));
}
return result;
}
List<Integer> l = map(Arrays.asList("๋ชจ๋", "์๋ฐ", "์ธ", "์ก์
"), (String s) -> s.length());
๊ธฐ๋ณธํ ํนํ
์์ ์ธ ํจ์ํ ์ธํฐํ์ด์ค์์๋ ์ ๋ค๋ฆญ์ ๋ด๋ถ ๊ตฌํ ๋๋ฌธ์ ์ฐธ์กฐํ๋ง ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ , ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ณผ์ ์์ ๋ฐ์ฑ๊ณผ ์ธ๋ฐ์ฑ์ด ๋ฐ์ํ๊ฒ ๋๋๋ฐ, ์ถ๊ฐ ๋น์ฉ์ด ์๋ชจ๋๋ค.
๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ์ด IntPredicate, IntConsumer ๊ฐ์ ๊ธฐ๋ณธํ ํนํ ์ธํฐํ์ด์ค์ด๋ค. ์ด ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ฐ์ฑ, ์ธ๋ฐ์ฑ์ด ์ผ์ด๋์ง ์๋๋ค.
IntPredicate evenNumbers = (int i) -> i % 2 != 0;
Predicate<Integer> oddNumbers = (Integer i) -> i % 2 != 0; // ๋ฐ์ฑ, ์ธ๋ฐ์ฑ ๋ฐ์
์์ธ, ๋๋ค, ํจ์ํ ์ธํฐํ์ด์ค์ ๊ด๊ณ
ํจ์ํ ์ธํฐํ์ด์ค๋ ํ์ธ๋ ์์ธ๋ฅผ ๋์ง๋ ๋์์ ํ์ฉํ์ง ์๋๋ค. ์ฆ, ์์ธ๋ฅผ ๋์ง๋ ๋๋ค ํํ์์ ๋ง๋ค๋ ค๋ฉด ํ์ธ๋ ์์ธ๋ฅผ ์ ์ธํ๋ ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ง์ ์ ์ํ๊ฑฐ๋ ๋๋ค๋ฅผ try-catch ๋ธ๋ก์ผ๋ก ๊ฐ์ธ์ผ ํ๋ค. ๋ณดํต์ ํ์๋ฅผ ์ฌ์ฉํ๋ค.
ํ์ ๊ฒ์ฌ, ํ์ ์ถ๋ก , ์ ์ฝ
๋๋ค ํํ์ ์์ฒด์๋ ๋๋ค๊ฐ ์ด๋ค ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋์ง์ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ง ์๋ค. ๋๋ค ํํ์์ ๋ ์ ๋๋ก ์ดํดํ๋ ค๋ฉด ๋๋ค์ ์ค์ ํ์์ ํ์ ํด์ผ ํ๋ค.
ํ์ ๊ฒ์ฌ
๋๋ค๊ฐ ์ฌ์ฉ๋๋ ์ฝํ ์คํธ๋ฅผ ์ด์ฉํด์ ๋๋ค์ ํ์์ ์ถ๋ก ํ ์ ์๋ค. ์ฝํ ์คํธ๋ ๋๋ค๊ฐ ์ ๋ฌ๋ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ๋ ๋๋ค๊ฐ ํ ๋น๋๋ ๋ณ์ ๋ฑ์ ๋งํ๋ค. ๊ทธ ์ฝํ ์คํธ์์ ๊ธฐ๋๋๋ ๋๋ค ํํ์์ ํ์์ ๋์ ํ์์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.

๊ฐ์ ๋๋ค, ๋ค๋ฅธ ํจ์ํ ์ธํฐํ์ด์ค
๋์ ํ์์ด๋ผ๋ ํน์ง ๋๋ฌธ์ ๊ฐ์ ๋๋ค ํํ์์ด๋๋ผ๋ ํธํ๋๋ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ๋ค๋ฅธ ํจ์ํ ์ธํฐํ์ด์ค๋ก ์ฌ์ฉ๋ ์ ์๋ค. ์๋ฅผ ๋ค์ด, Callable๊ณผ PriviledgedAction ์ธํฐํ์ด์ค ๋ชจ๋ ์ธ์๋ฅผ ๋ฐ์ง ์๊ณ , ์ ๋๋ฆญ ํ์ T๋ฅผ ๋ฐํํ๋ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
ํน๋ณํ void ํธํ ๊ท์น
๋๋ค์ ๋ฐ๋์ ์ผ๋ฐ ํํ์์ด ์์ผ๋ฉด, void๋ฅผ ๋ฐํํ๋ ํจ์ ๋์คํฌ๋ฆฝํฐ์ ํธํ๋๋ค. ์๋ฅผ ๋ค์ด, ํํ์์ด void๊ฐ ์๋ ๊ฐ์ ๋ฐํํ์ฌ๋ void๋ฅผ ๋ฐํํ๋ ์ธํฐํ์ด์ค์ ์ถ์ ๋ฉ์๋์ ํธํ๋๋ค.
ํ์ ์ถ๋ก
์๋ฐ ์ปดํ์ผ๋ฌ๋ ๋๋ค ํํ์์ด ์ฌ์ฉ๋ ์ฝํ ์คํธ๋ฅผ ์ด์ฉํด์ ๋๋ค ํํ์๊ณผ ๊ด๋ จ๋ ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ถ๋ก ํ๋ค. ์ฆ, ๋ฌด์์ด ํ๋ผ๋ฏธํฐ๋ก ์ฃผ์ด์ง๊ณ , ๋ฌด์์ผ๋ก ๋ฐํ๋์ด์ผ ํ๋์ง ์ ์ ์์ผ๋ฏ๋ก, ์ปดํ์ผ๋ฌ๋ ๋๋ค์ ์๊ทธ๋์ฒ๋ ์ถ๋ก ํ ์ ์๋ค. ๋ฐ๋ผ์, ๋๋ค ๋ฌธ๋ฒ์์ ์ด๋ฅผ ์๋ตํ ์ ์๋ค.
Comparator<T>๋ฅผ ์ดํด๋ณด๋ฉด, ๋ค์๊ณผ ๊ฐ๋ค.
int compare(T o1, T o2);
Comparator<Apple> c = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());
Comparator<Apple> c = (a1, a2) -> a1.getWeight().compareTo(a2.getWeight());
์ํฉ์ ๋ฐ๋ผ ๋ช ์์ ์ผ๋ก ํ์์ ํฌํจํ๋ ๊ฒ์ด ์ข์ ๋๋ ์๊ณ , ํ์์ ๋ฐฐ์ ํ๋ ๊ฒ์ด ๊ฐ๋ ์ฑ์ ํฅ์์ํฌ ๋๋ ์๋ค. ์ด๋ค ๋ฐฉ๋ฒ์ด ์ข์์ง๋ ๊ฒฐ์ ํ๊ธฐ ๋๋ฆ์ด๋ค.
์ง์ญ ๋ณ์ ์ฌ์ฉ
์ง๊ธ๊น์ง ์ดํด๋ณธ ๋ชจ๋ ๋๋ค ํํ์์ ์ธ์๋ฅผ ์์ ์ ๋ฐ๋ ์์์๋ง ์ฌ์ฉํ๋ค. ํ์ง๋ง ๋๋ค ํํ์์์๋ ์ต๋ช ํจ์๊ฐ ํ๋ ๊ฒ์ฒ๋ผ ์ธ๋ถ ์ง์ญ ๋ณ์๋ฅผ ํ์ฉํ ์๋ ์๋ค. ์ด๋ฅผ ๋๋ค ์บก์ฒ๋ง์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋๋ค์์ ์ง์ญ ๋ณ์์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฐ์ ํ์, ๋๋ค๊ฐ ์ค๋ ๋์์ ์คํ๋๋ค๋ฉด ๋ณ์๋ฅผ ํ ๋นํ ์ค๋ ๋๊ฐ ์ฌ๋ผ์ ธ์ ๋ณ์ ํ ๋น์ด ํด์ ๋์์ ๋ ๋๋ค๋ฅผ ์คํํ๋ ์ค๋ ๋์์๋ ํด๋น ๋ณ์์ ์ ๊ทผํ๋ ค ํ ์ ์๋ค. ๋ฐ๋ผ์ ์๋ฐ ๊ตฌํ์์๋ ์๋ ๋ณ์๊ฐ ์๋๋ผ ์ง์ญ ๋ณ์์ ๋ณต์ฌ๋ณธ์ ์ ๊ณตํ๋ค.
๋ฉ์๋ ์ฐธ์กฐ
๋ฉ์๋ ์ฐธ์กฐ๋ฅผ ์ด์ฉํ๋ฉด ๊ธฐ์กด์ ๋ฉ์๋ ์ ์๋ฅผ ์ฌํ์ฉํด์ ๋๋ค์ฒ๋ผ ์ ๋ฌํ ์ ์๋ค. ๋๋ก๋ ๋๋ค ํํ์๋ณด๋ค ๋ฉ์๋ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๊ฐ๋ ์ฑ์ด ์ข์ผ๋ฉฐ ์์ฐ์ค๋ฌ์ธ ์ ์๋ค.
inventory.sort(
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight())
);
inventory.sort(Comparator.comparing(Apple::getWeight));
๋ฉ์๋ ์ฐธ์กฐ๋ ํด๋์ค::๋ฉ์๋๋ช ์ ํํ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ํน์ ๋ฉ์๋๋ง์ ํธ์ถํ๋ ๋๋ค์ ์ถ์ฝํ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค. ์ค์ ๋ก ํธ์ถํ๋ ๊ฒ์ ์๋๋ฏ๋ก ๊ดํธ๋ ํ์์๋ค.
๋ฉ์๋ ์ฐธ์กฐ๋ฅผ ์๋ก์ด ๊ธฐ๋ฅ์ด ์๋๋ผ ํ๋์ ๋ฉ์๋๋ฅผ ์ฐธ์กฐํ๋ ๋๋ค๋ฅผ ํธ๋ฆฌํ๊ฒ ํํํ ์ ์๋ ๋ฌธ๋ฒ์ผ๋ก ๊ฐ์ฃผํ ์ ์๋ค.
๋ฉ์๋ ์ฐธ์กฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
- ์ ์ ๋ฉ์๋ ์ฐธ์กฐ : ์๋ฅผ ๋ค์ด Integer์ parseInt ๋ฉ์๋๋ Integer::parseInt๋ก ํํํ ์ ์๋ค.
- ๋ค์ํ ํ์์ ์ธ์คํด์ค ๋ฉ์๋ ์ฐธ์กฐ : ์๋ฅผ ๋ค์ด String์ length ๋ฉ์๋๋ String::length๋ก ํํํ ์ ์๋ค.
- ๊ธฐ์กด ๊ฐ์ฒด์ ์ธ์คํด์ค ๋ฉ์๋ ์ฐธ์กฐ : ์๋ฅผ ๋ค์ด Transaction ๊ฐ์ฒด๋ฅผ ํ ๋น๋ฐ์ expensiveTransaction ์ง์ญ ๋ณ์๊ฐ ์๊ณ , Transaction ๊ฐ์ฒด์ getValue ๋ฉ์๋๊ฐ ์๋ค๋ฉด, expensiveTransaction::getValue๋ก ํํํ ์ ์๋ค.

List<String> str = Arrays.asList("a", "b", "A", "B");
str.sort((s1, s2) -> s1.compareToIgnoreCase(s2));
List<String> str = Arrays.asList("a", "b", "A", "B");
str.sort(String::compareToIgnoreCase);
Function<String, Integer> stringToInteger = Integer::parseInt;
Integer apply = stringToInteger.apply("1234");
private boolean startsWithNumber(String string){
return Character.isDigit(string.charAt(0));
}
Predicate<String> startsWithNumber = this::startsWithNumber;
์์ฑ์ ์ฐธ์กฐ
ํด๋์ค๋ช ๊ณผ new ํค์๋๋ฅผ ์ด์ฉํด์ ๊ธฐ์กด ์์ฑ์์ ์ฐธ์กฐ๋ฅผ ๋ง๋ค ์ ์๋ค. ์ด๊ฒ์ ์ ์ ๋ฉ์๋์ ์ฐธ์กฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ๊ณผ ๋น์ทํ๋ค.
Supplier<Apple> c1 = Apple::new;
Apple a1 = c1.get();
Supplier<Apple> c2 = () -> new Apple();
Apple a2 = c2.get();
Function<Integer, Apple> c3 = Apple::new;
Apple a3 = c3.apply(100);
Function<Integer, Apple> c4 = (weight) -> new Apple(weight);
Apple a4 = c4.apply(100);
public List<Apple> map(List<Integer> list, Function<Integer, Apple> f){
List<Apple> result = new ArrayList<>();
for (Integer i : list){
result.add(f.apply(i));
}
return result;
}
List<Integer> weights = Arrays.asList(1, 2, 3, 4);
List<Apple> apples = map(weights, Apple::new);
์์ฑ์ ํ๋ผ๋ฏธํฐ๊ฐ ํ๋์ผ ๋, Function, ์์ฑ์๊ฐ ํ๋ผ๋ฏธํฐ๊ฐ ๋ ๊ฐ์ผ ๋ BiFunction ์ธํฐํ์ด์ค๋ก ์์ฑ๋์ง๋ง, ์ธ ๊ฐ ์ด์์ ์ธ์๋ฅผ ๊ฐ์ง๋ ์์ฑ์์ ์์ฑ์ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, ์ ๊ณตํ๋ ๊ฒ์ด ์์ผ๋ฏ๋ก ์ง์ ๋ง๋ค์ด์ ์ฌ์ฉํด์ผ ํ๋ค.
๋๋ค ํํ์์ ์กฐํฉํ ์ ์๋ ์ ์ฉํ ๋ฉ์๋
์๋ฐ8 API์ ๋ช๋ช ํจ์ํ ์ธํฐํ์ด์ค๋ ๋ค์ํ ์ ํธ๋ฆฌํฐ ๋ฉ์๋๋ฅผ ํฌํจํ๋ค. ๊ฐ๋จํ ์ฌ๋ฌ ๊ฐ์ ๋๋ค ํํ์์ ์กฐํฉํด์ ๋ณต์กํ ๋๋ค ํํ์์ ๋ง๋ค ์ ์๋ค.
Comparator ์กฐํฉ
์ญ์ ๋ ฌ
inventory.sort(Comparator.comparing(Apple::getWeight).reversed());
comparing๋ Comparator<T>๋ฅผ ๋ฐํํ๊ณ , reversed๋ Comparator<T>๋ฅผ ๋ฐํํ๋ค.
Comparator ์ฐ๊ฒฐ
inventory.sort(Comparator.comparing(Apple::getWeight)
.thenComparing(Apple::getColor));
Predicate ์กฐํฉ
Predicate ์ธํฐํ์ด์ค๋ ๋ณต์กํ ํ๋ ๋์ผ์ดํธ๋ฅผ ๋ง๋ค ์ ์๋๋ก negate(๋ถ์ ), and, or ์ธ ๊ฐ์ง ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค. ์๋ฅผ ๋ค์ด '๋นจ๊ฐ์์ด ์๋ ์ฌ๊ณผ'์ฒ๋ผ ํน์ ํ๋ ๋์ผ์ดํธ๋ฅผ ๋ฐ์ ์ํฌ ๋, negate ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
Predicate<Apple> redApple = (Apple a1) -> a1.getColor().equals(Color.RED);
Predicate<Apple> notRedApple = redApple.negate();
๋นจ๊ฐ๊ณ , ๋ฌด๊ฑฐ์ด ์ฌ๊ณผ๋ฅผ ์ํ Predicate๋ ๋ค์๊ณผ ๊ฐ์ด and๋ก ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์๋ค.
Predicate<Apple> redAndHeavyApple = redApple.and(apple -> apple.getWeight() > 100);
๋จ์ํ ๋๋ค ํํ์์ ์กฐํฉํด์ ๋ณต์กํ ๋๋ค ํํ์์ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ด ์ฅ์ ์ด๋ค.
Function ์กฐํฉ
Function<Integer, Integer> f = x -> x + 1;
Function<Integer, Integer> g = x -> x * 10;
Function<Integer, Integer> h = f.andThen(g);
int result = h.apply(3);
์ ๊ฒฐ๊ณผ๋ h = g(f(x))์ด๋ค.
Function<Integer, Integer> f = x -> x + 1;
Function<Integer, Integer> g = x -> x * 10;
Function<Integer, Integer> h = f.compose(g);
int result = h.apply(3);
์ ๊ฒฐ๊ณผ๋ h = f(g(x))์ด๋ค.
'Predicate, Comparator, Function ๋ชจ๋ ํ๋ง ์ก๊ณ , ์ค์ ์ฌ์ฉ์ ์ถ์ ๋ฉ์๋๋ก ํ๋ค'
'๐๐ปโโ๏ธ ๊ธฐ๋ณธํ๋ จ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ชจ๋ ์๋ฐ ์ธ ์ก์ ] ๋ณ๋ ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ฑ๋ฅ (0) | 2024.09.19 |
---|---|
[๋ชจ๋ ์๋ฐ ์ธ ์ก์ ] ์คํธ๋ฆผ (1) | 2024.09.05 |
[๋ชจ๋ ์๋ฐ ์ธ ์ก์ ] ๋์ ํ๋ผ๋ฏธํฐํ ์ฝ๋ ์ ๋ฌํ๊ธฐ (0) | 2024.09.03 |
[Java] ์๋ฐ ๊ธฐ์ด (0) | 2024.08.27 |
[JPA] ์๋ช ์ฃผ๊ธฐ ์ผ์น ์ ์ฐธ์กฐ ๋ณ๊ฒฝ์ ์ํ์ฑ (0) | 2024.08.19 |