Java๋ ์๋ ํด๋์ค ์ค์ฌ ์ธ์ด์ง๋ง, Java 8 ์ดํ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์์๊ฐ ๊ฐํ๋์๋ค.
์ด ํ๋ฆ์ ์ดํดํ๋ ค๋ฉด ๋ด๋ถ ํด๋์ค → ๋๋ค์ → ์คํธ๋ฆผ ์์๋ก ๋ณด๋ ๊ฒ์ด ์ข๋ค.
1. ๋ด๋ถ ํด๋์ค(Inner Class)
ํด๋์ค ๋ด๋ถ์ ์ ์๋ ํด๋์ค๋ฅผ ๋ด๋ถ ํด๋์ค๋ผ๊ณ ํ๋ค.
class Outer {
class Inner {
void print() {
System.out.printIn("Inner Class");
}
}
}
1) ๋ด๋ถ ํด๋์ค ์ข ๋ฅ
- ์ธ์คํด์ค ๋ด๋ถ ํด๋์ค
- static ๋ด๋ถ ํด๋์ค
- ์ง์ญ ๋ด๋ถ ํด๋์ค
- ์ต๋ช ํด๋์ค
2) ์ธ์คํด์ค ๋ด๋ถ ํด๋์ค
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
- ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ํ์
- ์ธ๋ถ ๋ฉค๋ฒ ์ ๊ทผ ๊ฐ๋ฅ
2) static ๋ด๋ถ ํด๋์ค
static class Inner {}
- ์ธ๋ถ ๊ฐ์ฒด ์์ด ์์ฑ ๊ฐ๋ฅ
- static ๋ฉค๋ฒ๋ง ์ ๊ทผ ๊ฐ๋ฅ
3) ์ง์ญ ๋ด๋ถ ํด๋์ค
๋ฉ์๋ ๋ด๋ถ์์ ์ ์
void method() {
class Local{}
}
4) ์ต๋ช ํด๋์ค
์ด๋ฆ ์๋ ํด๋์ค
Runnable r = new Runnable() {
@Override
public void run() {
System.out.printIn("์คํ");
}
}
ํ ๋ฒ๋ง ์ฌ์ฉํ ํด๋์ค์ ์ ํฉํ๋ค.
2. ๋๋ค์(Lambda Expression)
์ต๋ช ํด๋์ค๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ํํํ ๋ฌธ๋ฒ์ด๋ค.
1) ๋๋ค์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
(๋งค๊ฐ ๋ณ์) → { ์คํ๋ฌธ }
ex.
(int a, int b) → a + b
3. ํจ์ํ ์ธํฐํ์ด์ค
๋๋ค๋ ๋ฐ๋์ ํจ์ํ ์ธํฐํ์ด์ค์ ํจ๊ป ์ฌ์ฉ๋๋ค.
ํจ์ํ ์ธํฐํ์ด์ค๋, ์ถ์ ๋ฉ์๋๊ฐ ํ๋๋ง ์๋ ์ธํฐํ์ด์ค๋ค.
@FunctionalInterface
interface MyFunctino {
void run();
}
๋๋ค๋ ์ด ํ ๊ฐ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ค.
1) ์์ฃผ ์ฐ์ด๋ ํจ์ํ ์ธํฐํ์ด์ค
| ์ธํฐํ์ด์ค | ์ค๋ช |
| Consumer | ์ ๋ ฅ O, ๋ฐํ X |
| Supplier | ์ ๋ ฅ X, ๋ฐํ O |
| Function | ์ ๋ ฅ O, ๋ฐํ O |
| Predicate | boolean ๋ฐํ |
4. ์คํธ๋ฆผ(Stream)
์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ํจ์ํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ API๋ค.
List<String> list = Arrays.asList("A", "B", "C");
list.stream()
.forEach(System.out::printIn);
1) ์คํธ๋ฆผ์ ํน์ง
- ์๋ณธ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์
- ์ค๊ฐ ์ฐ์ฐ + ์ต์ข ์ฐ์ฐ ๊ตฌ์กฐ
- ๋ด๋ถ ๋ฐ๋ณต ๋ฐฉ์
2) ์คํธ๋ฆผ ์ฒ๋ฆฌ ๋จ๊ณ
- ์์ฑ
- ์ค๊ฐ ์ฐ์ฐ(filter, map ๋ฑ)
- ์ต์ข ์ฐ์ฐ(forEach, collect ๋ฑ)
list.stream()
.filter(s -> s.equals("A"))
.map(String::toLowerCase)
.collect(Collectors.toList());
5. ์ฃผ์ ์คํธ๋ฆผ ์ฐ์ฐ
1) ์ค๊ฐ ์ฐ์ฐ
| ๋ฉ์๋ | ์ค๋ช |
| filter | ์กฐ๊ฑด ํํฐ๋ง |
| map | ๋ณํ |
| sorted | ์ ๋ ฌ |
| distinct | ์ค๋ณต ์ ๊ฑฐ |
2) ์ต์ข ์ฐ์ฐ
| ๋ฉ์๋ | ์ค๋ช |
| forEach | ๋ฐ๋ณต |
| collect | ์์ง |
| count | ๊ฐ์ |
| reduce | ์ง๊ณ |
6. ๋ด๋ถ ๋์ ๊ฐ๋
๊ธฐ์กด ๋ฐ๋ณต๋ฌธ
for (String s : list) {}
์คํธ๋ฆผ
- ๋ด๋ถ ๋ฐ๋ณต
- ์ง์ฐ ์ฐ์ฐ(Lazy Ealuation)
- ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ฐ๋ฅ
list.parallelStream();
7. ์ ์ฒด ํ๋ฆ ์ ๋ฆฌ
๋ด๋ถ ํด๋์ค → ์ต๋ช ํด๋์ค → ๋๋ค์ → ์คํธ๋ฆผ
- ๋ด๋ถ ํด๋์ค : ํด๋์ค ์์ ํด๋์ค
- ์ต๋ช ํด๋์ค : ์ผํ์ฑ ๊ตฌํ
- ๋๋ค์ : ์ต๋ช ํด๋์ค์ ๊ฐ๊ฒฐํ
- ์คํธ๋ฆผ : ๋๋ค ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ API
'Back-End > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 14. ์๋ฐ ์ ์ถ๋ ฅ(Java I/O) (0) | 2026.02.12 |
|---|---|
| 13. ์์ธ ์ฒ๋ฆฌ(Exception Handling) (0) | 2026.02.12 |
| 11. ์ปฌ๋ ์ ํ๋ ์์ํฌ(Collection Framework) (0) | 2026.02.12 |
| 10. ๊ธฐ๋ณธ ํด๋์ค(Core Class) (0) | 2026.02.12 |
| 09. ์ธํฐํ์ด์ค(Interface) (0) | 2026.02.11 |