All :L
[Java] ์ปฌ๋ ์ (Collection) ๋ณธ๋ฌธ
๋ฐ์ํ
๐ List ๊ณ์ด
1๏ธโฃ ์๋ฃ๊ตฌ์กฐ
- ๋ฐ์ดํฐ ๊ฐ์ ๋ชจ์, ๋ ๋ฐ์ดํฐ ๊ฐ์ ๊ด๊ณ, ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ์ ์ ์ฉํ ์ ์๋ ํจ์๋ ๋ช ๋ น์ ์๋ฏธ
2๏ธโฃ ๋ฐฐ์ด
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ ๊ตฌ์กฐ
- homeogeneous collection : ๋์ผํ ๋ฐ์ดํฐ ํ์ ๋ง ๊ด๋ฆฌ ๊ฐ๋ฅ
- Polymorphism
- Object๋ฅผ ์ด์ฉํ๋ฉด ๋ชจ๋ ๊ฐ์ฒด ์ฐธ์กฐ ๊ฐ๋ฅ → Collection Framework
- ๋ด์ ๋ ํธ๋ฆฌ, ๋นผ๋ผ ๋ Object๋ก๋ง
- ๋ฐํ์์ ์ค์ ๊ฐ์ฒด์ ํ์ ํ์ธ ํ ์ฌ์ฉํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์
- Generic์ ์ด์ฉํ ํ์
ํ์
- ์ปดํ์ผ ํ์์ ์ ์ฅํ๋ ค๋ ํ์ ์ ํ → ํ๋ณํ์ ๋ฒ๊ฑฐ๋ก์ ์ ๊ฑฐ
3๏ธโฃ Collection Framework
- java.util ํจํค์ง
- ๋ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ ์ ๊ณต → DB์ฒ๋ผ CRUD ๊ธฐ๋ฅ ์ค์
- Collection framework ํต์ฌ interface
- List : ์ ๋ ฅ ์์๊ฐ ์๋ ๋ฐ์ดํฐ ์งํฉ
- Set : ์ ๋ ฅ ์์๋ฅผ ์ ์งํ์ง ์๋ ๋ฐ์ดํฐ์ ์งํฉ
- Map : key์ value์ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์งํฉ
- Collection interface (CRUD)
4๏ธโฃ Collection Framework - List
- ํน์ง
- ์ ๋ ฅ ์์๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ
- ์ ๋ ฅ ์์๊ฐ ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ์ ์ค๋ณต ํ๋ฝ
- ๋ฐฐ์ด๊ณผ ArrayList
- ์ฅ์
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ์ ์๋ฃ ๊ตฌ์กฐ๋ก ๊ฐ๋จํ๋ฉฐ ์ฌ์ฉ์ด ์ฌ์
- ์ ๊ทผ ์๋๊ฐ ๋น ๋ฆ
- ๋จ์
- ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ X, ์ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ํด ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค๊ณ ๋ณต์ฌํด์ผ ํจ
- ๋น ์์ฐจ์ ๋ฐ์ดํฐ์ ์ถ๊ฐ, ์ญ์ ์ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆผ
- ์ฅ์
- LinkedList
- ๊ฐ ์์๋ฅผ Node๋ก ์ ์ํ๊ณ Node๋ ๋ค์ ์์์ ์ฐธ์กฐ ๊ฐ๊ณผ ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋จ
- ๊ฐ ์์๊ฐ ๋ค์ ์์์ ๋งํฌ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ฉฐ ์ฐ์์ ์ผ๋ก ๊ตฌ์ฑ๋ ํ์ X
- ๊ฒฐ๋ก
- ํน์ ํด๋์ค๊ฐ ์ข๊ณ ๋์จ์ด ๋๋ ์ฉ๋์ ์ ํฉํ๊ฒ ์ฌ์ฉํด์ผ ํจ
- ์๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ฌ์ฉํ ๊ฒฝ์ฐ ํฐ ์ฐจ์ด X
- ์ ์ ์ธ ๋ฐ์ดํฐ ํ์ฉ, ๋จ์ํ ๋ฐ์ดํฐ ์กฐํ → ArrayList
- ๋์ ์ธ ๋ฐ์ดํฐ ์ถ๊ฐ, ์ญ์ ๊ฐ ๋ง์ ์์ → LinkedList
- ์๋ฃ ์ญ์ ์ ์ฃผ์์ฌํญ
- index๋ฅผ ์ด์ฉํ for๋ฌธ
- ์์๊ฐ ์ญ์ ๋๋ฉด size๊ฐ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ index ์ฐจ๊ฐ ํ์
- ๊ฑฐ๊พธ๋ก ์ ๊ทผํ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ํด๊ฒฐ
- forEach ๋ฌธ์ฅ์ Collection ํฌ๊ธฐ๊ฐ ๋ถ๋ณํด์ผํจ.
- index๋ฅผ ์ด์ฉํ for๋ฌธ
๐ Set ๊ณ์ด
1๏ธโฃ Set interface
- ์ ๋ ฅ ์์ ๊ด๋ฆฌ X, ์ฃผ๋จธ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ํํ
- ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ณํ ์์ X, ์ค๋ณต ํ์ฉ X
๐ Map ๊ณ์ด
1๏ธโฃ Map interface
- Key์ Value๋ฅผ ํ๋์ Entry๋ก ๋ฌถ์ด์ ๋ฐ์ดํฐ ๊ด๋ฆฌ
- Key : Object ํํ๋ก ๋ฐ์ดํฐ ์ค๋ณต์ ํ๋ฝ X
- Value : Object ํํ๋ก ๋ฐ์ดํฐ ์ค๋ณต ํ๋ฝ O
๐ ์ ๋ ฌ
1๏ธโฃ ์ ๋ ฌ
- ์์๋ฅผ ํน์ ๊ธฐ์ค์ ๋ํ ๋ด๋ฆผ์ฐจ์ ๋๋ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฐฐ์นํ๋ ๊ฒ
- ํฌ๊ธฐ๋ฅผ ๋น๊ตํ ์ ์๋ ์์๋ฅผ ๊ฐ์ง๋ Colection๋ค๋ง ์ ๋ ฌ ๊ฐ๋ฅ
- List ๊ณ์ด
- Set์์๋ SortedSet์ ์์ ๊ฐ์ฒด
- Map์์๋ SortedMap์ ์์ ๊ฐ์ฒด(key ๊ธฐ์ค)
- Collections์ sort()๋ฅผ ์ด์ฉํ ์ ๋ ฌ
- sort(List
<T>
list)
- sort(List
2๏ธโฃ Comparator์ ํ์ฉ
- ๊ฐ์ฒด๊ฐ Comparable์ ๊ตฌํํ๊ณ ์์ง ์๊ฑฐ๋ ์ฌ์ฉ์ ์ ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ๋ ฌํ๋ ค๋ ๊ฒฝ์ฐ
- sort(List
<T>
list, Comparator<? Super T> c) public interface Comparator<T> { int compare(T o1, T o2); } public class StringLengthComparator implements Comparator<String> { @Override public int compare(String o1, String o2) { int len1 = o1.length(); int len2 = o2.length(); return Integer.compare(len1, len2); } } public void StringLengthSort() { Collections.sort(names, new StringLengthComparator()); System.out.println(names); }
- 1ํ์ฑ ๊ฐ์ฒด ์ฌ์ฉ ์ anonymous inner class ์ฌ์ฉ
- ํด๋์ค ์ ์, ๊ฐ์ฒด ์์ฑ ํ ๋ฒ์ ์ฒ๋ฆฌ
Collections.sort(names, new StringLengthComparator()); Collections.sort(names, new Comparator<String>() { @Override public int compare(String o1, String o2) { return Integer.compare(o1.length(), o2.length()); } });
- ๋๋ค ํํ์ ์ด์ฉ
Collections.sort(names, (o1, o2) -> { return Integer.compare(o1.length(), o2.length()); });
๐ Lambda ํํ์
1๏ธโฃ Lambda ์
- ํจ์์ ํ๋ก๊ทธ๋๋ฐ์ ํํ๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋ ๋ธ๋ก
- ๊ธฐ์กด์ anonymous inner class๋ฅผ ์ด์ฉํ ์ฒ๋ฆฌ ๋ฐฉ์์ ๊ฐ๊ฒฐํ๊ฒ ์ฒ๋ฆฌ
2๏ธโฃ Lambda ํํ์
- ํ๊ฒ ํ์
๋๋ ํจ์ํ ์ธํฐํ์ด์ค
- Lambda ์์ด ํ ๋น๋๋ ์ธํฐํ์ด์ค๋ฅผ Lambda ์์ ํ๊ฒ ํ์ ์ด๋ผ ํจ.
- ํ๊ฒ ํ์ ์ abstract ๋ฉ์๋๊ฐ ๋ฐ๋์ ํ๋๋ง ์กด์ฌํด์ผ ํจ(default, static ๋ฑ ๋ฌด๊ด)
- @FunctionalInterface
- ์ปดํ์ผ๋ฌ๊ฐ ํ๋์ abstract method๋ง ์์์ ์ฒดํฌ
- ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฐ์ → ์์ ์ ์ธ programming์ ์ํ option
- abstract method๊ฐ 2๊ฐ ์ด์ ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ ์ฌ์ ํ ์ต๋ช ์ inner class ์ฌ์ฉ
- ๊ธฐ๋ณธ Lambda ์ : @FunctionalInterface์ ๋ํ ๊ตฌํ์ฒด ์์ฑ๋ฒ
- (type variable_name[,…]) → {์คํ๋ฌธ;};
3๏ธโฃ Lambda ์คํ ๋ธ๋ก์์์ ๋ณ์ ์ฐธ์กฐ
- Lambda ์ ๋ด๋ถ์์์ this๋ ์ธ๋ถ ํด๋์ค์ instacne
- ์ธ๋ถ ํด๋์ค์ member ๋ณ์ : ์ ๊ทผ์ ํ์์ ์ ์ฝ ์์ด ์ฌ์ฉ ๊ฐ๋ฅ
- ์ธ๋ถ ๋ฉ์๋์ local ๋ณ์ : final ํค์๋๊ฐ ์ถ๊ฐ๋ ๊ฒ์ผ๋ก ๋์ → read only
4๏ธโฃ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- java.util.function package
- ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด์งํฅ์ java ํ๋ก๊ทธ๋๋ฐ์ ๋ฉ์๋์ ๊ตฌ์กฐ์ ์ด๋ฆ์ด ์ค์
- ์ผ๋ฐ์ ์ธ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ํจ์์ ํ์ ์ ๊ตฌ์กฐ์ ์ด๋ฉฐ ์ด๋ฆ์ด ๋ถํ์
5๏ธโฃ ํ์ค API
- ๊ธฐ๋ณธ ์ ๊ณต API ์ข
๋ฅ
- ์์ฃผ ์ฌ์ฉ๋๋ ํจ์์ ํ์ค interface๋ฅผ java.util.function package์ ์ ์
- ์ฃผ๋ก ๋ฉ์๋ ๋๋ ์์ฑ์์ parameter๋ก Lambda์์ ์ ๊ณตํ๊ธฐ ์ํจ
- Consumer ๊ณ์ด
- parameter๋ ์์ผ๋ฉฐ return์ด ์๋ ํํ
- parameter ํ์ ์ ๋ฐ๋ผ ๋ค์ํ consumer ์กด์ฌ
- Supplier ๊ณ์ด
- parameter๋ ์์ผ๋ฉฐ return์ด ์๋ ํํ
- retrun ํ์ ์ ๋ฐ๋ผ ๋ค์ํ supplier ์กด์ฌ
- Function ๊ณ์ด
- parameter์ return ๊ฐ์ด ์๋ ํํ
- parameter์ return type์ ๋ฐ๋ผ ๋ค์ํ ์ธํฐํ์ด์ค ์กด์ฌ
- ์ฃผ๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํด ์ฐ์ฐ์ ์ํํ ํ ์ํ๋ ํ์ ์ผ๋ก ๋ฐํํ๋ ์ญํ
- Operator ๊ณ์ด
- function ๊ณ์ด๊ณผ ์ ์ฌ: parameter์ return ๊ฐ์ ๊ฐ์ง
- Predicate ๊ณ์ด
- parameter๋ฅผ ๋ฐ๊ณ boolean ํ์ ์ ๋ฆฌํด
6๏ธโฃ ๋ฉ์๋ ์ฐธ์กฐ์ ์์ฑ์ ์ฐธ์กฐ
- ๋๋ค ์คํ๋ฌธ ๋ด๋ถ์์ ๋ค๋ฅธ ํจ์ ํ๋๋ง์ ์คํํ๋ ๊ฒจ์ฐ :: ์ฐ์ฐ์๋ฅผ ์ด์ฉํด ๊ธฐ์กด ๋ฉ์๋ ์ฐธ์กฐ
- <์์ ์>::<ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๋ ์์ ์์ ๋ฉ์๋>
- ํ๋ผ๋ฏธํฐ์ ์ธ์คํด์ค ๋ฉ์๋ ์ฐธ์กฐ
- ๊ฐ์ฒด์ ํด๋์ค :: ์ธ์คํด์ค ๋ฉ์๋
- ์ฒซ ๋ฒ์ฌ ํ๋ผ๋ฏธํฐ๋ ๋ฉ์๋์ ์์ ์
- ๋๋จธ์ง ํ๋ผ๋ฏธํฐ๋ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ ์์๋๋ก ์ ๋ฌ
- ์ ์ ๋ฉ์๋ ์ฐธ์กฐ
- ํด๋์ค::์ ์ ๋ฉ์๋
- ๋ชจ๋ ํ๋ผ๋ฏธํฐ๊ฐ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ์์๋๋ก ์ ๋ฌ๋จ
- ํน์ ๊ฐ์ฒด์ instance์ ๋ฉ์๋ ์ฐธ์กฐ
- ๊ฐ์ฒด :: ์ธ์คํด์ค ๋ฉ์๋ ํํ
- ๊ฐ์ฒด์ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉฐ ํ๋ผ๋ฏธํฐ๋ ๋ฉ์๋์ ๊ทธ๋๋ก ์ ๋ฌ๋จ
- ์์ฑ์ ์ฐธ์กฐ
- ํด๋์ค๋ช :: new์ ํ์์ผ๋ก ์์ฑ์ ์ฐธ์กฐ
- ํ๋ผ๋ฏธํฐ์ ๊ฐ์, ํ์ ์ ์ํด ํธ์ถ๋๋ ์์ฑ์ ๊ฒฐ์
๐ Stream API
1๏ธโฃ Stream
- JDK 8์ ์ถ๊ฐ๋ java.util.stream package
- ๋ฐฐ์ด ๋ฐ Collection์ ์์๋ฅผ ํ๋์ฉ ์ฐธ์กฐํด์ ์ฒ๋ฆฌํ๋ ๋ชฉ์
- ๋๋ค์ ๋ด๋ถ ๋ฐ๋ณต์๋ฅผ ์ด์ฉํด ์ปฌ๋ ์ ์ ๋ค๋ฃจ๋ ์ฝ๋ ๊ฐ๊ฒฐํ
- Stream API ์ญํ ๋ฐ ํน์ง
- ์ปฌ๋ ์ , ๋ฐฐ์ด ๋ฑ ๋ฐ์ดํฐ ์์ค์ ๋ํ ๊ณตํต๋ ์ ๊ทผ ๋ฐฉ์ ์ ๊ณต
- ์์ฌ์ด ๋ณ๋ ฌ ์ฒ๋ฆฌ
2๏ธโฃ Stream ์๋ฃ ์ฒ๋ฆฌ
- ๋งต/๋ฆฌ๋์ค ๋ชจ๋ธ ์ง์
- ๋งต: ๋ฐ์ดํฐ๋ฅผ ์์ ๋จ์๋ก ๋๋์ด ์ฒ๋ฆฌ
- ๋ฆฌ๋์ค: ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์์ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์์ฑ
- ์ค๊ฐ ์ฒ๋ฆฌ๋ค๊ณผ ์ต์ข
์ฒ๋ฆฌ๋ฅผ ์กฐํฉํด ์ฌ์ฉ
- ์ค๊ฐ ์ฒ๋ฆฌ: ๋งคํ, ํํฐ๋ง, ์ ๋ ฌ ๋ฑ ๊ฐ๊ณต ์ฒ๋ฆฌ
- ์ต์ข ์ฒ๋ฆฌ: ๋ฐ๋ณต, ์นด์ดํ , ํ๊ท , ์ดํฉ ๋ฑ ์ง๊ณ ์ฒ๋ฆฌ
- ๊ฐ๊ฐ์ ์ค๊ฐ ์ฒ๋ฆฌ๋ ์๋ก์ด ์คํธ๋ฆผ์ ๋ฆฌํดํ์ฌ builder ํจํด ์ ์ฉ
- ๊ธฐ์กด ์คํธ๋ฆผ์ ๋ด์ฉ์ ์์ ํ์ง ์์
- ์ต์ข ์ฒ๋ฆฌ๋ ์ต์ข ์ ์ผ๋ก ์ํ๋ ๊ฐ์ ๋ฐํ → ํ๋ฒ ์ต์ข ์ฒ๋ฆฌ ๋๋ ์คํธ๋ฆผ ์ฌ์ฌ์ฉ X
- Stream์ ์ข
๋ฅ์ ํ๋
- java.util.stream package์ ์ ์
- ์ข
๋ฅ
- Stream - ๊ฐ์ฒด ์์์ ๋ํ ์ฒ๋ฆฌ
- IntStream, LongStream, DoubleStream - ๊ฐ๊ฐ int, long, double ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ํ๋
- Collection, ๋ฐฐ์ด, File, Random ๋ฐ Stream ํด๋์ค์ static method๋ก ์์ฑ
3๏ธโฃ ์ค๊ฐ ์ฒ๋ฆฌ
- ํํฐ๋ง
- ์๋ฅด๊ธฐ
- ์ ๋ ฌ
- ๋งคํ(๋ณํ) - ์คํธ๋ฆผ์ ์์๋ฅผ ๋ค๋ฅธ ์์๋ก ๋์ฒดํ๋ ์์
- ์กฐํ(์ฃผ์)
4๏ธโฃ ์ต์ข ์ฒ๋ฆฌ
- ๋ฐ๋ณต - forEach()
- ๋งค์นญ
- ํต๊ณ - count(), sum() …
- ์ง๊ณ(aggregate)
- ์ฌ์ฉ์ ์ ์ ์ง๊ณ ์ฒ๋ฆฌ - reduce()
- ์กฐ์ฌ - findFirst(), findAny()
- ๊ฒฐ๊ณผ ๋ชจ์ผ๊ธฐ - collect()
- ๊ฒฐ๊ณผ ๋ชจ์ผ๊ธฐ - ๋ถํ (partioningBy())๊ณผ ๊ทธ๋ฃนํ(groupingBy())
๋ฐ์ํ
'STUDY > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ํ์ผ ์ ์ถ๋ ฅ (File/IO) (0) | 2024.11.03 |
---|---|
[Java] ์์ธ (Exception) (0) | 2024.11.01 |
[Java] ์ ๋ค๋ฆญ (Generic) (2) | 2024.10.28 |
[Java] ์ธํฐํ์ด์ค (Interface) (0) | 2024.10.26 |
[Java] ๋คํ์ฑ (Polymorphism) (0) | 2024.10.24 |
Comments