2022. 5. 11. 22:18ใJAVA/์๋ฐ์ ์ ์
1๏ธโฃ Comparator์ Comparable
์ด์ ์ Arrays.sort()๋ฅผ ํธ์ถํ๋ฉด ์์์ ์ ๋ ฌ๋์๋๋ฐ ์ด๊ฑด ์ฌ์ค Comparatorํด๋์ค์ Comparable ์ ๊ตฌํ์ ์ํด ์ ๋ ฌ๋์๋ ๊ฒ์ด๋ค.
Comparator์ Comparable์ ๋ชจ๋ ์ธํฐํ์ด์ค๋ก ์ปฌ๋ ์ ์ ์ ๋ ฌํ๋๋ฐ ํ์ํ ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ ์์ผ๋ฉฐ, Comparable ์ ๊ตฌํํ๊ณ ์๋ ํด๋์ค๋ค์ ๊ฐ์ ํ์ ์ ์ธ์คํด์ค๋ผ๋ฆฌ ์๋ก ๋น๊ตํ ์ ์๋ ํด๋์ค๋ค, ์ฃผ๋ก Integer์ ๊ฐ์ wrapper ํด๋์ค์ String, Date, File ๊ณผ ๊ฐ์ ๊ฒ๋ค์ด๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฆ์ฐจ์, ์ฆ ์์๊ฐ์์๋ถํฐ ํฐ ๊ฐ์ ์์ผ๋ก ์ ๋ ฌ๋๋๋ก ๊ตฌํ๋์ด ์๋ค.
-> ๊ทธ๋์ Comparable ์ ๊ตฌํํ ํด๋์ค๋ ์ ๋ ฌ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
compare()์ compareTo()๋ ์ ์ธ ํํ์ ์ด๋ฆ๋ง ์ด์ง ๋ค๋ฅผ ๋ฟ ๋ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ๋ค๋ ๊ธฐ๋ฅ์ ๋ชฉ์ ์ผ๋ก ๊ณ ์๋ ๊ฒ์ด๋ค.
compareTo()์ ๋ฐํ๊ฐ์ int์ด์ง๋ง ์ค์ ๋ก๋ ๋น๊ตํ๋ ๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ผ๋ฉด 0, ๋น๊ตํ๋ ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์์, ํฌ๋ฉด ์์๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํํด์ผ ํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก compare()๋ ๊ฐ์ฒด๋ฅผ ๋น๊ตํด์ ์์, 0, ์์ ์ค์ ํ๋๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํํด์ผ ํ๋ค.
Comparable : ๊ธฐ๋ณธ ์ ๋ ฌ ๊ธฐ์ค์ ๊ตฌํํ๋๋ฐ ์ฌ์ฉ
Comparator : ๊ธฐ๋ณธ ์ ๋ ฌ ๊ธฐ์ค ์ธ์ ๋ค๋ฅธ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ณ ์ ํ ๋ ์ฌ์ฉ
-> Comparable ์ ๊ตฌํํ ํด๋์ค๋ค์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ง๋ง, ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค๋๊ฐ ์๋๋ฉด ๋ค๋ฅธ ๊ธฐ์ค์ ์ํด์ ์ ๋ ฌ๋๋๋ก ํ๊ณ ์ถ์ ๋ Comparator๋ฅผ ๊ตฌํํด์ ์ ๋ ฌ๊ธฐ์ค์ ์ ๊ณตํ ์ ์๋ค.
-> Arrays.sort()๋ ๋ฐฐ์ด์ ์ ๋ ฌํ ๋, Comparator๋ฅผ ์ง์ ํด์ฃผ์ง ์์ผ๋ฉด ์ ์ฅํ๋ ๊ฐ์ฒด ์ ๊ตฌํ๋ ๋ด์ฉ์ ๋ฐ๋ผ ์ ๋ ฌ๋๋ค. (์ฃผ๋ก Comparable ์ ๊ตฌํํ ํด๋์ค ๊ฐ์ฒด๋ค.)
-> String์ Comparable ๊ตฌํ์ ๋ฌธ์์ด์ด ์ฌ์ ์์ผ๋ก ์ ๋ ฌ๋๋๋ก ์์ฑ๋์ด ์๋ค. ๋ฌธ์์ด์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ๊ณต๋ฐฑ, ์ซ์, ๋๋ฌธ์, ์๋ฌธ์์ ์์ผ๋ก ์ ๋ ฌ๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
-> CASE_INSENSTIVE_ORDER ๋ฅผ ์ด์ฉํ๋ฉด ๋ฌธ์์ด์ ๋์๋ฌธ์ ๊ตฌ๋ถ์์ด ์ ๋ ฌํ ์ ์๋ค.
-> String์ ๊ธฐ๋ณธ ์ ๋ ฌ์ ๋ฐ๋๋ก (๋ด๋ฆผ์ฐจ์)์ผ๋ก ํ๋ ๋ฐฉ๋ฒ์ String์ ๊ตฌํ๋ compareTo()์ ๊ฒฐ๊ณผ์ -1์ ๊ณฑํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
2๏ธโฃ HashSet
HashSet์ Set์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฅ ๋ํ์ ์ธ ์ปฌ๋ ์ ์ด๋ค. Set์ธํฐํ์ด์ค์ ํน์ง๋๋ก HashSet์ ์์๋ฅผ ์ ์งํ์ง ์๊ณ ์ค๋ณต๋ ์์๋ฅผ ์ ์ฅํ์ง ์๋๋ค.
HashSet์ ์๋ก์ด ์์๋ฅผ ์ถ๊ฐํ ๋๋ add ๋ฉ์๋๋ addAll๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๋ฐ ๋ง์ผ HashSet์ ์ด๋ฏธ ์ ์ฅ๋์ด ์๋ ์์์ ์ค๋ณต๋ ์์๋ฅผ ์ถ๊ฐํ๊ณ ์ ํ๋ค๋ฉด ์ด ๋ฉ์๋๋ค์ false๋ฅผ ๋ฐํํจ์ผ๋ก์จ ์ค๋ณต๋ ์์์ด๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์คํจํ๋ค๋ ๊ฒ์ ์๋ฆฐ๋ค.
ArrayList์ ๊ฐ์ด List ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ปฌ๋ ์ ๊ณผ ๋ฌ๋ฆฌ HashSet์ ์ ์ฅ์์๋ฅผ ์ ์งํ์ง ์์ผ๋ฏ๋ก ์ ์ฅ์์๋ฅผ ์ ์งํ๊ณ ์ ํ๋ค๋ฉด LinkedHashSet์ ์ฌ์ฉํด์ผํ๋ค.
-> ๊ฒฐ๊ณผ์์ ์ ์ ์๋ฏ์ด ์ค๋ณต๋ ๊ฐ๋ค์ ์ ์ฅ๋์ง ์์ ๊ฒ์ ํ์ธํ ์ ์๋ค.
add ๋ฉ์๋๋ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ ๋ HashSet์ ์ด๋ฏธ ๊ฐ์ ๊ฐ์ฒด๊ฐ ์๋ค๋ฉด ์ค๋ณต์ผ๋ก ๊ฐ์ฃผํ๊ณ , ์ ์ฅํ์ง ์๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ์ด ์คํจํ๋ค๋ ๊ฒ์ ์๋ฏธํ๊ธฐ ์ํด false๋ฅผ ๋ฐํํ๋ค.
์ด๋ 1์ ๋๋ฒ ์ถ๋ ฅ๋์๋๋ฐ, ๋๋ค 1์ด์ง๋ง ํ๋๋ String์ธ์คํด์ค์ด๊ณ , ํ๋๋ Integer์ธ์คํด์ค๋ก ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด์ด๋ฏ๋ก ์ค๋ณต์ผ๋ก ๊ฐ์ฃผํ์ง ์๋๋ค.
Set์ ๊ตฌํํ ์ปฌ๋ ์ ํด๋์ค๋ List๋ฅผ ๊ตฌํํ ์ปฌ๋ ์ ํด๋์ค์ ๋ฌ๋ฆฌ ์์๋ฅผ ์ ์งํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฅํ ์์์ ๋ค๋ฅผ ์ ์๋ค.
-> Math.random()์ ์ฌ์ฉํด์ ์คํํ ๋ ๋ง๋ค ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๊ณ , HashSet์ ์ฑ์ง์ ์ด์ฉํด์ ๋ก๋๋ฒํธ๋ฅผ ๋ง๋๋ ์์ ์ด๋ค.
๋ฒํธ๋ฅผ ํฌ๊ธฐ์์ผ๋ก ์ ๋ ฌํ๊ธฐ ์ํด์๋ Collection ํด๋์ค์ sort(List list)๋ฅผ ์ฌ์ฉํ๋ค.
sort๋ฉ์๋๋ ์ธ์๋ก List ์ธํฐํ์ด์ค ํ์ ์ ํ์๋ก ํ๊ธฐ ๋๋ฌธ์ LinkedListํด๋์ค์ ์์ฑ์ LinkedList๋ฅผ ์ด์ฉํด์ HashSet์ ์ ์ฅ๋ ๊ฐ์ฒด๋ค์ LinkedList์ ๋ด์์ ์ฒ๋ฆฌํ๋ค.
-> HashSet์ add ๋ฉ์๋๋ ์๋ก์ด ์์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์ ๊ธฐ์กด์ ์ ์ฅ๋ ์์์ ๊ฐ์ ๊ฒ์ธ์ง ํ๋ณํ๊ธฐ ์ํด ์ถ๊ฐํ๋ ค๋ ์์์ equals()์ hashcode()๋ฅผ ํธ์ถํ๊ธฐ ๋๋ฌธ์ equals()์ hashCode()๋ฅผ ๋ชฉ์ ์ ๋ง๊ฒ ์ค๋ฒ๋ผ์ด๋ฉ ํด์ผํ๋ค.
(์ฌ๊ธฐ์๋ ์ด๋ฆ๊ณผ ๋์ด๊ฐ ๊ฐ์ผ๋ฉด ๊ฐ์ ๊ฐ์ฒด๋ก ์ธ์ํ ๊ฒ์ด๋ค.)
Personํด๋์ค์์ ๋ ์ธ์คํด์ค์ name๊ณผ age๊ฐ ๊ฐ์ผ๋ฉด true ๋ฅผ ๋ฐํํ๋๋ก equals()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ค.
๊ทธ๋ฆฌ๊ณ hashCode()๋ Stringํด๋์ค์ hashCode()๋ฅผ ์ด์ฉํด์ ๊ตฌํํ๋ค.
Stringํด๋์ค์ hashCode()๋ ์ ๊ตฌํ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํ์ฉํ๋ฉด ๊ฐ๋จํ ์ฒ๋ฆฌํ ์ ์๋ค.
-> ์ด ์์ ๋ ๋ ๊ฐ์ HashSet์ ์ ์ฅ๋ ๊ฐ์ฒด๋ค์ ๋น๊ตํด์ ํฉ์งํฉ, ๊ต์งํฉ, ์ฐจ์งํฉ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค,
๊ทผ๋ฐ retainAll, addAll, removeAll ๋ฉ์๋๋ฅผ ํ์ฉํ๋ฉด ์ข ๋ ์ฝ๊ฒ ํฉ์งํฉ, ๊ต์งํฉ, ์ฐจ์งํฉ์ ๊ตฌํ ์ ์๊ธดํ๋ค.
3๏ธโฃ TreeSet
TreeSet์ ์ด์ง ๊ฒ์ ํธ๋ฆฌ (binary search tree)๋ผ๋ ์๋ฃ๊ตฌ์กฐ์ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ปฌ๋ ์ ํด๋์ค์ด๋ค.
์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ ์ ๋ ฌ, ๊ฒ์, ๋ฒ์๊ฒ์์ ๋์ ์ฑ๋ฅ์ ๋ณด์ด๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
TreeSet์ญ์ Set์ธํฐํ์ด์ค๋ก ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ์ค๋ณต๋ ๋ฐ์ดํฐ์ ์ ์ฅ์ ํ์ฉํ์ง ์์ผ๋ฉฐ ์ ๋ ฌ๋ ์์น์ ์ ์ฅํ๋ฏ๋ก ์ ์ฅ์์๋ฅผ ์ ์งํ์ง ์์๋ ๋๋ค.
์ด์ง ํธ๋ฆฌ๋ ๋งํฌ๋๋ฆฌ์คํธ์ฒ๋ผ ์ฌ๋ฌ ๊ฐ์ node๊ฐ ์๋ก ์ฐ๊ฒฐ๋ ๊ตฌ์กฐ๋ก ๊ฐ ๋ ธ๋์ ์ต๋ 2๊ฐ์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ ์ ์์ผ๋ฉฐ, ๋ฃจํธ๋ผ๊ณ ๋ถ๋ฆฌ๋ ํ๋์ ๋ ธ๋์์๋ถํฐ ์์ํด์ ๊ณ์ ํ์ฅํด ๋๊ฐ ์ ์๋ค.
์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ ๋ถ๋ชจ๋ ธ๋์ ์ผ์ชฝ์๋ ๋ถ๋ชจ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ ๊ฐ์ ์์๋ ธ๋๋ฅผ ์ค๋ฅธ์ชฝ์๋ ํฐ ๊ฐ์ ์์๋ ธ๋๋ฅผ ์ ์ฅํ๋ ์ด์ง ํธ๋ฆฌ์ด๋ค.
์ปดํจํฐ๋ ์์์ ๊ฐ์ ๋น๊ตํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ TreeSet์ ์ ์ฅ๋๋ ๊ฐ์ฒด๊ฐ Comparable์ ๊ตฌํํ๋๊ฐ ์๋๋ฉด TreeSet์๊ฒ Comparator๋ฅผ ์ ๊ณตํด์ ๋ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ ๋ฐฉ๋ฒ์ ์๋ ค์ค์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด TreeSet์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ๋ ์์ธ๊ฐ ๋ฐ์ํ๋ค.
TreeSet์ ์ ๋ ฌ๋์ํ๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์ ๋จ์ผ ๊ฐ ๊ฒ์๊ณผ ๋ฒ์๊ฒ์(์๋ฅผ ๋ค๋ฉด 3๊ณผ 7์ฌ์ด์ ๋ฒ์์ ์๋ ๊ฐ์ ๊ฒ์)ํ ๋ ๋น ๋ฅด๋ค.
์ ์ฅ๋ ๊ฐ์ ๊ฐ์์ ๋น๋กํด์ ๊ฒ์ ์๊ฐ์ด ์ฆ๊ฐํ๊ธฐ๋ ํ์ง๋ง ๊ฐ์ ๊ฐ์๊ฐ 10๋ฐฐ ์ฆ๊ฐํด๋ ํน์ ๊ฐ์ ์ฐพ๋๋ฐ ํ์ํ ๋น๊ต ํ์๊ฐ 3~4๋ฒ๋ง ์ฆ๊ฐํ ์ ๋๋ก ๊ฒ์ ํจ์จ์ด ๋ฐ์ด๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๊ทผ๋ฐ ํธ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ ์ ์ฅ ์์น๋ฅผ ์ฐพ์์ ์ ์ฅํด์ผํ๊ณ , ์ญ์ ํ๋ ๊ฒฝ์ฐ ํธ๋ฆฌ์ ์ผ๋ถ๋ฅผ ์ฌ๊ตฌ์ฑํด์ผํ๋ฏ๋ก ๋งํฌ๋ ๋ฆฌ์คํธ๋ณด๋ค ๋ฐ์ดํฐ์ ์ถ๊ฐ/์ญ์ ์๊ฐ์ ๋ ๊ฑธ๋ฆฐ๋ค. ๋์ ๋ฐฐ์ด์ด๋ ๋งํฌ๋ ๋ฆฌ์คํธ์ ๋นํด ๊ฒ์๊ณผ ์ ๋ ฌ๊ธฐ๋ฅ์ด ๋ ๋ฐ์ด๋๋ค.
์ด์ง ๊ฒ์ ํธ๋ฆฌ (binary search tree)
- ๋ชจ๋ ๋ ธ๋๋ ์ต๋ ๋๊ฐ์ ์์๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ์ผ์ชฝ ์์๋ ธ๋์ ๊ฐ์ ๋ถ๋ชจ๋ ธ๋์ ๊ฐ๋ณด๋ค ์๊ณ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋์ ๊ฐ์ ๋ถ๋ชจ๋ ธ๋์ ๊ฐ๋ณด๋ค ์ปค์ผ ํ๋ค.
- ๋ ธ๋์ ์ถ๊ฐ ์ญ์ ์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. (์์ฐจ์ ์ผ๋ก ์ ์ฅํ์ง ์์ผ๋ฏ๋ก)
- ๊ฒ์(๋ฒ์ ๊ฒ์)๊ณผ ์ ๋ ฌ์ ์ ๋ฆฌํ๋ค.
- ์ค๋ณต๋ ๊ฐ์ ์ ์ฅํ์ง ๋ชปํ๋ค.