1.1 ์๋ฐ๋?
1.1.1 ์๋ฐ์ ํน์ง
- ๊ฐ์ฒด ์งํฅ
- ํด๋์ค์ ์์ ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ํ์ฅ์ฑ์ด ์ฐ์ํ๋ฉฐ ์ฌํ์ฉํ๊ธฐ ์ฌ์ด ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํจ.
- ํ๋ซํผ ๋
๋ฆฝ์ฑ
- ํ๋ก๊ทธ๋จ์ด ์๋ฐ ๊ฐ์๋จธ์ ์์ ์คํ๋๋ฏ๋ก ํ๋ก๊ทธ๋จ ์์ฒด๋ ์ด์์ฒด์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋ ์ ์์.
- ๋ฐ์ด๋ ์์ฝ ์์คํ
- ์ฐ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋ฏธ๋ค์จ์ด(DBMS ๋ฑ)๊ฐ ๋ค์ ์กด์ฌํจ์ผ๋ก ํจ์จ์ ์ธ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค.
1.1.3 ์๋ฐ๊ฐ ์คํ๋๋ ์์
์๋ฐ ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ณ ์คํํ๊ธฐ๊น์ง์ ์์ฃผ ๊ฐ๋จํ ํ๋ฆ ์ค๋ช
1. ์๋ฐ์์ค์ฝ๋๋ฅผ ์์ฑ
2. javac ์ปค๋งจ๋๋ฅผ ์คํํ์ฌ ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ `ํด๋์ค ํ์ผ`์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ค๊ฐ์ฝ๋๋ฅผ ์์ฑํ๋ค.
3. javac ์ปค๋งจ๋๋ฅผ ์คํํ์ฌ java vm์ด ํด๋์ค ํ์ผ์ ํด์ํ์ฌ ์ฒ๋ฆฌํ๋ค.
2.4 ๋ช ๋ช ๊ท์น
2.4.1 ํด๋์ค์ ๋ณ์๋ '์นด๋ฉ ์ผ์ด์ค', ์์๋ ์ค๋ค์ดํฌ ์ผ์ด์ค(_)
- ๊ทธ ์ค์์๋ ํด๋์ค๋ช ์ ์ ๋ ๋ฌธ์๋ฅผ ๋๋ฌธ์๋กํ๋ 'ํ์ค์นผ ์ผ์ด์ค'๋ก ํ๋ค.
๋ณ์๋ช ๋ค์๋ '_'์ ๋ถ์ด์ง ์๋๋ค.
๋ณ์๋ ๋ช ์ฌ - ๋ฉ์๋๋ ๋์ฌ๋ก ๋ช ๋ช ํ๋ค.
์ด๋ฅผ ์ด๊ธฐ๊ธฐ ์ฌ์ด ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ ๋ฐ๋ก 'boolean'์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ด๋ค. 'is???'๋ผ๊ณ ํ๋ ๊ฒฝ์ฐ ๋์ฌํํ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์๋ชป๋ ๋ช ๋ช ์ ํด๋นํ๋ค. ๋ฉ์๋์๋ง isStarted ์ด๋ฐ ์์ ๋ช ๋ช ์ ์ฌ์ฉํ์. boolean ํ๋ ๋ณ์์๋ started๋ผ๊ณ ํํํ ์ ์๋ค.
'๋ถ๊ธธํ ๋์'๊ฐ ๋๋ ์ด๋ฆ์ ์ฃผ์ํ์.
์ญํ ์ด ์ ๋งคํ๊ฑฐ๋ ๋ง์ ์ญํ ์ ์ง๋๊ณ ์๋ ๋๋จธ์ง ๋น๋ํ๋ ํด๋์ค๊ฐ ์ด ๊ฒฝ์ฐ์ ํด๋นํ๋ค.
๋๋ฌด ๋ง์ ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ํฌ์ฉํ ์ ์๋ ์ด๋ฆ์ ์ข์ง ์๋ค. ์ญํ ์ ๋ ๋จ์ ์ผ๋ก ํํํ ์ ์๋ ๋ช ๋ช ์ด ์๋์ง ๊ณ ๋ฏผํด๋ณด์.
3.1 ๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ
3.1.5 ๋ํผ ํด๋์ค
๊ธฐ๋ณธํ์ ๊ฐ์ฒด๊ฐ ์๋๋ผ ๋จ์ํ ๊ฐ์ด๋ฉฐ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์๋๋ค.
๊ทธ๋ฌ๋ ํ๋ก๊ทธ๋จ ์์์๋ ๊ธฐ๋ณธํ ๊ฐ์ ๋ํด ์กฐ์์ด ํ์ํ ์ํฉ์ด ๋ง์ด ์๋ค. ์ด ๋ ์๋ฐ๋ ๊ธฐ๋ณธํ์ '๋ํผ ํด๋์ค'๋ฅผ ํ์ฉํ๋ค.
int์ ์ ์ธ ํ ์ด๊ธฐ ๊ฐ์ 0์ด๋ค. ๊ทธ๋ฌ๋ Integer์ ์ ์ธํ ์ด๊ธฐ๊ฐ์ null์ด๋ผ๋ ์ฐจ์ด๊ฐ ์๋ค.
์ด๋ฌํ ์ฐจ์ด๋ฅผ ์ ์ฉํ๊ฒ ์ด์ฉํ ์ ์๋ ๊ณณ์ ๋ฐ๋ก 'ํต์ '์ด๋ค.
HTTP ํต์ ์ผ๋ก ์ทจ๋ํ ๊ฐ์ด๋ค ์ค์ ํ์ผ๋ก๋ถํฐ ์ฝ์ด๋ค์ธ ๊ฐ์ ์ทจ๋ํ์ฌ ์ง์ ํ๊ณ ์ทจ๋ํ์ง ๋ชปํ๋ฉด null๋ก ๋๊ณ ์ถ์ ๋๊ฐ ์๋ค. ์ด๋ intํ์ ์ง์ ํ์ง ์์๋ 0์ด๊ธฐ ๋๋ฌธ์ ์ค์ ๊ฐ์ด 0์ธ ๊ฒ์ธ์ง ์ง์ ํ์ง ์์ ๊ฐ์ธ์ง ๊ตฌ๋ณํ ์ ์๋ค.
ํ์ง๋ง '๋ํผ ํด๋์ค'๋ ๊ฐ์ ํ ๋นํ์ง ์์ผ๋ฉด null์ด๊ธฐ ๋๋ฌธ์ ๊ตฌ๋ณํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ์ฐจ์ด๋ฅผ ํํํ๊ธฐ ์ํด ํต์ , ํ์ผ ๋ฑ์ผ๋ก ๋ถํฐ ์ฝ์ด๋ค์ธ ๋ณ์๋ ๋ํผํ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
5. ๋๋ค์๊ณผ Stream API
Stream API์๋ `์์ฑ` -> `์ค๊ฐ ์์ ` -> `์ค๊ฐ์์ ` -> .. .. -> `์ข ๋ฃ ์์ ` ์์์ ์ธ ๊ฐ์ง ์์ ์ด ์กด์ฌ.\
5.1.2๋๋ค์์ ์ฌ์ฉํด๋ณด์.
sort()๋ฅผ ์ํด Comparator์ธํฐํ์ด์ค์ compare ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๊ธฐ์กด์๋ ์ต๋ช ํด๋์ค๋ก ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํด์ผ๋ง ํ๋ค.
ํ์ง๋ง, ์๋ฐ 8์์๋ ์ด๋ฅผ ๊ฐ๋จํ๊ฒ () -> {} ํ์์ผ๋ก ์์ฑํ ์ ์๋ค.
์ด๋ `์ธํฐํ์ด์ค์ ๊ตฌํ์ ์ฌ๋ฌ ๊ฐ์ง ์ ์ธ์ ๊ฑธ์ณ์ ์์ฑํ๋ ๋์ "์ฒ๋ฆฌ์ ๋ด์ฉ๋ง ๋ํ๋ด๋ ์"๋ง ์์ฑํ๋ฉด ๋๋ค.`๋ผ๋ ํน์ฑ์ด๋ค.
์ด๊ฒ์ ํจ๊ณผ๋ก Stream API์ ์กฐํฉํ์ ๋ ์ฝ๋๋ฅผ ๋์ฑ ์๊ธฐ ์ฝ๊ณ ๊ฐ๊ฒฐํ๊ฒ ํด์ฃผ๋ ํจ๊ณผ๊ฐ ์๋ค.
5.1.3 ๋ฉ์๋ ์ฐธ์กฐ (๋ฉ์๋ ๋ ํผ๋ฐ์ค)
๋ฉ์๋ ์ฐธ์กฐ๋ '๋์ ํ ๊ณณ์ ํจ์ํ ์ธํฐํ์ด์ค์ ์๋ ์ธ์์ ์์ ํ์ ์ด ์ผ์นํ๊ณ ์๋ค๋ฉด ๋ฉ์๋๋ฅผ ๋์ ํ ์ ์๋ค' ๋ผ๋ ๊ท์น์ด๋ค.
์ธ์๋ก [์ธ์์ ์์ ํ์ ์ด ์ผ์นํ๋ค๋ฉด] ์ฌ์ฉ๊ฐ๋ฅ..!
5.2.3 Map์ผ๋ก๋ถํฐ Stream ์์ฑํ๊ธฐ (feat. Entry)
Set<Map.Entry<String, String>> entries = myMap.entrySet();
Stream<Map.Entry<String, String>> stream = entries.stream();
stream.forEach(e-> System.out.println("KEY : " + e.getKey() + " Value : " + e.getValue()));
Map์ ๋ด๋ถ์ Entry๊ฐ์ฒด๋ก ๊ด๋ฆฌ๋๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค. ์ด๋ฅผ Setํํ๋ก ๊บผ๋ด์ด ์ฌ์ฉํ ์ ์๊ณ ๊ฐ๊ฐ key, value๋ก ๋๋ ์ ๊ด๋ฆฌํ๋ฏ๋ก stream์ผ๋ก ๋ง๋ค์ด์ ์ถ๋ ฅ๋ ๊ฐ๋ฅํ๋ค.
Set<String> strings = myMap.keySet();
Collection<String> values = myMap.values();
์ถ๊ฐ์ ์ผ๋ก Map์ key๋ Setํํ๋ก ๊ด๋ฆฌํ๊ณ value๋ Collection ๊ฐ์ฒด ํํ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
5.2.4 ์ซ์ ๋ฒ์๋ก๋ถํฐ Stream ์์ฑํ๊ธฐ
์ปฌ๋ ์ ์ด๋ ๋ฐฐ์ด, Map๊ฐ์ ๊ฐ์ฒด ๋ง๊ณ ๋ ํ๋ฆฌ๋ฏธํฐ๋ธํ ์ซ์๊ฐ์ผ๋ก๋ Stream์ ์์ฑํ ์ ์๋ค. ๊ทธ ์ข ๋ฅ์๋ IntStream, LongStream, DoubleStream ๋ฑ์ด ์๋ค.
IntStream stream = IntStream.range(1, 5); // 1~4๊น์ง ์คํธ๋ฆผ ์์ฑ.
Stream.forEach(System.out::println);
5.3.1 ์์๋ฅผ ์นํํ๋ ์ค๊ฐ ์์
๋ฉ์๋๋ช | ์ฒ๋ฆฌ๋ด์ฉ | ์ธ์ | ๋ฐํ๊ฐ |
map | ์์๋ฅผ ๋ณ๋์ ๊ฐ์ผ๋ก ์นํ | Function(์ธ์ Stream, ๋ฐํ๊ฐ ์์์ ํ์ ) | Stream<๋ณํ ํ์ ํ์ > |
mapToInt | ์์๋ฅผ int๊ฐ์ผ๋ก ์นํ | Function(์ธ์ Stream, ๋ฐํ๊ฐ์ด int) | IntStream |
mapToDouble | ์์๋ฅผ double๊ฐ์ผ๋ก ์นํ | Function(์ธ์ Stream, ๋ฐํ๊ฐ์ด double) | DoubleStream |
...๋๋จธ์ง ํ๋ฆฌ๋ฏธํฐ๋ธ ํ์ ๋ค.. |
mapToInt, mapToDouble์ ์ฌ์ฉํจ์ผ๋ก์จ ๋์ค์ sum, avg์ ๊ฐ์ด ์์น ์ฒ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํ ์ ์๊ฒ ๋๋ค.
# flatMap ์ฌ์ฉํด๋ณด๊ธฐ
flatMap์ Stream์ ๊ฒฐํฉํ์ฌ ํ๋์ Stream์ผ๋ก ์ทจ๊ธํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฉ์๋์ด๋ค.
๋ง์ฝ, map๋ฉ์๋์ ๋ฐํ๊ฐ์ด '์ปฌ๋ ์ ' ์ด๋ '๋ฐฐ์ด'์ด ๋ ๊ฒฝ์ฐ '๊ฐ๋ณ์ ์ปฌ๋ ์ '์ ์ทจ๊ธํ๊ฒ ๋๋ค.
ํ์ง๋ง flatMap์ ์ฌ์ฉํ๋ฉด ์ด๊ฒ๋ค์ ํ๋์ Stream์ผ๋ก ์ทจ๊ธํ ์ ์๊ฒ ๋๋ค.
class Node{
private List<String> listString;
public Node() {
listString = new ArrayList<>();
}
public List<String> getListString() {
return listString;
}
}
List<Node> listNode = new ArrayList<>();
// ์ผ๋ฐ์ ์ธ ๋งต ์ฌ์ฉ์ List์ Stream์ ๋ฐํ
Stream<List<String>> listStream = listNode.stream().map(list -> list.getListString());
// flatMap์ฌ์ฉ ์ flatํ String์ Stream์ ๋ฐํ
Stream<String> stringStream = listNode.stream().flatMap(list -> list.getListString().stream());
flatMap์ ์ฌ์ฉํ๋ฉด ์ปฌ๋ ์ ์์ ๋ค์ ํ๋ฒ ๊ฐ์ ๊บผ๋ด์ค๋ ๊ณผ์ ์ ๊ฑฐ์น์ง ์๊ณ ์ ๋ฐ๋ก ๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.
5.3.2/3 ์์๋ฅผ ๊ฑธ๋ฌ๋ด๊ณ ์ ๋ ฌํ๋ ์ค๊ฐ ์์ ๋ค
filter, limit, distinct ๋ฅผ ํตํด ์กฐ๊ฑด์ ๋ง๋ ์์๋ค๋ง ๊ฑธ๋ฌ๋ผ ์ ์๋ค.
์์๋ฅผ ์ ๋ ฌํ๋ ๋ฉ์๋๋ sorted ๋ฉ์๋์ด๋ค. Comparator๋ฅผ ๊ตฌํํด์ ๋์ํ๊ฒ ๋๋ค.
Compartor์ ๋ฐํ๊ฐ์ด..
0๋ณด๋ค ์์ ์์์ธ ๊ฒฝ์ฐ -> ์ธ์ 1์ ๊ฐ์ฒด๊ฐ ์์ ๋ฐฐ์น๋๋ค. (๋ด๋ฆผ์ฐจ์)
0๋ณด๋ค ํฐ ์์์ธ ๊ฒฝ์ฐ -> ์ธ์ 2์ ๊ฐ์ฒด๊ฐ ์์ ๋ฐฐ์น๋๋ค. (์ค๋ฆ์ฐจ์)
0์ธ ๊ฒฝ์ฐ -> ์์๊ฐ ๋ณํ์ง ์๋๋ค. (๊ทธ๋๋ก)
5.4 Stream์ ๋ํ '์ข ๋ฃ ์์ '
* ๋ฐ๋ณต ์ฒ๋ฆฌ๋ฅผ ์ค์ํ๋ ์ข ๋ฃ์์
forEach๋ ์ธ์๋ก Consumer๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ๋ฐ์ ์ก์ ๋ง ์ทจํ๊ณ ๋ฆฌํด๊ฐ์ ๋๋ ค์ฃผ์ง ์๋๋ค.
* ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฆฌํด์ ์ถ์ถํ๋ ์ข ๋ฃ์์
collect๋ ๋ชจ๋ ์์๋ฅผ ์ค์บ๋ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์์ ๋ฐํํ๋ ์์ ์ ์ํํ๋ค.
```์์ ์ฝ๋
.collect(Collectors.toList());
.collect(Collectors.joining(","));
.groupingBy(Student::getScore)); ๋ฅผ ์ฌ์ฉํ๋ฉด
๊ฐ์ ํค๋ก ๊ฐ์ง๊ณ ํ์๋ค์ ๊ฐ์ ๊ฐ์ง๋ Mapํํ๋ฅผ ๋ง๋ค ์ ์๋ค.
```
toArray๋ ๋ชจ๋ ์์๋ฅผ ๋ฐฐ์ด๋ก ๋ณํํ๋ค.
reduce๋ ๊ฐ์ ์ง์ฝํ๋ค.
5.4.4 ์ง๊ณ ์ฒ๋ฆฌ๋ฅผ ์ค์ํ๋ ์ข ๋ฃ ์์
count, min, max, sum, average ๋ฑ์ ์ํํ ์ ์์ผ๋ฉฐ count๋ฉ์๋๋ฅผ ์ ์ธํ๊ณ Optional ๋ฐํ๊ฐ์ ๊ฐ์ง๋ค.
5.5.3 List๋ Map์ ๋ํ ํจ์จ์ ์ธ ์ฒ๋ฆฌ
removeIf๋ฅผ ํ์ฉํด์ Stream์ธ์คํด์ค ์์ด ์ํ๋ ์์๋ฅผ ์ ๊ฑฐ์ํฌ ์ ์๊ฒ ๋์๋ค.
replaceAll์ ํ์ฉํด์ Stream์ธ์คํด์ค ์์ด ๋ชจ๋ ์์๋ฅผ ์ํ๋ ์์๋ก ๋ฐ๊ฟ ์ ์๊ฒ ๋์๋ค.
5.6 StreamAPI๋ฅผ ์ฌ์ฉํ์ฌ List์ด๊ธฐํ ํ๊ธฐ.
IntStream intStream = IntStream.of(1, 512, 123, 52, 23, 12);
Stream<Integer> boxed = IntStream.of(1, 512, 123, 52, 23, 12).boxed();
// collect๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ IntStream์ด ์๋ Stream<>ํํ๋ก ๋ณํ์ด ํ์ํ๋ฏ๋ก boxed()๋ฅผ ์ฌ์ฉํจ.
List<Integer> collect = boxed.collect(Collectors.toList());
// ๋ฐฐ์ด๋ก ๋ณํํ๊ธฐ.
Integer[] integers = boxed.toArray(num -> new Integer[num]);
Stream์ ํ์ฉํ์ฌ for๋ฌธ ์์ด List๋ ๋ฐฐ์ดํํ๋ก ๋ง๋ค ์ ์๋ค.
'๐์ฝ์ ์ฑ ์ ๋ฆฌ > ์๋ฐ ๋ง์คํฐ๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฐ ๋ง์คํฐ๋ถ] 12์ฅ : ๋์์ธํจํด ์ฆ๊ธฐ๊ธฐ - ๊ตฌ์กฐ (0) | 2021.10.02 |
---|---|
[์๋ฐ ๋ง์คํฐ๋ถ] 12์ฅ ๋์์ธํจํด ์ฆ๊ธฐ๊ธฐ - ์์ฑ (0) | 2021.09.22 |
[์๋ฐ ๋ง์คํฐ๋ถ] 10์ฅ ๊ฐ์ฒด์งํฅ ์ฆ๊ธฐ๊ธฐ (0) | 2021.09.15 |
[์๋ฐ ๋ง์คํฐ๋ถ] 9์ฅ ๋ ์ง ์ฒ๋ฆฌ ๊ณต๋ตํ๊ธฐ (0) | 2021.09.14 |
[์๋ฐ ๋ง์คํฐ๋ถ] 6์ฅ ์์ธ ๊ณต๋ตํ๊ธฐ (0) | 2021.09.12 |