26 ~ 33
์์ดํ
26. ๋ก ํ์
์ ์ฌ์ฉํ์ง ๋ง๋ผ
ํต์ฌ ์ ๋ฆฌ
ยท ๋ก ํ์ ์ ์ฌ์ฉํ๋ฉด ๋ฐํ์์ ์์ธ๊ฐ ๋ ์ ์์ผ๋ ์ฌ์ฉํ๋ฉด ์ ๋๋ค.
- ๋ก ํ์ ์ ์ ๋ค๋ฆญ์ด ๋์ ๋๊ธฐ ์ด์ ์ฝ๋์์ ํธํ์ฑ์ ์ํด ์ ๊ณต๋ ๋ฟ์ด๋ค.
ยท Set<Object>๋ ์ด๋ ํ์ ์ ๊ฐ์ฒด๋ ์ ์ฅํ ์ ์๋ ๋งค๊ฐ๋ณ์ํ ํ์ ์ด๊ณ , Set<?>๋ ๋ชจ์ข ์ ํ์ ๊ฐ์ฒด๋ง ์ ์ฅํ ์ ์๋ ์์ผ๋์นด๋ ํ์ ์ด๋ค. ๊ฐ๊ฐ์ ์์์ ๊ฐ์ฒด๋ฅผ ํ์ฉํ๋ ๋งค๊ฐ๋ณ์ํ ํ์ , ๋นํ์ ์ ์์ผ๋์นด๋ ํ์ ์ผ๋ก ๋ถ๋ฅผ ์ ์๋ค.
- ์ด๋ค์ ๋ก ํ์ ์ธ Set์ ์ ๋ค๋ฆญ ํ์ ์์คํ ์ ์ํ์ง ์๋๋ค. Set<Object>์ Set<?>์ ์์ ํ์ง๋ง, ๋ก ํ์ ์ ์์ ํ์ง ์๋ค.
์ ๋ค๋ฆญ ๊ด๋ จ ์ฉ์ด ์ ๋ฆฌ
ยท ํด๋์ค์ ์ธํฐํ์ด์ค ์ ์ธ์ ๋ํด ํ์ ๋งค๊ฐ๋ณ์๊ฐ ์ฐ์ด๋ฉด ์ด๋ฅผ ์ ๋ค๋ฆญ ํด๋์ค ํน์ ์ ๋ค๋ฆญ ์ธํฐํ์ด์ค๋ผ ํ๋ค.
ex) List ์ธํฐํ์ด์ค๋ ์์ ํ์ ์ ๋ํ๋ด๋ ํ์ ๋งค๊ฐ๋ณ์ E๋ฅผ ๋ฐ๋๋ค.
ยท ์ ๋ค๋ฆญ ํด๋์ค์ ์ ๋ค๋ฆญ ์ธํฐํ์ด์ค๋ฅผ ํตํ์ด ์ ๋ค๋ฆญ ํ์ ์ด๋ผ ํ๋ค.
- ๊ฐ๊ฐ์ ์ ๋ค๋ฆญ ํ์ ์ ์ผ๋ จ์ ๋งค๊ฐ๋ณ์ํ ํ์ ์ ์ ์ํ๋ค. ๋จผ์ ํด๋์ค(ํน์ ์ธํฐํ์ด์ค) ์ด๋ฆ์ด ๋์ค๊ณ ์ด์ด์ ๊บพ์ ๊ดํธ ์์ ์ค์ ํ์ ๋งค๊ฐ๋ณ์๋ค์ ๋์ดํ๋ค.
ex) List<String>์ ์์์ ํ์ ์ด String์ธ ๋ฆฌ์คํธ๋ฅผ ๋ปํ๋ ๋งค๊ฐ๋ณ์ํ ํ์ ์ด๋ค. ์ฌ๊ธฐ์ ์ ๊ท(formal) ํ์ ๋งค๊ฐ๋ณ์ E์ ํด๋นํ๋ ์ค์ ํ์ ๋งค๊ฐ๋ณ์๋ String์ด๋ค.
ยท ๋ก ํ์ (raw type)์ด๋ ์ ๋ค๋ฆญ ํ์ ์์ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์์ ๋๋ฅผ ๋งํ๋ค.
- ๋ก ํ์ ์ ์ฉ๋: ์ ๋ค๋ฆญ์ด ๋๋ํ๊ธฐ ์ ์ฝ๋์ ํธํ๋๋๋ก ํ๊ธฐ ์ํด ์ ๊ณต๋๋ค.
ex) List<E>์ ๋ก ํ์ ์ List์ด๋ค.
๋ก ํ์ ์ ๋ฌธ์ ์
์ ๋ค๋ฆญ์ ์ง์ํ๊ธฐ ์ ์ปฌ๋ ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํ๋ค.
ยท ๋ฌธ์ ์ : ์ด ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์๋ก ๋์ฅ ๋์ ๋์ ์ ๋ฃ์ด๋ ์๋ฌด ์ค๋ฅ ์์ด ์ปดํ์ผ๋๊ณ ์คํ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ ์ ๋ค์ ๊บผ๋ด๊ธฐ ์ ์๋ ์ค๋ฅ๋ฅผ ์์์ฑ์ง ๋ชปํ๋ค.
- ์ค๋ฅ๋ ๊ฐ๋ฅํ ๋ฐ์ ์ฆ์, ์ด์์ ์ผ๋ก๋ ์ปดํ์ผํ ๋ ๋ฐ๊ฒฌํ๋ ๊ฒ์ด ์ข๋ค.
๋ก ํ์ ์ ๋ฌธ์ ์ ํด๊ฒฐ - ์ ๋ค๋ฆญ์ ์ฌ์ฉ
์ ๋ค๋ฆญ์ ํ์ฉํ๋ฉด ์ด ์ ๋ณด๊ฐ ์ฃผ์์ด ์๋ ์ ์ธ ์์ฒด์ ๋ น์๋ ๋ค.
์ด๋ ๊ฒ ์ ์ธํ๋ฉด ์ปดํ์ผ๋ฌ๋ stamp์๋ Stamp์ ์ธ์คํด์ค๋ง ๋ฃ์ด์ผ ํจ์ ์ปดํ์ผ๋ฌ๊ฐ ์ธ์งํ๋ค. ๊ทธ๋ฆฌ๊ณ , ์๋ฑํ ์ธ์คํด์ค๋ฅผ ๋ฃ์ผ๋ ค ํ๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉฐ ๋ฌด์์ด ์๋ชป๋๋์ง ์ ํํ ์๋ ค์ค๋ค.
- ์ค์ ๋ก ํ์ ์์ BigDecimal์ฉ ์ปฌ๋ ์ ์ BigInteger๋ฅผ ๋ฃ๋ ๋ฑ์ ์ค์๋ ์ข ์ข ์ผ์ด๋๋ค.
ยท ์ปดํ์ผ๋ฌ๋ ์ปฌ๋ ์ ์์ ์์๋ฅผ ๊บผ๋ด๋ ๋ชจ๋ ๊ณณ์ ๋ณด์ด์ง ์๋ ํ๋ณํ์ ์ถ๊ฐํ์ฌ ์ ๋ ์คํจํ์ง ์์์ ๋ณด์ฅํ๋ค.
ยท ๋ก ํ์ ์ ์ฐ๋ฉด ์ ๋ค๋ฆญ์ด ์๊ฒจ์ฃผ๋ ์์ ์ฑ๊ณผ ํํ๋ ฅ์ ๋ชจ๋ ์๊ฒ ๋๋ฏ๋ก, ์ ๋ ์ฌ์ฉํ๋ฉด ์๋๋ค.
์์์ ๊ฐ์ฒด๋ฅผ ํ์ฉํ๋ ๋งค๊ฐ๋ณ์ํ ํ์
ยท List์ List<Object>์ ์ฐจ์ด์ : List๋ ์ ๋ค๋ฆญ ํ์ ์์ ์์ ํ ๋ฐ์ ๋บ ๊ฒ์ด๊ณ , List<Object>๋ ๋ชจ๋ ํ์ ์ ํ์ฉํ๋ค๋ ์์ฌ๋ฅผ ์ปดํ์ผ๋ฌ์ ๋ช ํํ ์ ๋ฌํ ๊ฒ์ด๋ค.
ยท ๋งค๊ฐ๋ณ์๋ก List๋ฅผ ๋ฐ๋ ๋ฉ์๋์ List<String>์ ๋๊ธธ ์ ์์ง๋ง, List<Object>๋ฅผ ๋ฐ๋ ๋ฉ์๋์๋ ๋๊ธธ ์ ์๋ค. ์ด๋ ์ ๋ค๋ฆญ์ ํ์ ํ์ ๊ท์น ๋๋ฌธ์ด๋ค. ์ฆ, List<String>์ ๋ก ํ์ ์ธ List์ ํ์ ํ์ ์ด์ง๋ง, List<Object>์ ํ์ ํ์ ์ ์๋๋ค(์์ดํ 28).
ยท List<Object>์ฒ๋ผ ์์ ๊ฐ์ฒด๋ฅผ ํ์ฉํ๋ ๋งค๊ฐ๋ณ์ํ ํ์ ์ ๊ด์ฐฎ๋ค.
- List<Object> ๊ฐ์ ๋งค๊ฐ๋ณ์ํ ํ์ ์ ์ฌ์ฉํ ๋์ ๋ฌ๋ฆฌ List ๋ก ํ์ ์ ์ฌ์ฉํ๋ฉด ํ์ ์์ ์ฑ์ ์๊ฒ ๋๋ค.
์์ 1 - ๋ก ํ์ ๊ณผ ์์์ ๊ฐ์ฒด๋ฅผ ํ์ฉํ๋ ๋งค๊ฐ๋ณ์ํ ํ์
๋์ ์ฐจ์ด๋ฅผ ํ์ธํ๊ธฐ ์ํด ์์๋ฅผ ์ดํด๋ณด์. ์๋๋ ๋ก ํ์ List๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ค.
์ด ์ฝ๋๋ ์ปดํ์ผ์ ๋์ง๋ง, unchecked ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ , ์ด๋๋ก ์คํํ๋ฉด strings.get(0)์ ๊ฒฐ๊ณผ๋ฅผ ํ๋ณํํ๋ ค ํ ๋ ClassCastException์ ๋์ง๋ค.
ํด๋น ๋ก ํ์ List๋ฅผ ๋งค๊ฐ๋ณ์ํ ํ์ ์ธ List<Object>๋ก ๋ฐ๊พธ๋ฉด ์ค๋ฅ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๋ฉฐ ์ปดํ์ผ์กฐ์ฐจ ๋์ง ์๋๋ค.
์์ 2 - ๋ก ํ์ ๊ณผ ๋นํ์ ์ ์์ผ๋์นด๋ ํ์
์๋๋ 2๊ฐ์ ์งํฉ(Set)์ ๋ฐ์ ๊ณตํต ์์๋ฅผ ๋ฐํํ๋ ๋ฉ์๋๋ค. ๋ชจ๋ฅด๋ ํ์ ์ ์์๋ ๋ฐ๋ ๋ก ํ์ ์ ์ฌ์ฉํ๋ค.
์ด ๋ฉ์๋๋ ๋์์ ํ์ง๋ง ๋ก ํ์ ์ ์ฌ์ฉํด ์์ ํ์ง ์๋ค. ๋ฐ๋ผ์ ๋นํ์ ์ ์์ผ๋์นด๋ ํ์ (unbounded wildcard type)์ ๋์ ์ฌ์ฉํ๋ ๊ฒ ์ข๋ค.
ยท ์ ๋ค๋ฆญ ํ์ ์ ์ฐ๊ณ ์ถ์ง๋ง ์ค์ ํ์ ๋งค๊ฐ๋ณ์๊ฐ ๋ฌด์์ธ์ง ์ ๊ฒฝ ์ฐ๊ณ ์ถ์ง ์์ ๋๋ ๋ฌผ์ํ(?)๋ฅผ ์ฌ์ฉํ์.
- ์ด๊ฒ์ ์ด๋ค ํ์ ์ด๋ผ๋ ๋ด์ ์ ์๋ ๊ฐ์ฅ ๋ฒ์ฉ์ ์ธ Set ํ์ ์ด๋ค.
๋ค์์ ๋นํ์ ์ ์์ผ๋์นด๋ ํ์ ์ ์ฌ์ฉํ ์์๋ค.
ยท ๋ก ํ์ (Set)๊ณผ ๋นํ์ ์ ์์ผ๋์นด๋ ํ์ ์ ์ฐจ์ด์ : ์์ผ๋์นด๋ ํ์ ์ ์์ ํ๋ฉฐ, ์ ์ฐํ๋ค.
- ๋ก ํ์ ์ปฌ๋ ์ ์๋ ์๋ฌด ์์๋ ๋ฃ์ ์ ์์ผ๋ ํ์ ๋ถ๋ณ์์ ํผ์ํ๊ธฐ ์ฝ๋ค.
- ๋ฐ๋ฉด, Collection<?>์๋ null ์ธ์๋ ์ด๋ค ์์๋ ๋ฃ์ ์ ์๋ค. ๋ค๋ฅธ ์์๋ฅผ ๋ฃ์ผ๋ ค ํ๋ฉด ์ปดํ์ผํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ฆ, ์ปฌ๋ ์ ์ ํ์ ๋ถ๋ณ์์ ํผ์ํ์ง ๋ชปํ๊ฒ ๋ง์๋ค. ์ด๋ค ์์๋ Collection<?>์ ๋ฃ์ง ๋ชปํ๊ฒ ํ์ผ๋ฉฐ ์ปฌ๋ ์ ์์ ๊บผ๋ผ ์ ์๋ ๊ฐ์ฒด์ ํ์ ๋ ์ ํ ์ ์ ์๋ค. ์ด๋ฌํ ์ ์ฝ์ ๋ฐ์ ๋ค์ผ ์ ์๋ค๋ฉด, ์ ๋ค๋ฆญ ๋ฉ์๋(์์ดํ 30)๋ ํ์ ์ ์์ผ๋์นด๋ ํ์ (์์ดํ 31)์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ก ํ์ ์ด ํ์ฉ๋๋ ์ฌ๋ก
1. class ๋ฆฌํฐ๋ด์๋ ๋ก ํ์ ์ ์จ์ผ ํ๋ค.
- ์๋ฐ ๋ช ์ธ๋ class ๋ฆฌํฐ๋ด์ ๋งค๊ฐ๋ณ์ํ ํ์ ์ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ํ๋ค(๋ฐฐ์ด๊ณผ ๊ธฐ๋ณธ ํ์ ์ ํ์ฉ).
ex) List.class, String[].class, int.class๋ ํ์ฉํ๊ณ List<String>.class, List<?>, class๋ ํ์ฉํ์ง ์๋๋ค.
2. instanceof ์ฐ์ฐ์๋ ๋นํ์ ์ ์์ผ๋์นด๋ ํ์ ์ด์ธ์ ๋งค๊ฐ๋ณ์ํ ํ์ ์๋ ์ ์ฉํ ์ ์๋ค.
- ๋ฐํ์์๋ ์ ๋ค๋ฆญ ํ์ ์ด ์ง์์ง๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ก ํ์ ์ด๋ ๋นํ์ ์ ์์ผ๋์นด๋ ํ์ ์ด๋ instanceof๋ ์์ ํ ๋๊ฐ์ด ๋์ํ๋ค.
๋นํ์ ์ ์์ด๋ค์นด๋ ํ์ ์ ๊บพ์ ๊ดํธํ ๋ฌผ์ํ๋ ์๋ฌด๋ฐ ์ญํ ์์ด ์ฝ๋๋ง ์ง์ ๋ถํ๊ฒ ๋ง๋๋ฏ๋ก, ์ฐจ๋ผ๋ฆฌ ๋ก ํ์ ์ ์ฐ๋ ํธ์ด ๊น๋ํ๋ค. ๋ค์์ ์ ๋ค๋ฆญ ํ์ ์ instanceof๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋ฐ๋ฅธ ์์ด๋ค.
์์ดํ
27. ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ๋ผ
ํต์ฌ ์ ๋ฆฌ
ยท ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ ์ค์ํ๋ ๋ฌด์ํ์ง ๋ง์.
- ๋ชจ๋ ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ ๋ฐํ์์ ClassCassException์ ์ผ์ผํฌ ์ ์๋ ์ ์ฌ์ ๊ฐ๋ฅ์ฑ์ ๋ปํ๋ค. ์ต์ ์ ๋คํด ์ ๊ฑฐํ์.
ยท ๊ฒฝ๊ณ ๋ฅผ ์์จ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ๊ฒ ๋ค๋ฉด, ๊ทธ ์ฝ๋๊ฐ ํ์ ์์ ํจ์ ์ฆ๋ช ํ๊ณ ๊ฐ๋ฅํ ํ ๋ฒ์๋ฅผ ์ขํ @SuppressWarnings("unchecked") ์ ๋ํ ์ด์ ์ผ๋ก ๊ฒฝ๊ณ ๋ฅผ ์จ๊ฒจ๋ผ. ๊ทธ๋ฐ ๋ค์ ๊ฒฝ๊ณ ๋ฅผ ์ถ๊ธฐ๊ธฐ๋ก ํ ๊ทผ๊ฑฐ๋ฅผ ์ฃผ์์ผ๋ก ๋จ๊ฒจ๋ผ.
์ ๋ค๋ฆญ๊ณผ ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ
ยท ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด ์๋ง์ ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๊ฒ ๋ ๊ฒ์ด๋ค.
ex) ๋น๊ฒ์ฌ ํ๋ณํ ๊ฒฝ๊ณ , ๋น๊ฒ์ฌ ๋ฉ์๋ ํธ์ถ ๊ฒฝ๊ณ , ๋น๊ฒ์ฌ ๋งค๊ฐ๋ณ์ํ ๊ฐ๋ณ์ธ์ ํ์ ๊ฒฝ๊ณ , ๋น๊ฒ์ฌ ๋ณํ ๊ฒฝ๊ณ ๋ฑ
ยท ๋๋ถ๋ถ์ ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ ์ฝ๊ฒ ์ ๊ฑฐํ ์ ์๋ค.
์ฝ๋๋ฅผ ๋ค์์ฒ๋ผ ์๋ชป ์์ฑํ๋ค๊ณ ๊ฐ์ ํ์.
์ปดํ์ผ๋ฌ๋ ๋ฌด์์ด ์๋ชป๋๋์ง ์น์ ํ ์ค๋ช ํด์ค๋ค.

์ปดํ์ผ๋ฌ๊ฐ ์๋ ค์ค ๋๋ก ์์ ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ ์ฌ๋ผ์ง๋ค. ์ปดํ์ผ๋ฌ๊ฐ ์๋ ค์ค ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ช ์ํ์ง ์๊ณ , ์๋ฐ 7๋ถํฐ ์ง์ํ๋ ๋ค์ด์๋ชฌ๋ ์ฐ์ฐ์(<>)๋ง์ผ๋ก ํด๊ฒฐํ ์๋ ์๋ค.
- ๊ทธ๋ฌ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์ฌ๋ฐ๋ฅธ ์ค์ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๋ก ํด์ค๋ค.
ยท ํ ์ ์๋ ํ ๋ชจ๋ ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ์. ๋ชจ๋ ์ ๊ฑฐํ๋ค๋ฉด ๊ทธ ์ฝ๋๋ ํ์ ์์ ์ฑ์ด ๋ณด์ฅ๋๋ค.
- ์ฆ, ๋ฐํ์์ ClassCastException์ด ๋ฐ์ํ ์ผ์ด ์๊ณ , ์ฐ๋ฆฌ๊ฐ ์๋ํ ๋๋ก ์ ๋์ํ๋ฆฌ๋ผ ํ์ ํ ์ ์๋ค.
ยท ๊ฒฐ๊ณผ๋ฅผ ์ ๊ฑฐํ ์๋ ์์ง๋ง ํ์ ์์ ํ๋ค๊ณ ํ์คํ ์ ์๋ค๋ฉด @SuppressWaringins("unchecked") ์ ๋ํ ์ด์ ์ ๋ฌ์ ๊ฒฝ๊ณ ๋ฅผ ์จ๊ธฐ์.
- ๋จ, ํ์ ์์ ํจ์ ๊ฒ์ฆํ์ง ์์ ์ฑ ๊ฒฝ๊ณ ๋ฅผ ์จ๊ธฐ๋ฉด ์ค์ค๋ก์๊ฒ ์๋ชป๋ ๋ณด์ ์ธ์์ ์ฌ์ด์ฃผ๋ ๊ผด์ด๋ค.
- ํด๋น ์ ๋ํ ์ด์ ์ ์ฌ์ฉํ ๋๋ฉด ๊ทธ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํด๋ ์์ ํ ์ด์ ๋ฅผ ํญ์ ์ฃผ์์ผ๋ก ๋จ๊ฒจ์ผ ํ๋ค.
ยท ์์ ํ๋ค๊ณ ๊ฒ์ฆ๋ ๋น์ ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์จ๊ธฐ์ง ์๊ณ ๊ทธ๋๋ก ๋๋ฉด, ์ง์ง ๋ฌธ์ ๋ฅผ ์๋ฆฌ๋ ์๋ก์ด ๊ฒฝ๊ณ ๊ฐ ๋์๋ ์ ๊ฑฐํ์ง ์์ ์๋ง์ ๊ฑฐ์ง ๊ฒฝ๊ณ ์์ ํ๋ฌปํ ๋์น์ฑ์ง ๋ชปํ ์ ์๋ค.
ยท @SuppressWaring ์ ๋ํ ์ด์ ์ ์ง์ญ๋ณ์๋ถํฐ ํด๋์ค ์ ์ฒด๊น์ง ์ด๋ค ์ ์ธ์๋ ๋ฌ ์ ์์ง๋ง, ๊ฐ๋ฅํ ์ข์ ๋ฒ์์ ์ ์ฉํ์.
- ๋ณดํต์ ๋ณ์ ์ ์ธ, ์์ฃผ ์งง์ ๋ฉ์๋, ํน์ ์์ฑ์๊ฐ ๋ ๊ฒ์ด๋ค.
- ํด๋์ค ์ ์ฒด์ ์ ์ฉํ๋ฉด ์์นซ ์ฌ๊ฐํ ๊ฒฝ๊ณ ๋ฅผ ๋์น ์ ์๋ค.
@SuppressWaring ์ ๋ํ ์ด์ ์ฌ์ฉ ๋ฒ์๋ฅผ ์ขํ๋ ์์
๋ค์์ ArrayList์์ ๊ฐ์ ธ์จ toArray ๋ฉ์๋๋ค.
ArrayList๋ฅผ ์ปดํ์ผํ๋ฉด ์ด ๋ฉ์๋์์ elements ์์์ unchecked cast ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๋ค. ์ ๋ํ ์ด์ ์ ์ ์ธ์๋ง ๋ฌ ์ ์๊ธฐ ๋๋ฌธ์ return ๋ฌธ์๋ ๋ฌ ์ ์๋ค. ๋ฉ์๋ ์ ์ฒด์ ๋ฌ๊ณ ์ถ๊ฒ ์ง๋ง, ๋ฒ์๊ฐ ํ์ ์ด์์ผ๋ก ๋์ด์ง๋ค.
๋์ ์ ๋ฐํ๊ฐ์ ๋ด์ ์ง์ญ๋ณ์๋ฅผ ํ๋ ์ ์ธํ๊ณ , ๊ทธ ๋ณ์์ ์ ๋ํ ์ด์ ์ ๋ฌ์์ฃผ์.
ยท ์ด ์ฝ๋๋ ๊น๋ํ๊ฒ ์ปดํ์ผ๋๊ณ , ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์จ๊ธฐ๋ ๋ฒ์๋ ์ต์๋ก ์ขํ๋ค.
์์ดํ
28. ๋ฐฐ์ด๋ณด๋ค๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ผ
ํต์ฌ ์ ๋ฆฌ
ยท ๋ฐฐ์ด์ ๊ณต๋ณ์ด๋ค.
- Sub๊ฐ Super์ ํ์ ํ์ ์ด๋ผ๋ฉด Sub[]์ ๋ฐฐ์ด Super[]์ ํ์ ํ์ ์ด ๋๋ค.
ยท ์ ๋ค๋ฆญ์ ๋ถ๊ณต๋ณ์ด๊ณ , ํ์ ์ ๋ณด๊ฐ ์๊ฑฐ๋๋ค.
- ์๋ก ๋ค๋ฅธ ํ์ Type1๊ณผ Type2๊ฐ ์์ ๋, List<Type1>์ List<Type2>์ ํ์ ํ์ ๋ ์๋๊ณ ์์ ํ์ ๋ ์๋๋ค.
ยท ๊ทธ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ๋ฐํ์์๋ ํ์ ์์ ํ์ง๋ง, ์ปดํ์ผํ์์๋ ๊ทธ๋ ์ง ์๋ค. ์ ๋ค๋ฆญ์ ๋ฐ๋๋ค.
ยท ๊ทธ๋์ ๋์ ์์ด ์ฐ๊ธฐ๋ ์ฝ์ง ์๋ค. ๋์ ์์ด ์ฐ๋ค๊ฐ ์ปดํ์ผ ์ค๋ฅ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ง๋๋ฉด, ๊ฐ์ฅ ๋จผ์ ๋ฐฐ์ด์ ๋ฆฌ์คํธ๋ก ๋์ฒดํ๋ ๋ฐฉ๋ฒ์ ์ ์ฉํด๋ณด์.
๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ์ ์ฐจ์ด
ยท ๋ฐฐ์ด๊ณผ ์ ๋ค๋ฆญ ํ์ ์๋ ์ค์ํ ์ฐจ์ด๊ฐ ๋ ๊ฐ์ง ์๋ค.
1. ๋ฐฐ์ด์ ๊ณต๋ณ(covariant)์ด๊ณ , ์ ๋ค๋ฆญ์ ๋ถ๊ณต๋ณ(invariant)์ด๋ค.
- Sub๊ฐ Super์ ํ์ ํ์ ์ด๋ผ๋ฉด ๋ฐฐ์ด Sub[]์ ๋ฐฐ์ด Super[]์ ํ์ ํ์ ์ด ๋๋ค. ๊ณต๋ณ์ ํจ๊ป ๋ณํ๋ค๋ ๋ป์ด๋ค.
์ฆ, Object[]์ Integer[]์ ๋์ ํ ์ ์๋ค. (์๋ฐ์ ์ค๊ณ ์ค๋ฅ)
- ์๋ก ๋ค๋ฅธ ํ์ Type1๊ณผ Type2๊ฐ ์์ ๋, List<Type1>์ List<Type2>์ ํ์ ํ์ ๋ ์๋๊ณ ์์ ํ์ ๋ ์๋๋ค.
List<String>์ List<Object>๊ฐ ํ๋ ์ผ์ ์ ๋๋ก ์ํํ์ง ๋ชปํ๋ ํ์ ํ์ ์ด ๋ ์ ์๋ค(๋ฆฌ์ค์ฝํ ์นํ ์์น์ ์ด๊ธ๋๋ค. ์์ดํ 10).
๋์ ์ฐจ์ด๋ฅผ ์์๋ณด๊ธฐ ์ํด ์์๋ฅผ ์ดํด๋ณด์. ๋ค์์ ํ์ฉ๋๋ ์ฝ๋๋ค.
๋ค์์ ๋ฌธ๋ฒ์ ๋ง์ง ์๋๋ค.
์ด๋ ์ชฝ์ด๋ Long์ฉ ์ ์ฅ์์ String์ ๋ฃ์ ์ ์๋ค. ๋ค๋ง ๋ฐฐ์ด์์๋ ๊ทธ ์ค์๋ฅผ ๋ฐํ์์ ์๊ฒ ๋์ง๋ง, ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํ์ผํ ๋ ๋ฐ๋ก ์ ์ ์๋ค.
2. ๋ฐฐ์ด์ ์ค์ฒดํ(reify)๋๋ค.
- ๋ฐฐ์ด์ ๋ฐํ์์๋ ์์ ์ด ๋ด๊ธฐ๋กํ ์์์ ํ์ ์ ์ธ์งํ๊ณ ํ์ธํ๋ค. ๊ทธ๋์ ์์์ ์ฒ๋ผ Long ๋ฐฐ์ด์ String์ ๋ฃ์ผ๋ ค ํ๋ฉด ArrayStoreException์ด ๋ฐ์ํ๋ค.
- ๋ฐ๋ฉด, ์ ๋ค๋ฆญ์ ํ์ ์ ๋ณด๊ฐ ๋ฐํ์์๋ ์๊ฑฐ(erasure)๋๋ค. ์ฆ, ์์ ํ์ ์ ์ปดํ์ผํ์์๋ง ๊ฒ์ฌํ๋ฉฐ ๋ฐํ์์๋ ์์์กฐ์ฐจ ์๋ค.
- ์๊ฑฐ๋ ์ ๋ค๋ฆญ์ด ์ง์๋๊ธฐ ์ ์ ๋ ๊ฑฐ์ ์ฝ๋์ ์ ๋ค๋ฆญ ํ์ ์ํจ๊ป ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๋งค์ปค๋์ฆ์ด๋ค.
ยท ์ด๋ฌํ ์ฐจ์ด๋ก ๋ฐฐ์ด๊ณผ ์ ๋ค๋ฆญ์ ์ ์ด์ฐ๋ฌ์ง์ง ๋ชปํ๋ค.
- ์๋ฅผ๋ค์ด ๋ฐฐ์ด์ ์ ๋ค๋ฆญ ํ์ , ๋งค๊ฐ๋ณ์ํ ํ์ , ํ์ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ ์ ์๋ค.
ex) new List<E>[], new List<String>[], new E[] ์์ผ๋ก ์์ฑํ๋ฉด ์ปดํ์ผํ ๋ ์ ๋ค๋ฆญ ๋ฐฐ์ด ์์ฑ ์ค๋ฅ๋ฅผ ์ผ์ผํจ๋ค.
์ ๋ค๋ฆญ ๋ฐฐ์ด์ ๋ง๋ค์ง ๋ชปํ๊ฒ ๋ง์ ์ด์
ยท ํ์ ์์ ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ด๋ฅผ ํ์ฉํ๋ค๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์๋ ์์ฑํ ํ๋ณํ ์ฝ๋์์ ๋ฐํ์์ ClassCastException์ด ๋ฐ์ํ ์ ์๋ค.
- ์ด๋ ๋ฐํ์์ ClassCastException์ด ๋ฐ์ํ๋ ์ผ์ ๋ง์์ฃผ๊ฒ ๋ค๋ ์ ๋ค๋ฆญ ํ์ ์์คํ ์ ์ทจ์ง์ ์ด๊ธ๋๋ค.
TODO: ๋ด์ฉ ์ถ๊ฐ
์์ดํ
29. ์ด์์ด๋ฉด ์ ๋ค๋ฆญ ํ์
์ผ๋ก ๋ง๋ค๋ผ
ํต์ฌ ์ ๋ฆฌ
ยท ํด๋ผ์ด์ธํธ์์ ์ง์ ํ๋ณํํด์ผ ํ๋ ํ์ ๋ณด๋ค ์ ๋ค๋ฆญ ํ์ ์ด ๋ ์์ ํ๊ณ ์ฐ๊ธฐ ํธํ๋ค.
ยท ๋ฐ๋ผ์ ์๋ก์ด ํ์ ์ ์ค๊ณํ ๋๋ ํ๋ณํ ์์ด๋ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ผ. ๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด ์ ๋ค๋ฆญ ํ์ ์ผ๋ก ๋ง๋ค์ด์ผ ํ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
ยท ๊ธฐ์กด ํ์ ์ค ์ ๋ค๋ฆญ์ด์์ด์ผ ํ๋ ๊ฒ ์๋ค๋ฉด ์ ๋ค๋ฆญ ํ์ ์ผ๋ก ๋ณ๊ฒฝํ์.
- ๊ธฐ์กด ํด๋ผ์ด์ธํธ์๋ ์๋ฌด๋ฐ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์, ์๋ก์ด ์ฌ์ฉ์๋ฅผ ํจ์ฌ ํธํ๊ฒ ํด์ฃผ๋ ๊ธธ์ด๋ค(์์ดํ 26).
์์ - Object ๊ธฐ๋ฐ ์คํ
ยท ์ ๋ค๋ฆญ ํ์ ์ ์๋ก ๋ง๋๋ ์ผ์ ์กฐ๊ธ ์ด๋ ต๋ค. ๊ทธ๋๋ ๋ฐฐ์๋๋ฉด ๊ทธ๋งํ ๊ฐ์ด์น๋ฅผ ์ถฉ๋ถํ ํ๋ค.
ยท ์ด ํด๋์ค๋ ์๋ ์ ๋ค๋ฆญ ํ์ ์ด์ด์ผ ๋ง๋ ํ๋ค. ์ด ํด๋์ค๋ฅผ ์ ๋ค๋ฆญ์ผ๋ก ๋ฐ๊ฟ๋ ํ์ฌ ๋ฒ์ ์ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ์๋ ์๋ฌด๋ฐ ํด๊ฐ ์๋ค.
- ์คํ๋ ค ์ง๊ธ ์ํ์์์ ํด๋ผ์ด์ธํธ๋ ์คํ์์ ๊บผ๋ธ ๊ฐ์ฒด๋ฅผ ํ๋ณํํด์ผ ํ๋๋ฐ, ์ด๋ ๋ฐํ์ ์ค๋ฅ๊ฐ ๋ ์ํ์ด ์๋ค.
์์ - ์ ๋ค๋ฆญ ์คํ์ผ๋ก ๊ฐ๋ ์ฒซ ๋จ๊ณ
์ผ๋ฐ ํด๋์ค๋ฅผ ์ ๋ค๋ฆญ ํด๋์ค๋ก ๋ง๋ค์ด๋ณด์.
1. ํด๋์ค ์ ์ธ์ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ๋ค.
์ ์ฝ๋์์๋ ์คํ์ด ๋ด์ ์์ ํ์ ํ๋๋ง ์ถ๊ฐํ๋ค. ํ์ ์ด๋ฆ์ผ๋ก ๋ณดํต E๋ฅผ ์ฌ์ฉํ๋ค(์์ดํ 68).
2. ๋ ์ฝ๋์ ์ฐ์ธ Object๋ฅผ ์ ์ ํ ํ์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊พธ๊ณ ์ปดํ์ผํด๋ณด์.
์ด ๋จ๊ณ์์ ๋์ฒด๋ก ํ๋ ์ด์์ ์ค๋ฅ๋ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๋ค. ์ ์ฝ๋๋ ์๋ ๋ถ๋ถ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. E์ ๊ฐ์ ์ค์ฒดํ ๋ถ๊ฐ ํ์ ์ผ๋ก๋ ๋ฐฐ์ด์ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ์ ๋ค๋ฆญ์ผ๋ก ๋ง๋ค๋ ค ํ ๋ ํด๊ฒฐ์ฑ ์ ๋ ๊ฐ์ง๋ค.
์ค๋ฅ ํด๊ฒฐ ๋ฐฉ๋ฒ ์ฒซ ๋ฒ์งธ, ์ ๋ค๋ฆญ ๋ฐฐ์ด ์์ฑ์ ๊ธ์งํ๋ ์ ์ฝ์ ๋๋๊ณ ์ฐํํ๋ ๋ฐฉ๋ฒ์ด๋ค. Object ๋ฐฐ์ด์ ์์ฑํ ๋ค์ ์ ๋ค๋ฆญ ๋ฐฐ์ด๋ก ํ๋ณํํ์.
- ์ด์ ์ปดํ์ผ๋ฌ๋ ์ค๋ฅ ๋์ ๊ฒฝ๊ณ ๋ฅผ ๋ด๋ณด๋ธ๋ค. ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ํ์ ์์ ํ์ง ์์ ๋ฐฉ๋ฒ์ด๋ค.
์ปดํ์ผ๋ฌ๋ ์ด ํ๋ก๊ทธ๋จ์ด ํ์ ์์ ํ์ง ์ฆ๋ช ํ ๋ฐฉ๋ฒ์ด ์์ง๋ง, ์ฐ๋ฆฌ๋ ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด ๋น๊ฒ์ฌ ํ๋ณํ์ด ํ๋ก๊ทธ๋จ์ ํ์ ์์ ์ฑ์ ํด์น์ง ์์์ ์ฐ๋ฆฌ ์ค์ค๋ก ํ์ธํด์ผ ํ๋ค.
๋ฌธ์ ์ ๋ฐฐ์ด elements๋ private ํ๋์ ์ ์ฅ๋๊ณ , ํด๋ผ์ด์ธํธ๋ก ๋ฐํ๋๊ฑฐ๋ ๋ค๋ฅธ ๋ฉ์๋์ ์ ๋ฌ๋๋ ์ผ์ด ์ ํ ์๋ค. push ๋ฉ์๋๋ฅผ ํตํด ๋ฐฐ์ด์ ์ ์ฅ๋๋ ์์์ ํ์ ์ ํญ์ E๋ค. ๋ฐ๋ผ์ ์ด ๋น๊ฒ์ฌ ํ๋ณํ์ ํ์คํ ์์ ํ๋ค.
๋น๊ฒ์ฌ ํ๋ณํ์ด ์์ ํจ์ ์ง์ ์ฆ๋ช ํ๋ค๋ฉด, ๋ฒ์๋ฅผ ์ต์๋ก ์ขํ @SuppressWarings ์ ๋ํ ์ด์ ์ผ๋ก ํด๋น ๊ฒฝ๊ณ ๋ฅผ ์จ๊ธด๋ค(์์ดํ 27). ์ด ์์์๋ ์์ฑ์๊ฐ ๋น๊ฒ์ฌ ๋ฐฐ์ด ์์ฑ ๋ง๊ณ ๋ ํ๋ ์ผ์ด ์์ผ๋ ์์ฑ์ ์ ์ฒด์์ ๊ฒฝ๊ณ ๋ฅผ ์จ๊ฒจ๋ ์ข๋ค.
์ค๋ฅ ํด๊ฒฐ ๋ฐฉ๋ฒ ๋ ๋ฒ์งธ, elements ํ๋์ ํ์ ์ E[]์์ Object[]๋ก ๋ฐ๊พผ๋ค.
- ์ด๋ ๊ฒ ํ๋ฉด ์ฒซ ๋ฒ์งธ์๋ ๋ค๋ฅธ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.

๋ฐฐ์ด์ด ๋ฐํํ ์์๋ฅผ E๋ก ํ๋ณํํ๋ฉด ์ค๋ฅ ๋์ ์ค๋ฅ ๋์ ๊ฒฝ๊ณ ๊ฐ ๋ฌ๋ค. E๋ ์ค์ฒดํ ๋ถ๊ฐ ํ์ ์ด๋ฏ๋ก ์ปดํ์ผ๋ฌ๋ ๋ผํ์์ ์ด๋ค์ง๋ ํ๋ณํ์ด ์์ ํ์ง ์ฆ๋ช ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฒ์๋ ์ฐ๋ฆฌ๊ฐ ์ง์ ์ฆ๋ช ํ๊ณ ๊ฒฝ๊ณ ๋ฅผ ์จ๊ธธ ์ ์๋ค.
pop ๋ฉ์๋ ์ ์ฒด์์ ๊ฒฝ๋ก๋ฅผ ์จ๊ธฐ์ง ๋ง๊ณ , ๋น๊ฒ์ฌ ํ๋ณํ์ ์ํํ๋ ํ ๋น๋ฌธ์์๋ง ์จ๊ฒจ๋ณด์.
๋ ๋ฐฉ๋ฒ ๋ชจ๋ ๋๋ฆ์ ์ง์ง๋ฅผ ์ป๊ณ ์์ง๋ง, ํ์ ์์๋ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ ์ ํธํ๋ค.
1. ๊ฐ๋ ์ฑ์ด ๋ ์ข๋ค.
2. ๋ฐฐ์ด์ ํ์ ์ E[]๋ก ์ ์ธํ์ฌ ์ค์ง Eํ์ ์ธ์คํด์ค๋ง ๋ฐ์์ ํ์คํ ์ดํํ๋ค.
3. ์ฝ๋๊ฐ ๋ ์งง๋ค.
4. ์ฒซ ๋ฒ์งธ ๋ฐฉ์์์๋ ํ๋ณํ์ ๋ฐฐ์ด ์์ฑ ์ ๋จ ํ ๋ฒ๋ง ํด์ฃผ๋ฉด ๋์ง๋ง, ๋ ๋ฒ์งธ ๋ฐฉ์์์๋ ๋ฐฐ์ด์์ ์์๋ฅผ ์ฝ์ ๋๋ง๋ค ํด์ค์ผ ํ๋ค.
์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋จ์ ๋ ์๋ค. ํ์ค์ผ(์์ดํ 32)์ ์ผ์ผํจ๋ค.
๋ค์์ ๋ช ๋ ฌ์ค ์ธ์๋ค์ ์ญ์์ผ๋ก ๋ฐ๊ฟ ๋๋ฌธ์๋ก ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ฐฉ๊ธ ๋ง๋ ์ ๋ค๋ฆญ Stack ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๋ชจ์ต์ ๋ณด์ฌ์ค๋ค.
ยท ํ์ ๋งค๊ฐ๋ณ์๋ก ๊ธฐ๋ณธ ํ์ ์ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ ์ ๋ค๋ฆญ ํ์ ์์คํ ์ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ์ด๋, ๋ฐ์ฑ๋ ๊ธฐ๋ณธ ํ์ (์์ดํ 61)์ ์ฌ์ฉํด ์ฐํํ ์ ์๋ค.
Ex) Stack<int>, Stack<double>์ ๋ง๋ค๋ ค๊ณ ํ๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋๋ค.
์์ดํ
30. ์ด์์ด๋ฉด ์ ๋ค๋ฆญ ๋ฉ์๋๋ก ๋ง๋ค๋ผ
ํต์ฌ ์ ๋ฆฌ
ยท ์ ๋ค๋ฆญ ํ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ํด๋ผ์ด์ธํธ์์ ์ ๋ ฅ ๋งค๊ฐ๋ณ์์ ๋ฐํ๊ฐ์ ๋ช ์์ ์ผ๋ก ํ๋ณํํด์ผ ํ๋ ๋ฉ์๋๋ณด๋ค ์ ๋ค๋ฆญ ๋ฉ์๋๊ฐ ๋ ์์ ํ๋ฉฐ ์ฌ์ฉํ๊ธฐ๋ ์ฝ๋ค.
ยท ํ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ฉ์๋๋ ํ๋ณํ ์์ด ์ฌ์ฉํ ์ ์๋ ํธ์ด ์ข์ผ๋ฉฐ, ๋ง์ ๊ฒฝ์ฐ ๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด ์ ๋ค๋ฆญ ๋ฉ์๋๊ฐ ๋์ด์ผ ํ๋ค.
- ๊ธฐ์กด ํด๋ผ์ด์ธํธ๋ ๊ทธ๋๋ก ๋ ์ฑ ์๋ก์ด ์ฌ์ฉ์์ ์ถ์ ํจ์ฌ ํธํ๊ฒ ๋ง๋ค์ด์ค ๊ฒ์ด๋ค(์์ดํ 26).
์์ - ๋ก ํ์ ์ ์ฌ์ฉํ ๋ฉ์๋
๋ค์์ ๋ ์งํฉ์ ํฉ์งํฉ์ ๋ฐํํ๋, ๋ฌธ์ ๊ฐ ์๋ ๋ฉ์๋๋ค.
์ปดํ์ผ์ ๋์ง๋ง ๊ฒฝ๊ณ ๊ฐ ๋ ๊ฐ ๋ฐ์ํ๋ค. ๊ฒฝ๊ณ ๋ฅผ ์์ ๋ ค๋ฉด ์ด ๋ฉ์๋๋ฅผ ํ์ ์์ ํ๊ฒ ๋ง๋ค์ด์ผ ํ๋ค.
์์1 - ์ ๋ค๋ฆญ ๋ฉ์๋
์์ ๋ก ํ์ ์ ์ฌ์ฉํ ๋ฉ์๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ค.
- ๋ฉ์๋ ์ ์ธ์์์ ์ธ ๊ฒฐํฉ(์ ๋ ฅ 2๊ฐ, ๋ฐํ 1๊ฐ)์ ์์ ํ์ ์ ํ์ ๋งค๊ฐ๋ณ์๋ก ๋ช ์ํ๋ค.
- ๋ฉ์๋ ์์์๋ ์ด ํ์ ๋งค๊ฐ๋ฒผ์๋ง ์ฌ์ฉํ๊ฒ ์์ ํ๋ค.
- ํ์ ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก์ ๋ฉ์๋์ ์ ํ์์ ๋ฐํ ํ์ ์ฌ์ด์ ์จ๋ค.
๋ค์ ์ฝ๋์์ ํ์ ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก์ <E>์ด๊ณ , ๋ฐํ ํ์ ์ Set<E>์ด๋ค. ํ์ ๋งค๊ฐ๋ณ์์ ๋ช ๋ช ๊ท์น์ ์ ๋ค๋ฆญ ๋ฉ์๋, ์ ๋ค๋ฆญ ํ์ ์ด ๋๊ฐ๋ค.
ยท ์์ ์ ๋ค๋ฆญ ๋ฉ์๋๋ ๊ฒฝ๊ณ ์์ด ์ปดํ์ผ ๋๋ฉฐ, ํ์ ์์ ํ๊ณ , ์ฐ๊ธฐ๋ ์ฝ๋ค.
๋ค์์ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์ด๋ค. ์ง์ ํ๋ณํํ์ง ์์๋ ์ค๋ฅ๋ ๊ฒฝ๊ณ ์์ด ์ปดํ์ผ๋๋ค.
ยท union ๋ฉ์๋์ ๋ฌธ์ ์ : ์งํฉ 3๊ฐ(์ ๋ ฅ 2๊ฐ, ๋ฐํ 1๊ฐ)์ ํ์ ์ด ๋ชจ๋ ๊ฐ์ ํ๋ค.
์ด๋ฅผ ํ์ ์ ์์ผ๋์นด๋ ํ์ (์์ดํ 31)์ ์ฌ์ฉํ์ฌ ๋ ์ ์ฐํ๊ฒ ๊ฐ์ ํ ์ ์๋ค.
์ ๋ค๋ฆญ ์ฑ๊ธํด ํฉํฐ๋ฆฌ ํจํด
ยท ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ํ์ ์ผ๋ก ํ์ฉํ ์ ์๊ฒ ๋ง๋ค์ด์ผ ํ ๋๊ฐ ์๋ค. ์ ๋ค๋ฆญ์ ๋ฐํ์์ ํ์ ์ ๋ณด๊ฐ ์๊ฑฐ(์์ดํ 28)๋๋ฏ๋ก ํ๋์ ๊ฐ์ฒด๋ฅผ ์ด๋ค ํ์ ์ผ๋ก๋ ๋งค๊ฐ๋ณ์ํํ ์ ์๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ ค๋ฉด ์์ฒญํ ํ์ ๋งค๊ฐ๋ณ์์ ๋ง๊ฒ ๋งค๋ฒ ๊ทธ ๊ฐ์ฒด์ ํ์ ์ ๋ฐ๊ฟ์ฃผ๋ ์ ์ ํฉํฐ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ์ด ํจํด์ ์ ๋ค๋ฆญ ์ฑ๊ธํด ํฉํฐ๋ฆฌ๋ผ๊ณ ํ๋ค.
ex) Collections.reverseOrder ๊ฐ์ ํจ์ ๊ฐ์ฒด(์์ดํ 42), Collections.emptySet ๊ฐ์ ์ปฌ๋ ์ ์ฉ์ผ๋ก ์ฌ์ฉํ๋ค.
ยท ํญ๋ฑ ํจ์(identity function)์ ๋ด์ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด, ์ ๋ค๋ฆญ ์ฑ๊ธํด ํ๋๋ฉด ์ถฉ๋ถํ๋ค.
- ์ ๋ค๋ฆญ์ด ์ค์ฒดํ๋๋ค๋ฉด ํญ๋ฑํฉ์๋ฅผ ํ์ ๋ณ๋ก ํ๋์ฉ ๋ง๋ค์ด์ผ ํ์ ๊ฒ์ด๋ค.
- ๋ฌผ๋ก ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Function.identity๋ฅผ ์ฌ์ฉํด ํญ๋ฑํจ์๋ฅผ ๋ด์ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
์๋ ์ฝ๋์์ IDENTITY_FN์ UnaryOperator<T>๋ก ํ๋ณํํ๋ฉด ๋น๊ฒ์ฌ ํ๋ณํ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๋ค. ํ์ง๋ง ํญ๋ฑํจ์๋ ์ ๋ ฅ ๊ฐ์ ์์ ์์ด ๊ทธ๋๋ก ๋ฐํํ๋ ํจ์์ด๋ฏ๋ก, T๊ฐ ์ด๋ค ํ์ ์ด๋ UnaryOperator<T>๋ฅผ ์ฌ์ฉํด๋ ํ์ ์์ ํ๋ค.
๋ฐ๋ผ์ @SuppressWarnings ์ ๋ํ ์ด์ ์ ์ถ๊ฐํ์.
๋ค์์ ์ ๋ค๋ฆญ ์ฑ๊ธํด์ ์ฌ์ฉํ๋ ์ฝ๋๋ค. ํ๋ณํ์ ํ์ง ์์๋ ์ปดํ์ผ ์ค๋ฅ๋ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
์ฌ๊ท ํ์ ํ์
ยท ๋๋ฌผ๊ฒ ์๊ธฐ ์์ ์ด ๋ค์ด๊ฐ ํํ์์ ์ฌ์ฉํ์ฌ ํ์ ๋งค๊ฐ๋ณ์์ ํ์ฉ ๋ฒ์๋ฅผ ํ์ ํ๋ ์ฌ๊ท์ ํ์ ํ์ (recursive type bound)์ด ์ฌ์ฉ๋๋ค.
- ์ฌ๊ท์ ํ์ ํ์ ์ ์ฃผ๋ก ํ์ ์ ์์ฐ์ ์์๋ฅผ ์ ํ๋ Comparable ์ธํฐํ์ด์ค์ ํจ๊ป ์ฐ์ธ๋ค.
์ ์ฝ๋์์ ํ์ ๋งค๊ฐ๋ณ์ T๋ Comparable<T>๋ฅผ ๊ตฌํํ ํ์ ์ด ๋น๊ตํ ์ ์๋ ์์์ ํ์ ์ ์ ์ํ๋ค.
- ์ค์ ๋ก ๊ฑฐ์ ๋ชจ๋ ํ์ ์ ์์ ๊ณผ ๊ฐ์ ํ์ ์ ์์์๋ง ๋น๊ตํ ์ ์๋ค.
ex) String์ Comparable<String>์ ๊ตฌํํ๊ณ , Integer๋ Comparable<Integer>๋ฅผ ๊ตฌํํ๋ค.
Comparable์ ๊ตฌํํ ์์์ ์ปฌ๋ ์ ์ ์ ๋ ฅ๋ฐ๋ ๋ฉ์๋๋ค์ ์ฃผ๋ก ๊ทธ ์์๋ค์ ์ ๋ ฌ ํน์ ๊ฒ์ํ๊ฑฐ๋, ์ต์๊ฐ์ด๋ ์ต๋๊ฐ์ ๊ตฌํ๋ ์์ผ๋ก ์ฌ์ฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ํํ๋ ค๋ฉด ์ปฌ๋ ์ ์ ๋ด๊ธด ์์๊ฐ ์ํธ ๋น๊ต๋ ์ ์์ด์ผ ํ๋ค.
๋ค์์ ์ด ์ ์ฝ์ ์ฝ๋๋ก ํํํ ๋ชจ์ต์ด๋ค. ํ์ ํ์ ์ธ <E extends Comparable<E>>๋ "๋ชจ๋ ํ์ E๋ ์์ ๊ณผ ๋น๊ตํ ์ ์๋ค"๋ผ๊ณ ์ฝ์ ์ ์๋ค.
๋ค์์ ๋ฐฉ๊ธ ์ ์ธํ max ๋ฉ์๋์ ๊ตฌํ์ด๋ค. ์ปฌ๋ ์ ์ ๋ด๊ธด ์์์ ์์ฐ์ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ต๋๊ฐ์ ๊ณ์ฐํ๋ฉฐ, ์ปดํ์ผ ์ค๋ฅ๋ ๊ฒฝ๊ณ ๋ ๋ฐ์ํ์ง ์๋๋ค.
ยท ์ด๋ฒ ์์ดํ ์์ ์ค๋ช ํ ๊ด์ฉ๊ตฌ, ์์ผ๋์นด๋๋ฅผ ์ด์ฉํ ๋ณํ(์์ดํ 31), ์๋ฎฌ๋ ์ดํธํ ์ ํ ํ์ ๊ด์ฉ๊ตฌ(์์ดํ 2)๋ฅผ ์ดํดํ๊ณ ๋๋ฉด ์ค์ ์์ ๋ง์ฃผ์น๋ ๋๋ถ๋ถ์ ์ฌ๊ท์ ํ์ ํ์ ์ ๋ฌด๋ฆฌ ์์ด ๋ค๋ฃฐ ์ ์์ ๊ฒ์ด๋ค.
์์ดํ
31. ํ์ ์ ์์ผ๋์นด๋๋ฅผ ์ฌ์ฉํด API ์ ์ฐ์ฑ์ ๋์ด๋ผ
ํต์ฌ ์ ๋ฆฌ
ยท ์กฐ๊ธ ๋ณต์กํ๋๋ผ๋ ์์ผ๋์นด๋ ํ์ ์ ์ ์ฉํ๋ฉด API๊ฐ ํจ์ฌ ์ ์ฐํด์ง๋ค.
ยท ๋๋ฆฌ ์ฐ์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ๋ค๋ฉด ๋ฐ๋์ ์์ผ๋์นด๋ ํ์ ์ ์ ์ ํ ์ฌ์ฉํ์.
ยท PECS ๊ณต์์ ๊ธฐ์ตํ์.
- ์์ฐ์(producer)๋ extends๋ฅผ ์๋น์(consumer)๋ super๋ฅผ ์ฌ์ฉํ๋ค.
- Comparable๊ณผ Comparator๋ ๋ชจ๋ ์๋น์๋ผ๋ ์ฌ์ค์ ์์ง ๋ง์.
๋งค๊ฐ๋ณ์ํ ํ์ ์ ํ๊ณ
์์ดํ 28์์ ๋งค๊ฐ๋ณ์ํ ํ์ ์ ๋ถ๊ณต๋ณ์ด๋ผ๊ณ ๋งํ๋ค. ํ์ง๋ง ๋ถ๊ณต๋ณ ๋ฐฉ์๋ณด๋ค ์ ์ฐํ ๋ฌด์ธ๊ฐ๊ฐ ํ์ํ ๋๊ฐ ์๋ค.
๋ค์์ ์์ดํ 29์ Stack ํด๋์ค์ public API๋ค.
์ฌ๊ธฐ์ ์ผ๋ ฅ์ ์์๋ฅผ ์คํ์ ๋ฃ๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค๊ณ ํด๋ณด์.
์ ๋ฉ์๋๋ ์ปดํ์ผ๋์ง๋ง ์๋ฒฝํ์ง ์๋ค. Iterable src์ ์์ ํ์ ์ด ์คํ์ ์์ ํ์ ๊ณผ ์ผ์นํ๋ฉด ์ ์๋ํ์ง๋ง, Stack<Number>๋ก ์ ์ธํ ํ pushAll(intVal)์ ํธ์ถํด๋ณด์(intVal์ Integer ํ์ ์ด๋ค.).
Integer๋ Number์ ํ์ ํ์ ์ด๋ ์ ๋์ํ ๊ฒ ๊ฐ์ง๋ง, ์ค์ ๋ก๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ๋งค๊ฐ๋ณ์ํ ํ์ ์ด ๋ถ๊ณต๋ณ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
ยท ์๋ฐ์์๋ ์ด๋ฐ ์ํฉ์ ๋์ฒํ ์ ์๋ ํ์ ์ ์์ผ๋์นด๋ ํ์ ์ด๋ผ๋ ํน๋ณํ ๋งค๊ฐ๋ณ์ํ ํ์ ์ ์ง์ํ๋ค.
- ์๋ ์ฝ๋์ Iterable<? extends E>๋ 'E์ ํ์ ํ์ ์ Iterable'์ด์ด์ผ ํ๋ค๋ ๋ป์ด๋ค.
์ด์ pushAll๊ณผ ์ง์ ์ด๋ฃจ๋ popAll ๋ฉ์๋๋ฅผ ์์ฑํ์. popAll ๋ฉ์๋๋ Stack ์์ ๋ชจ๋ ์์๋ฅผ ์ฃผ์ด์ง ์ปฌ๋ ์ ์ผ๋ก ์ฎ๊ฒจ ๋ด๋๋ค.
์ ์ฝ๋๋ ์ปฌ๋ ์ ์ ์์ ํ์ ์ด ์คํ์ ์์ ํ์ ๊ณผ ์ผ์นํ๋ค๋ฉด ๋ง๋ํ ์ปดํ์ผ๋๊ณ , ๋ฌธ์ ์์ด ๋์ํ์ง๋ง, ์๋ฒฝํ์ง ์๋ค.
Stack<Number>์ ์์๋ฅผ Object์ฉ ์ปฌ๋ ์ ์ผ๋ก ์ฎ๊ธฐ๋ ค ํ๋ค๋ฉด, "Collection<Object>๋ Collection<Number>์ ํ์ ํ์ ์ด ์๋๋ค"๋ผ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์๋ ์ฝ๋๋ ์ด๋ฅผ ๊ฐ์ ํ ์ฝ๋๋ค. ์ฌ๊ธฐ์ ์์ผ๋์นด๋ ํ์ ์ ์ฌ์ฉํ Collection<? super E>๋ 'E์ ์์ ํ์ ์ Collection'์ด์ด์ผ ํ๋ค๋ ์๋ฏธ๋ค.
ยท ์ด์ฒ๋ผ ์ ์ฐ์ฑ์ ๊ทน๋ํํ๋ ค๋ฉด ์์์ ์์ฐ์๋ ์๋น์์ฉ ์ ๋ ฅ ๋งค๊ฐ๋ณ์์ ์์ผ๋์นด๋ ํ์ ์ ์ฌ์ฉํด์ผํ๋ค.
- ์์ผ๋์นด๋ ํ์ ์ ์ฌ์ฉํ๋ ๊ธฐ๋ณต ์์น์ธ ํ์ค(PECS) ๊ณต์์ ๊ธฐ์ตํ์. Poducer-Extends, Consumer-Super
- ์ฆ, ๋งค๊ฐ๋ณ์ํ ํ์ T๊ฐ ์์ฐ์๋ผ๋ฉด <? extends T>, ์๋น์๋ผ๋ฉด <? super T>๋ฅผ ์ฌ์ฉํ์.
- ๋ฐ์๋ค์ฌ์ผ ํ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๊ณ , ๊ฑฐ์ ํด์ผ ํ ๋งค๊ฐ๋ณ์๋ ๊ฑฐ์ ํ๋ ์์ ์ด ์์์ ์ด๋ค์ง๋ค.
- ํด๋์ค ์ฌ์ฉ์๊ฐ ์์ผ๋์นด๋ ํ์ ์ ์ ๊ฒฝ ์จ์ผ ํ๋ค๋ฉด ๊ทธ API์ ๋ฌธ์ ๊ฐ ์์ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
์ด์ ์์ดํ ์ ์ฝ๋ ๊ฐ์
์์ดํ 28์์ Chooser ์์ฐ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํ๋ค.
์ด ์์ฑ์๋ก ๋๊ฒจ์ง choices ์ปฌ๋ ์ ์ T ํ์ ์ ๊ฐ์ ์์ฐํ๊ธฐ๋ง ํ๋ค. PECS ๊ณต์์ ๋ฐ๋ผ T๋ฅผ ํ์ฅํ๋ ์์ผ๋์นด๋ ํ์ ์ ์ฌ์ฉํด ์ ์ธํด์ผ ํ๋ค.
์ด๋ ๊ฒ ์์ ํ๋ฉด, Chooser<Number>์ ์์ฑ์์ List<Integer>๋ฅผ ๋๊ธธ ์ ์๋ค.
- ์์ ์ ์์ฑ์๋ก๋ ์ปดํ์ผ์กฐ์ฐจ ๋์ง ์๋๋ค.
๋ค์์ผ๋ก ์์ดํ 30์ union ๋ฉ์๋๋ฅผ ์ดํด๋ณด์.
s1๊ณผ s2 ๋ชจ๋ E์ ์์์์ด๋ PECS ๊ณต์์ ๋ฐ๋ผ ๋ค์์ฒ๋ผ ์ ์ธํ๋ค.
- ๋ฐํ ํ์ ์ ์ฌ์ ํ Set<E>์์ ์ฃผ๋ชฉํ์. ๋ฐํ ํ์ ์๋ ํ์ ์ ์์ผ๋์นด๋ ํ์ ์ ์ฌ์ฉํ๋ฉด ์ ๋๋ค. ์ ์ฐ์ฑ์ ๋์ฌ์ฃผ๊ธฐ๋์ปค๋ ํด๋ผ์ด์ธํธ ์ฝ๋์์๋ ์์ผ๋์นด๋ ํ์ ์์จ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์์ ํ ์ ์ธ์ ์ฌ์ฉํ๋ฉด, ๋ค์ ์ฝ๋๋ ๋ง๋ํ ์ปดํ์ผ๋๋ค.
์์ ์ฝ๋๋ ์๋ฐ 8๋ถํฐ ์ ๋๋ก ์ปดํ์ผ๋๋ค. ์๋ฐ 7๊น์ง๋ ํ์ ์ถ๋ก ๋ฅ๋ ฅ์ด ๋ถ์กฑํ์ฌ ๋ฌธ๋งฅ์ ๋ง๋ ๋ฐํ ํ์ (ํน์ ๋ชฉํ ํ์ )์ ๋ช ์ํด์ผํ๋ค.
์ด ์ค๋ฅ๋ ์ปดํ์ผ๋ฌ๊ฐ ์ฌ๋ฐ๋ฅธ ํ์ ์ ์ถ๋ก ํ์ง ๋ชปํ ๋ ๋ช ์์ ํ์ ์ธ์๋ฅผ ์ฌ์ฉํด์ ํ์ ์ ์๋ ค์ฃผ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐ ํ ์ ์๋ค.
- ๋ชฉํ ํ์ดํ(target typing)์ ์๋ฐ 8๋ถํฐ ์ง์ํ๊ธฐ ์์ํ๋ค.
๋ค์์ผ๋ก ์์ดํ 30์ max ๋ฉ์๋๋ฅผ ์ดํด๋ณด์.
์๋ ์ฝ๋๋ ์์ผ๋์นด๋ ํ์ ์ ์ฌ์ฉํด ๋ค์์ ๋ชจ์ต์ด๋ค.
์ด๋ฒ์๋ PECS ๊ณต์์ ๋ ๋ฒ ์ ์ฉํ๋ค.
์ ๋ ฅ ๋งค๊ฐ๋ณ์์์๋ E ์ธ์คํด์ค๋ฅผ ์์ํ๋ฏ๋ก, ์๋์ List<E>๋ฅผ List<? extends E>๋ก ์์ ํ๋ค.
ํ์ ๋งค๊ฐ๋ณ์์์ Comparable<E>๋ E ์ธ์คํด์ค๋ฅผ ์๋นํ๋ฏ๋ก, Comparable<? super E>๋ก ๋์ฒดํ๋ค.
- Comparable๊ณผ Comparator๋ ์ธ์ ๋ ์๋น์์ด๋ฏ๋ก Comparable<? super E> ํํ๋ก ์ฌ์ฉํ์.
ํ์ ๋งค๊ฐ๋ณ์์ ์์ผ๋์นด๋ ๋ ๋ค ๊ฐ๋ฅํ ๋ฉ์๋ ์ ์
ยท ํ์ ๋งค๊ฐ๋ณ์์ ์์ผ๋์นด๋์๋ ๊ณตํต๋๋ ๋ถ๋ถ์ด ์์ด์, ๋ฉ์๋๋ฅผ ์ ์ํ ๋ ๋ฅ ์ค ์ด๋ ๊ฒ์ ์ฌ์ฉํด๋ ๊ด์ฐฎ์ ๋๊ฐ ๋ง๋ค.
๋ค์์ ๊ทธ ์์๋ค. ์ฃผ์ด์ง ๋ฆฌ์คํธ์์ ๋ช ์ํ ๋ ์ธ๋ฑ์ค์ ์์ดํ ๋ค์ ๊ตํ(swap)ํ๋ ์ ์ ๋ฉ์๋๋ค.
์ด๋ค ์ ์ธ์ด ๋ ๋ซ๊ณ , ๋ ๋์ ์ด์ ๋ ๋ฌด์์ผ๊น?
public API๋ผ๋ฉด ๊ฐ๋จํ ๋ ๋ฒ์งธ๊ฐ ๋ ๋ซ๋ค.
์ด๋ค ๋ฆฌ์คํธ๋ ์ด ๋ฉ์๋์ ๋๊ธฐ๋ฉด ๋ช ์ํ ์ธ๋ฑ์ค์ ์์๋ค์ ๊ตํํด ์ค ๊ฒ์ด๊ณ , ์ ๊ฒฝ ์จ์ผ ํ ๋งค๊ฐ๋ณ์๋ ์๋ค.
ยท ๊ธฐ๋ณธ ๊ท์น: ๋ฉ์๋ ์ ์ธ์ ํ์ ๋งค๊ฐ๋ณ์๊ฐ ํ ๋ฒ๋ง ๋์ค๋ฉด ์์ผ๋ ์นด๋๋ก ๋์ฒดํ๋ผ.
- ๋นํ์ ์ ํ์ ๋งค๊ฐ๋ณ์๋ผ๋ฉด ๋นํ์ ์ ์์ผ๋ ์นด๋๋ก ๋ฐ๊พธ๊ณ , ํ์ ์ ํ์ ๋งค๊ฐ๋ณ์๋ผ๋ฉด ํ์ ์ ์์ผ๋์นด๋๋ก ๋ฐ๊พผ๋ค.
๋ ๋ฒ์งธ swap ์ ์ธ์๋ ๋ฌธ์ ๊ฐ ํ๋ ์๋ค. ๋ค์๊ณผ ๊ฐ์ด ์์ฃผ ์ง๊ด์ ์ผ๋ก ๊ตฌํํ ์ฝ๋๊ฐ ์ปดํ์ผ๋์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
์ด ์ฝ๋๋ฅผ ์ปดํ์ผ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ฆ, ๋ฐฉ๊ธ ๊บผ๋ธ ์์๋ฅผ ๋ฆฌ์คํธ์ ๋ค์ ๋ฃ์ ์ ์๋ค.
์์ธ์ ๋ฆฌ์คํธ์ ํ์ ์ด List<?>์ธ๋ฐ, List<?>์๋ null ์ธ์๋ ์ด๋ค ๊ฐ๋ ๋ฃ์ ์ ์๋ค๋ ๋ฐ ์๋ค.
์ด ๋ฌธ์ ๋ ์ค์ ํ์ ์ ์๋ ค์ฃผ๋ ๋ฉ์๋๋ฅผ private ๋์ฐ๋ฏธ ๋ฉ์๋๋ก ๋ฐ๋ก ์์ฑํ์ฌ ํ์ฉํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
- ์ค์ ํ์ ์ ์์๋ด๋ ค๋ฉด ์ด ๋์ฐ๋ฏธ ๋ฉ์๋๋ ์ ๋ค๋ฆญ ๋ฉ์๋์ฌ์ผ ํ๋ค.
ยท ๊ฒฐ๊ณผ์ ์ผ๋ก swap ๋ฉ์๋ ๋ด๋ถ์์๋ ๋ ๋ณต์กํ ์ ๋ค๋ฆญ ๋ฉ์๋๋ฅผ ์ด์ฉํ์ง๋ง, ๋๋ถ์ ์ธ๋ถ์์๋ ์์ผ๋์นด๋ ๊ธฐ๋ฐ์ ๋ฉ์ง ์ ์ธ์ ์ ์งํ ์ ์์๋ค.
- ์ฆ, swap ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ํด๋ผ์ด์ธํธ๋ ๋ณต์กํ swapHelper์ ์กด์ฌ๋ฅผ ๋ชจ๋ ์ฑ ๊ทธ ํํ์ ๋๋ฆฐ๋ค.
์์ดํ
32. ์ ๋ค๋ฆญ๊ณผ ๊ฐ๋ณ์ธ์๋ฅผ ํจ๊ป ์ธ ๋๋ ์ ์คํ๋ผ
ํต์ฌ ์ ๋ฆฌ
ยท ๊ฐ๋ณ์ธ์์ ์ ๋ค๋ฆญ์ ๊ถํฉ์ด ์ข์ง ์๋ค.
- ๊ฐ๋ณ์ธ์ ๊ธฐ๋ฅ์ ๋ฐฐ์ด์ ๋ ธ์ถํ์ฌ ์ถ์ํ๊ฐ ์๋ฒฝํ์ง ๋ชปํ๊ณ , ๋ฐฐ์ด๊ณผ ์ ๋ค๋ฆญ์ ํ์ ๊ท์น์ด ์๋ก ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
ยท ์ ๋ค๋ฆญ varargs ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด, ๋จผ์ ๊ทธ ๋ฉ์๋๊ฐ ํ์ ์์ ํ์ง ํ์ธํ ๋ค์ @SafeVarargs ์ ๋ํ ์ด์ ์ ๋ฌ์ ์ฌ์ฉํ๋ ๋ฐ ๋ถํธํจ์ด ์๊ฒ๋ ํ์.
์ ๋ค๋ฆญ๊ณผ ๊ฐ๋ณ์ธ์ ๋ฉ์๋
ยท ๊ฐ๋ณ์ธ์(varargs) ๋ฉ์๋(์์ดํ 53)์ ์ ๋ค๋ฆญ์ ์๋ฐ 5 ๋ ํจ๊ป ์ถ๊ฐ๋์์ง๋ง, ์ ์์ธ์ด์ง์ง ๋ชปํ๋ค.
ยท ๊ฐ๋ณ์ธ์๋ ๋ฉ์๋์ ๋๊ธฐ๋ ์ธ์์ ๊ฐ์๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์กฐ์ ํ ์ ์๊ฒ ํด์ฃผ๋๋ฐ, ๊ตฌํ ๋ฐฉ์์ ํ์ ์ด์๋ค.
- ๊ฐ๋ณ์ธ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๊ฐ๋ณ์ธ์๋ฅผ ๋ด๊ธฐ ์ํด ๋ฐฐ์ด์ด ์๋์ผ๋ก ํ๋ ๋ง๋ค์ด์ง๋๋ฐ, ์ด ๋ฐฐ์ด์ด ๋ด๋ถ๋ก ๊ฐ์ถฐ์ง์ง ์๊ณ ํด๋ผ์ด์ธํธ์ ๋ ธ์ถ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ varargs ๋งค๊ฐ๋ณ์์ ์ ๋ค๋ฆญ์ด๋ ๋งค๊ฐ๋ณ์ํ ํ์ ์ด ํฌํจ๋๋ฉด ์๊ธฐ ์ด๋ ค์ด ์ปดํ์ผ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๋ค.
์์ - ์ ๋ค๋ฆญ๊ณผ ๊ฐ๋ณ์ธ์๋ฅผ ํจ๊ป ์ฌ์ฉ
ยท ๋งค๊ฐ๋ณ์ํ ํ์ ์ ํ์ ์ด ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฉด ํ ์ค์ผ์ด ๋ฐ์ํ๋ค.
- ์ด๋ ๊ฒ ๋ค๋ฅธ ํ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ์ํฉ์๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋ ์์ฑํ ํ๋ณํ์ด ์คํจํ ์ ์์ผ๋, ์ ๋ค๋ฆญ ํ์ ์์คํ ์ด ์ฝ์ํ ํ์ ์์ ์ฑ์ ๊ทผ๊ฐ์ด ํ๋ค๋ฆฐ๋ค.
์ ๋ฉ์๋๋ ํ๋ณํํ๋ ๊ณณ์ด ๋ณด์ด์ง ์๋๋ฐ๋ ์ธ์๋ฅผ ๊ฑด๋ฐ ํธ์ถํ๋ฉด ClassCastException์ ๋์ง๋ค. ๋ง์ง๋ง ์ค์ ์ปดํ์ผ๋ฌ๊ฐ ์์ฑํ (๋ณด์ด์ง ์๋) ํ๋ณํ์ด ์จ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
ยท ์ด์ฒ๋ผ ํ์ ์์ ์ฑ์ด ๊นจ์ง๋ ์ ๋ค๋ฆญ varargs ๋ฐฐ์ด ๋งค๊ฐ๋ณ์์ ๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ ์์ ํ์ง ์๋ค.
์ ๋ค๋ฆญ varargs ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋ ๋ฉ์๋๋ฅผ ์ ์ธํ ์ ์๊ฒ ํ ์ด์ ๋?
ยท ์ ๋ค๋ฆญ ๋ฐฐ์ด์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ์์ฑํ๋ ๊ฑด ํ์ฉ๋์ง ์์ง๋ง, ์ ๋ค๋ฆญ varargs ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋ ๋ฉ์๋๋ ์ ์ธํ ์ ์๋ค. (๊ฒฝ๊ณ ๋ง ๋ฐ์ํ๊ณ , ์ปดํ์ผ์ ๋๋ค)
ยท ์ ๋ค๋ฆญ์ด๋ ๋งค๊ฐ๋ณ์ํ ํ์ ์ varargs ๋ฐฐ์ด์ ๋ฐ๋ ๋ฉ์๋๊ฐ ์ค๋ฌด์์ ๋งค์ฐ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ทธ๋์ ์ธ์ด ์ค๊ณ์๋ ์ด ๋ชจ์์ ์์ฉํ๊ธฐ๋ก ํ๋ค.
ยท ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ ์ด๋ฐ ๋ฉ์๋๋ฅผ ์ฌ๋ฟ ์ ๊ณตํ๋ค. ๋คํ์ด ์ด๋ค์ ํ์ ์์ ํ๋ค.
ex) Arrays.asList<T... a), Collections.addAll(Collection<? super T> c, T... elements)
ยท ์๋ฐ 7 ์ ์๋ ์ ๋ค๋ฆญ ๊ฐ๋ณ์ธ์ ๋ฉ์๋์ ์์ฑ์๊ฐ ํธ์ถ์ ์ชฝ์์ ๋ฐ์ํ๋ ๊ฒฝ๊ณ ์ ๋ํด ํด์ค ์ ์๋ ์ผ์ด ์์๋ค. ๋ฐ๋ผ์ ์ด๋ฐ ๋ฉ์๋๋ ์ฌ์ฉํ๊ธฐ์ ์ข ๊บผ๋ฆผ์นํ๋ค.
- ์ฌ์ฉ์๋ ์ด ๊ฒฝ๊ณ ๋ค์ ๊ทธ๋ฅ ๋๊ฑฐ๋, ํธ์ถํ๋ ๊ณณ ๋ง๋ค @SuppressWarnings("unchecked") ์ ๋ํ ์ด์ ์ ๋ฌ์ ๊ฒฝ๊ณ ๋ฅผ ์จ๊ฒจ์ผ ํ๋ค.
- ์ด๋ ์ง๋ฃจํ ์์ ์ด๊ณ , ๊ฐ๋ ์ฑ์ ๋จ์ด๋จ๋ฆฌ๊ณ , ์ง์ง ๋ฌธ์ ๋ฅผ ์๋ ค์ฃผ๋ ๊ฒฝ๊ณ ๋ง์ ์จ๊ธฐ๋ ์ ์ข์ ๊ฒฐ๊ณผ๋ก ์ด์ด์ก๋ค.
ยท ์๋ฐ 7๋ถํฐ @SafeVarargs ์ ๋ํ ์ด์ ์ด ์ถ๊ฐ๋์ด ์ ๋ค๋ฆญ ๊ฐ๋ณ์ธ์ ๋ฉ์๋ ์์ฑ์๊ฐ ํด๋ผ์ด์ธํธ ์ธก์์ ๋ฐ์ํ๋ ๊ฒฝ๊ณ ๋ฅผ ์จ๊ธธ ์ ์๋ค.
- @SafeVarargs ์ ๋ํ ์ด์ ์ ๋ฉ์๋ ์์ฑ์๊ฐ ๊ทธ ๋ฉ์๋์ ํ์ ์์ ํจ์ ๋ณด์ฅํ๋ ์ฅ์น๋ค. ์ปดํ์ผ๋ฌ๋ ์ด ์ฝ์์ ๋ฏฟ๊ณ ๊ทธ ๋ฉ์๋๊ฐ ์์ ํ์ง ์์ ์ ์๋ค๋ ๊ฒฝ๊ณ ๋ฅผ ๋ ์ด์ ํ์ง ์๋๋ค.
ยท @SafeVarargs ์ ๋ํ ์ด์ ์ ์ฌ์ ์ํ ์ ์๋ ๋ฉ์๋์๋ง ๋ฌ์์ผ ํ๋ค.
- ์ฌ์ ์ํ ๋ฉ์๋๋ ์์ ํ ์ง๋ ๋ณด์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์๋ฐ 8์์ ์ด ์ ๋ํ ์ด์ ์ ์ค์ง ์ ์ ๋ฉ์๋์ final ์ธ์คํด์ค ๋ฉ์๋์๋ง ๋ถ์ผ ์ ์๋ค.
- ์๋ฐ 9๋ถํฐ๋ private ์ธ์คํด์ค ๋ฉ์๋์๋ ํ์ฉ๋๋ค.
๋ฉ์๋๊ฐ ์์ ํ์ง ์ด๋ป๊ฒ ํ์ ํ ์ ์์๊น?
ยท ๊ฐ๋ณ ์ธ์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ varargs ๋งค๊ฐ๋ณ์๋ฅผ ๋ด๋ ์ ๋ค๋ฆญ ๋ฐฐ์ด์ด ๋ง๋ค์ด์ง๋ค. ๋ฉ์๋๊ฐ ์ด ๋ฐฐ์ด์ ์๋ฌด๊ฒ๋ ์ ์ฅํ์ง ์๊ณ (๊ทธ ๋งค๊ฐ๋ณ์๋ค์ ๋ฎ์ด์ฐ์ง ์๊ณ ), ๊ทธ ๋ฐฐ์ด์ ์ฐธ์กฐ๊ฐ ๋ฐ์ผ๋ก ๋ ธ์ถ๋์ง ์๋๋ค๋ฉด ํ์ ์์ ํ๋ค.
- ์ฆ, varargs ๋งค๊ฐ๋ณ์ ๋ฐฐ์ด์ด ํธ์ถ์๋ก๋ถํฐ ๊ทธ ๋ฉ์๋๋ก ์์ํ๊ฒ ์ธ์๋ค์ ์ ๋ฌํ๋ ์ผ๋ง ํ๋ค๋ฉด, ๊ทธ ๋ฉ์๋๋ ์์ ํ๋ค.
ํ์ ์์ ์ฑ์ ๊นจ๋ ์ฌ๋ก
ยท varargs ๋งค๊ฐ๋ณ์ ๋ฐฐ์ด์ ์๋ฌด๊ฒ๋ ์ ์ฅํ์ง ์๊ณ ๋ ํ์ ์์ ์ฑ์ ๊นฐ์๋ ์์ผ๋ ์ฃผ์ํด์ผ ํ๋ค.
๋ค์์ ๊ฐ๋ณ์ธ์๋ก ๋์ด์จ ๋งค๊ฐ๋ณ์๋ค์ ๋ฐฐ์ด์ ๋ด์ ๋ฐํํ๋ ์ ๋ค๋ฆญ ๋ฉ์๋๋ค.
์ด ๋ฉ์๋๊ฐ ๋ฐํํ๋ ๋ฐฐ์ด์ ํ์ ์ ์ด ๋ฉ์๋์ ์ธ์๋ฅผ ๋๊ธฐ๋ ์ปดํ์ผํ์์ ๊ฒฐ์ ๋๋๋ฐ, ๊ทธ ์์ ์๋ ์ปดํ์ผ๋ฌ์๊ฒ ์ถฉ๋ถํ ์ ๋ณด๊ฐ ์ฃผ์ด์ง์ง ์์ ํ์ ์ ์๋ชป ํ๋จํ ์ ์๋ค. ๋ฐ๋ผ์ ์์ ์ varargs ๋งค๋ฐฐ๋ณ์ ๋ฐฐ์ด์ ๊ทธ๋๋ก ๋ฐํํ๋ฉด ํ ์ค์ผ์ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ ์ชฝ์ ์ฝ์คํ๊น์ง ์ ์ดํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ ์ ์๋ค.
๋ค์ ๋ฉ์๋๋ T ํ์ ์ธ์ 3๊ฐ๋ฅผ ๋ฐ์ ๊ทธ์ค 2๊ฐ๋ฅผ ๋ฌด์์๋ก ๊ณจ๋ผ ๋ด์ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
์ด ๋ฉ์๋๋ฅผ ๋ณธ ์ปดํ์ผ๋ฌ๋ toArray์ ๋๊ธธ T ์ธ์คํด์ค 2๊ฐ๋ฅผ ๋ด์ varargs ๋งค๊ฐ๋ณ์ ๋ฐฐ์ด์ ๋ง๋๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ์ด ์ฝ๋๊ฐ ๋ง๋๋ ๋ฐฐ์ด์ ํ์ ์ Object[]์ด๋ค. pickTwo์ ์ด๋ค ํ์ ์ ๊ฐ์ฒด๋ฅผ ๋๊ธฐ๋๋ผ๋ ๋ด์ ์ ์๋ ๊ฐ์ฅ ๊ตฌ์ฒด์ ์ธ ํ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ toArray ๋ฉ์๋๊ฐ ๋๋ ค์ค ์ด ๋ฐฐ์ด(Object[] ํ์ )์ด ๊ทธ๋๋ก pickTwo๋ฅผ ํธ์ถํ ํด๋ผ์ด์ธํธ๊น์ง ์ ๋ฌ๋๋ค.
์ด์ pickTwo๋ฅผ ์ฌ์ฉํ๋ main ๋ฉ์๋๋ฅผ ๋ณด์.
๋ณ๋ค๋ฅธ ๊ฒฝ๊ณ ์์ด ์ปดํ์ผ๋์ง๋ง, ์คํํ๋ฉด ClassCastException์ ๋์ง๋ค.
pickTwo์ ๋ฐํ๊ฐ์ attributes์ ์ ์ฅํ๊ธฐ ์ํด String[]๋ก ํ๋ณํํ๋ ์ฝ๋๋ฅผ ์ปดํ์ผ๋ฌ๊ฐ ์๋ ์์ฑํ๊ธฐ ๋๋ฌธ์ด๋ค. Object[]๋ String[]์ ํ์ ํ์ ์ด ์๋๋ฏ๋ก ์ด ํ๋ณํ์ ์คํจํ๋ค.
ํ ์ค์ผ์ ๋ฐ์์ํจ ์์ธ์ toArray๋ก๋ถํฐ ๋ ๋จ๊ณ๋ ๋จ์ด์ ธ ์๊ณ , varargs ๋งค๊ฐ๋ณ์ ๋ฐฐ์ด์ ์ค์ ๋งค๊ฐ๋ณ์๊ฐ ์ ์ฅ๋ ํ ๋ณ๊ฒฝ๋ ์ ๋ ์๋ค.
ยท ์ด ์๋ ์ ๋ค๋ฆญ varargs ๋งค๊ฐ๋ณ์ ๋ฐฐ์ด์ ๋ค๋ฅธ ๋ฉ์๋๊ฐ ์ ๊ทผํ๋๋ก ํ์ฉํ๋ฉด ์์ ํ์ง ์๋ค๋ ์ ์ ์๊ธฐ์ํจ๋ค.
์ ๋ค๋ฆญ varargs ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ๊ฒ ์ฌ์ฉํ๋ ์์
ยท ์ ๋ค๋ฆญ varargs ๋งค๊ฐ๋ณ์ ๋ฐฐ์ด์ ๋ค๋ฅธ ๋ฉ์๋๊ฐ ์ ๊ทผํด๋ ์์ ํ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์๋ค.
1. @SafeVarargs๋ก ์ ๋๋ก ์ ๋ํ ์ดํธ๋ ๋ ๋ค๋ฅธ varargs ๋ฉ์๋์ ๋๊ธฐ๋ ๊ฒ์ ์์ ํ๋ค.
2. ๋ฐฐ์ด ๋ด์ฉ์ ์ผ๋ถ ํจ์๋ฅผ ํธ์ถ๋ง ํ๋(varargs๋ฅผ ๋ฐ์ง ์๋) ์ผ๋ฐ ๋ฉ์๋์ ๋๊ธฐ๋ ๊ฒ์ ์์ ํ๋ค.
๋ค์ ์ฝ๋๋ ์ ๋ค๋ฆญ varargs ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ๊ฒ ์ฌ์ฉํ๋ ์ ํ์ ์ธ ์๋ค.
flatten ๋ฉ์๋๋ ์์ ๊ฐ์์ ๋ฆฌ์คํธ๋ฅผ ์ธ์๋ก ๋ฐ์, ๋ฐ์ ์์๋๋ก ๊ทธ ์์ ๋ชจ๋ ์์๋ฅผ ํ๋์ฉ ๋ฆฌ์คํธ๋ก ์ฎ๊ฒจ ๋ด์ ๋ฐํํ๋ค.
์ด ๋ฉ์๋์์๋ @SafeVarargs ์ ๋ํ ์ด์ ์ด ๋ฌ๋ ค ์์ด ์ ์ธํ๋ ์ชฝ๊ณผ ์ฌ์ฉํ๋ ์ชฝ ๋ชจ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ด์ง ์๋๋ค.
ยท @SafeVarargs ์ ๋ํ ์ด์ ์ ์ฌ์ฉํด์ผ ํ ๋๋ฅผ ์ ํ๋ ๊ท์น: ์ ๋ค๋ฆญ์ด๋ ๋งค๊ฐ๋ณ์ํ ํ์ ์ varargs ๋งค๊ฐ๋ณ์ํ ํ์ ์ varargs ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋ ๋ชจ๋ ๋ฉ์๋์ @SafeVarargs๋ฅผ ๋ฌ๋ผ.
- ๊ทธ๋์ผ ์ฌ์ฉ์๋ฅผ ํท๊ฐ๋ฆฌ๊ฒ ํ๋ ์ปดํ์ผ๋ฌ ๊ฒฝ๋ก๋ฅผ ์์จ ์ ์๋ค.
- ์ด ๋ง์ ์์ ํ์ง ์์ varargs ๋ฉ์๋๋ ์ ๋ ์์ฑํด์๋ ์ ๋๋ค๋ ๋ป์ด๋ค.
ยท ์ฐ๋ฆฌ๊ฐ ํต์ ํ ์ ์๋ ๋ฉ์๋ ์ค ์ ๋ค๋ฆญ varargs ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉฐ ํ ์ค์ผ ๊ฒฝ๊ณ ๊ฐ ๋จ๋ ๋ฉ์๋๊ฐ ์๋ค๋ฉด, ๊ทธ ๋ฉ์๋๊ฐ ์ง์ง ์์ ํ์ง ์ ๊ฒํ์.
- ๋ค์ ๋ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๋ ์ ๋ค๋ฆญ varargs ๋ฉ์๋๋ ์์ ํ๋ค. ๋ ์ค ํ๋๋ผ๋ ์ด๊ฒผ๋ค๋ฉด ์์ ํ์.
1. varargs ๋งค๊ฐ๋ณ์ ๋ฐฐ์ด์ ์๋ฌด๊ฒ๋ ์ ์ฅํ์ง ์๋๋ค.
2. ๊ทธ ๋ฐฐ์ด(ํน์ ๋ณต์ ๋ณธ)์ ์ ๋ขฐํ ์ ์๋ ์ฝ๋์ ๋ ธ์ถํ์ง ์๋๋ค.
ยท @SafeVarargs ์ ๋ํ ์ด์ ์ ์ฌ์ฉํ์ง ์๊ณ , ์์ดํ 28์ ์กฐ์ธ์ ๋ฐ๋ผ varargs ๋งค๊ฐ๋ณ์๋ฅผ List ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ฟ ์๋ ์๋ค.
์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋์ธ List.of๋ฅผ ํ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ด ๋ฉ์๋์ ์์ ๊ฐ์์ ์ธ์๋ฅผ ๋๊ธธ ์ ์๋ค.
- List.of์๋ @SafeVarargs ์ ๋ํ ์ด์ ์ด ๋ฌ๋ ค ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.
ยท ์ด ๋ฐฉ์์ ์ฅ์ ์ ์ปดํ์ผ๋ฌ๊ฐ ์ด ๋ฉ์๋์ ํ์ ์์ ์ฑ์ ๊ฒ์ฆํ ์ ์๋ค๋ ๋ฐ ์๋ค.
- @SafeVarargs ์ ๋ํ ์ด์ ์ ์ง์ ๋ฌ์ง ์์๋ ๋๊ณ , ์ค์๋ก ์์ ํ๋ค๊ณ ํ๋จํ ๊ฑฑ์ ๋ ์๋ค.
ยท ์ด ๋ฐฉ์์ ๋จ์ ์ ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ์ด์ง ์ง์ ๋ถํด์ง๊ณ , ์๋๊ฐ ์กฐ๊ธ ๋๋ ค์ง ์ ์๋ค๋ ์ ๋๋ค.
ยท ์ด ๋ฐฉ์์ ์์ toArray ๋ฉ์๋์ฒ๋ผ varargs ๋ฉ์๋๋ฅผ ์์ ํ๊ฒ ์์ฑํ๋ ๊ฒ ๋ถ๊ฐ๋ฅํ ์ํฉ์๋ ์ธ ์ ์๋ค.
- ์ด toArray์ List ๋ฒ์ ์ด ๋ฐ๋ก ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ List.of๋ค.
์์ดํ
33. ํ์
์์ ์ด์ข
์ปจํ
์ด๋๋ฅผ ๊ณ ๋ คํ๋ผ
ํต์ฌ ์ ๋ฆฌ
ยท ์ปฌ๋ ์ API๋ก ๋ํ๋๋ ์ผ๋ฐ์ ์ธ ์ ๋ค๋ฆญ ํํ์์๋ ํ ์ปจํ ์ด๋๊ฐ ๋ค๋ฃฐ ์ ์๋ ํ์ ๋งค๊ฐ๋ณ์์ ์๊ฐ ๊ณ ์ ๋์ด ์๋ค. ํ์ง๋ง ์ปจํ ์ด๋ ์์ฒด๊ฐ ์๋ ํค๋ฅผ ํ์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊พธ๋ฉด ์ด๋ฐ ์ ์ฝ์ด ์๋ ํ์ ์์ ์ด์ข ์ปจํ ์ด๋๋ฅผ ๋ง๋ค ์ ์๋ค.
- ํ์ ์์ ์ด์ข ์ปจํ ์ด๋๋ Class๋ฅผ ํค๋ก ์ฐ๋ฉฐ, ์ด๋ฐ ์์ผ๋ก ์ฐ์ด๋ Class ๊ฐ์ฒด๋ฅผ ํ์ ํ ํฐ์ด๋ผ ํ๋ค.
- ์ง์ ๊ตฌํํ ํค ํ์ ๋ ์ธ ์ ์๋ค. ์์ปจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ(์ปจํ ์ด๋)์ ํํํ DatabaseRow ํ์ ์๋ ์ ๋ค๋ฆญ ํ์ ์ธ Column<T>๋ฅผ ํค๋ก ์ฌ์ฉํ ์ ์๋ค.
๋จ์ผ ์์ ์ปจํ ์ด๋
ยท ์ ๋ค๋ฆญ์ Set<E>, Map<K, V> ๋ฑ ๋จ์ผ์์ ์ปจํ ์ด๋์ ํํ ์ฐ์ธ๋ค.
ยท ํ๋์ ์ปจํ ์ด๋์์ ๋งค๊ฐ๋ณ์ํํ ์ ์๋ ํ์ ์ ์๋ ์ ํ๋๋ค.
- ์์ธ: ๋งค๊ฐ๋ณ์ํ๋๋ ๋์์ ์์๊ฐ ์๋ ์ปจํ ์ด๋ ์์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ปจํ ์ด๋์ ์ผ๋ฐ์ ์ธ ์ฉ๋์ ๋ง๊ฒ ์ค๊ณ๋ ๊ฒ์ด๋ ๋ฌธ์ ๋ ๊ฑด ์๋ค. Set์๋ ์์ ํ์ ์ ๋ปํ๋ ๋จ ํ๋์ ํ์ ๋งค๊ฐ๋ณ์๋ง ์์ผ๋ฉด ๋๊ณ , Map์๋ ํค์ ๊ฐ์ด ํ์ ์ ๋ปํ๋ 2๊ฐ๋ง ํ์ํ ์์ด๋ค.
ํ์ ์์ ์ด์ข ์ปจํ ์ด๋
ยท ์์์ ๋งํ ์ฌ๋ก๋ณด๋ค ๋ ์ ์ฐํ ์๋จ์ด ํ์ํ ๋๊ฐ ์ข ์ข ์๋ค.
ex) ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์ ์์ ๊ฐ์์ ์ด์ ๊ฐ์ง ์ ์๋๋ฐ, ๋ชจ๋ ์ด์ ํ์ ์์ ํ๊ฒ ์ด์ฉํ ์ ์๋ค๋ฉด ๋ฉ์ง ๊ฒ์ด๋ค.
ยท ์ปจํ ์ด๋ ๋์ ํค๋ฅผ ๋งค๊ฐ๋ณ์ํํ ๋ค์, ์ปจํ ์ด๋์ ๊ฐ์ ๋ฃ๊ฑฐ๋ ๋บ ๋ ๋งค๊ฐ๋ณ์ํํ ํค๋ฅผ ํจ๊ป ์ ๊ณตํ๋ ์์ผ๋ก ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ๋ค๋ฆญ ํ์ ์์คํ ์ด ๊ฐ์ ํ์ ์ด ํค์ ๊ฐ์์ ๋ณด์ฅํด ์ค๋ค.
- ์ด๋ฌํ ์ค๊ณ ๋ฐฉ์์ ํ์ ์์ ์ด์ข ์ปจํ ์ดํฐ ํจํด(type safe heterogeneous container pattern)์ด๋ผ๊ณ ํ๋ค.
์์ - ํ์ ์์ ์ด์ข ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ Favorites ํด๋์ค
ํ์ ๋ณ๋ก ์ฆ๊ฒจ ์ฐพ๋ ์ธ์คํด์ค๋ฅผ ์ ์ฅํ๊ณ , ๊ฒ์ํ ์ ์๋ Favorites ํด๋์ค๋ฅผ ์๊ฐํด๋ณด์.
ยท ๊ฐ ํ์ ์ Class ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์ํํ ํค ์ญํ ๋ก ์ฌ์ฉํ๋ฉด ๋๋๋ฐ, ์ด ๋ฐฉ์์ด ๋์ํ๋ ์ด์ ๋ class์ ํด๋์ค๊ฐ ์ ๋ค๋ฆญ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- class ๋ฆฌํฐ๋ด ํ์ ์ Class๊ฐ ์๋ Class<T>๋ค.
ex) String.class ํ์ ์ Class<String>์ด๊ณ Integer.class์ ํ์ ์ Class<Integer>์ด๋ค.
- ์ปดํ์ผํ์ ํ์ ์ ๋ณด์ ๋ฐํ์ ํ์ ์ ๋ณด๋ฅผ ์์๋ด๊ธฐ ์ํด ๋ฉ์๋๋ค์ด ์ฃผ๊ณ ๋ฐ๋ class ๋ฆฌํฐ๋ด์ ํ์ ํ ํฐ(type token)์ด๋ผ ํ๋ค.
์ ์ฝ๋๋ Favorites ํด๋์ค์ API๋ก, ํค๊ฐ ๋งค๊ฐ๋ณ์ํ๋์๋ค๋ ์ ๋ง ๋นผ๋ฉด ์ผ๋ฐ ๋งต์ฒ๋ผ ๋ณด์ผ๋ค.
ํด๋ผ์ด์ธํธ๋ ์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์ป์ด์ฌ ๋ Class ๊ฐ์ฒด๋ฅผ ์๋ ค์ฃผ๋ฉด ๋๋ค.
๋ค์์ Favorites ํด๋๋ฅผ ์ฌ์ฉํ๋ ์์๋ค. ์ฆ๊ฒจ ์ฐพ๋ String, Integer, Class ์ธ์คํด์ค๋ฅผ ์ ์ฅ, ๊ฒ์, ์ถ๋ ฅํ๊ณ ์๋ค.
์ด ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ํ ๋๋ก Java cafebabe Favorites๋ฅผ ์ถ๋ ฅํ๋ค.
ยท Favorites ์ธ์คํด์ค์ ์ฅ์ : 1. ํ์ ์์ ํ๋ค.
- String์ ์์ฒญํ๋๋ฐ, Integer๋ฅผ ๋ฐํํ๋ ์ผ์ ์๋ค.
2. ๋ชจ๋ ํค์ ํ์ ์ด ์ ๊ฐ๊ฐ์ด๋ผ, ์ผ๋ฐ์ ์ธ ๋งต๊ณผ ๋ฌ๋ฆฌ ์ฌ๋ฌ ๊ฐ์ง ํ์ ์ ์์๋ฅผ ๋ด์ ์ ์๋ค.
- Favorites๋ ํ์ ์์ ์ด์ข (heterogeneous) ์ปจํ ์ด๋๋ผ ํ ๋งํ๋ค.
ยท favorites์ ํ์ ์ Map<Class<?>, Object>์ด๋ค.
๋นํ์ ์ ์์ผ๋์นด๋ ํ์ ์ด๋ผ ์ด ๋งต ์์ ์๋ฌด๊ฒ๋ ๋ฃ์ ์ ์๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง, ์ฌ์ค์ ๊ทธ ๋ฐ๋๋ค. ์์ผ๋์นด๋ ํ์ ์ด ์ค์ฒฉ(nested)๋์๋ค๋ ์ ์ ๊นจ๋ฌ์์ผ ํ๋ค. ๋งต์ด ์๋๋ผ ํค๊ฐ ์์ผ๋์นด๋ ํ์ ์ธ ๊ฒ์ด๋ค. ์ด๋ ๋ชจ๋ ํค๊ฐ ์๋ก ๋ค๋ฅธ ๋งค๊ฐ๋ณ์ํ ํ์ ์ผ ์ ์๋ค๋ ๋ป์ด๋ค.
- ๋ค์ํ ํ์ ์ ์ง์ํ๋ ํ์ด ์ฌ๊ธฐ์ ๋์จ๋ค.
ex) Class<String>, Class<Integer>
ยท favorites ๋งต์ ๊ฐ ํ์ ์ ๋จ์ํ Object๋ค.
์ด ๋งต์ ํค์ ๊ฐ ์ฌ์ด์ ํ์ ๊ด๊ณ๋ฅผ ๋ณด์ฆํ์ง ์๋๋ค๋ ๋ง์ด๋ค. ์ฆ, ๋ชจ๋ ๊ฐ์ด ํค๋ก ๋ช ์ํ ํ์ ์์ ๋ณด์ฆํ์ง ์๋๋ค. ์๋ฐ์ ํ์ ์์คํ ์์๋ ์ด ๊ด๊ณ๋ฅผ ๋ช ์ํ ๋ฐฉ๋ฒ์ด ์๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ์ด ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํจ์ ์๊ณ ์๊ณ , ์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ๊ฒ์ํ ๋ ๊ทธ ์ด์ ์ ๋๋ฆฌ๊ฒ ๋๋ค.
ยท putFavorites๋ ์ฃผ์ด์ง Class ๊ฐ์ฒด์ ์ฆ๊ฒจ์ฐพ๊ธฐ ์ธ์คํด์ค๋ฅผ favorites์ ์ถ๊ฐํด ๊ด๊ณ๋ฅผ ๋งบ๋๋ค.
ยท getFavorites ์ฝ๋๋ ์ฃผ์ด์ง Class ๊ฐ์ฒด์ ํด๋นํ๋ ๊ฐ์ favorites ๋งต์์ ๊บผ๋ธ๋ค.
์ด ๊ฐ์ฒด๊ฐ ๋ฐ๋ก ๋ฐํํด์ผ ํ ๊ฐ์ฒด๊ฐ ๋ง์ง๋ง, ์๋ชป๋ ์ปดํ์ผํ์ ํ์ ์ ๊ฐ์ง๊ณ ์๋ค. ์ด ๊ฐ์ฒด์ ํ์ ์ favorites ๋งต์ ๊ฐ ํ์ ์ธ Object์ด๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฅผ T๋ก ๋ฐ๊ฟ ๋ฐํํด์ผ ํ๋ค.
- ์ฆ, getFavorite ๊ตฌํ์ Class cast ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ Class ๊ฐ์ฒด๊ฐ ๊ฐ๋ฆฌํค๋ ํ์ ์ผ๋ก ๋์ ํ๋ณํํ๋ค.
- cast ๋ฉ์๋๋ ํ๋ณํ ์ฐ์ฐ์์ ๋์ ๋ฒ์ ์ด๋ค. ์ฃผ์ด์ง ์ธ์๊ฐ Class ๊ฐ์ฒด๊ฐ ์๋ ค์ฃผ๋ ํ์ ์ธ์คํด์ค์ธ์ง ๊ฒ์ฌํ์ฌ ๋ง๋ค๋ฉด ๊ทธ ์ธ์๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๊ณ , ์๋๋ฉด ClassCastException์ ๋์ง๋ค.
ยท cast ๋ฉ์๋๊ฐ ์ธ์๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๊ธฐ๋ง ํ๋๋ฐ, ๊ตณ์ด ์ฌ์ฉํ๋ ์ด์ ๋ ํด๋น ๋ฉ์๋์ ์๊ทธ๋์ฒ๊ฐ Class ํด๋์ค๊ฐ ์ ๋ค๋ฆญ์ด๋ผ๋ ์ด์ ์ ์๋ฒฝํ ํ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค.
cast์ ๋ฐํ ํ์ ์ Class ๊ฐ์ฒด์ ํ์ ๋งค๊ฐ๋ณ์์ ๊ฐ๋ค.
์ด๊ฒ์ getFavorite ๋ฉ์๋์ ํ์ํ ๊ธฐ๋ฅ์ผ๋ก, T๋ก ๋น๊ฒ์ฌ ํ๋ณํํ๋ ์์ค ์์ด๋ Favorites๋ฅผ ํ์ ์์ ํ๊ฒ ๋ง๋๋ ๋น๊ฒฐ์ด๋ค.
ยท Favorites ํด๋์ค์ ์ ์ฝ:
1. ์ ์์ ์ธ ํด๋ผ์ด์ธํธ๊ฐ Class ๊ฐ์ฒด๋ฅผ ๋ก ํ์ (์์ดํ 26)์ผ๋ก ๋๊ธฐ๋ฉด Favorites ์ธ์คํด์ค์ ํ์ ์์ ์ฑ์ด ์ฝ๊ฒ ๊นจ์ง๋ค.
- ํ์ง๋ง ํด๋ผ์ด์ธํธ ์ฝ๋์์ ์ปดํ์ผํ ๋ ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๊ฐ ๋ฐ ๊ฒ์ด๋ค.
Favorites๊ฐ ํ์ ๋ถ๋ณ์์ ์ด๊ธฐ๋ ์ผ์ด ์๋๋ก ๋ณด์ฅํ๋ ค๋ฉด putFavorites ๋ฉ์๋์์ ์ธ์๋ก ์ฃผ์ด์ง instance์ ํ์ ์ด type์ผ๋ก ๋ช ์ํ ํ์ ๊ณผ ๊ฐ์์ง ํ์ธํ๋ฉด ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋์ ํ๋ณํ์ ์ฌ์ฉํ๋ค.
java.util.collection์๋ checkedSet, checkedList, checkedMap ๊ฐ์ ๋ฉ์๋๊ฐ ์๋๋ฐ, ๋ฐ๋ก ์ด ๋ฐฉ์์ ์ ์ฉํ ์ปฌ๋ ์ ๋ํผ๋ค์ด๋ค.
์ด ์ ์ ํฉํฐ๋ฆฌ๋ค์ ์ปฌ๋ ์ (ํน์ ๋งต)๊ณผ ํจ๊ป 1๊ฐ(ํน์ 2๊ฐ)์ Class ๊ฐ์ฒด๋ฅผ ๋ฐ๋๋ค.
์ด ๋ฉ์๋๋ค์ ๋ชจ๋ ์ ๋ค๋ฆญ์ด๋ผ Class ๊ฐ์ฒด์ ์ปฌ๋ ์ ์ ์ปดํ์ผํ์ ํ์ ์ด ๊ฐ์์ ๋ณด์ฅํ๋ค. ๋ํ ์ด ๋ํผ๋ค์ ๋ด๋ถ ์ปฌ๋ ์ ๋ค์ ์ค์ฒดํํ๋ค. ์ด ๋ํผ๋ค์ ์ ๋ค๋ฆญ๊ณผ ๋ก ํ์ ์ ์์ด ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ์ปฌ๋ ์ ์ ์๋ชป๋ ํ์ ์ ์์๋ฅผ ๋ฃ์ง ๋ชปํ๊ฒ ์ถ์ ํ๋ ๋ฐ ๋์์ ์ค๋ค.
ex) ๋ฐํ์์ Coin์ Collection<Stamp>์ ๋ฃ์ผ๋ ค ํ๋ฉด ClassCastException์ ๋์ง๋ค.
2. ์ค์ฒดํ ๋ถ๊ฐ ํ์ (์์ดํ 28)์๋ ์ฌ์ฉํ ์ ์๋ค.
- ์ฆ, String์ด๋ String[]์ ์ ์ฅํ ์ ์์ด๋ List<String>์ ์ ์ฅํ ์ ์๋ค. ์ ์ฅํ๋ คํ๋ฉด ์ฝ๋๋ ์ปดํ์ผ๋์ง ์๋๋ค. List<String>์ฉ Class๋ฅผ ์ป์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ํด๋น ์ ์ฝ์ ๋ํ ๋ง์กฑ์ค๋ฌ์ด ์ฐํ๋ก๋ ์๋ค.
- (์ฎ๊ธฐ์ด) ํด๋น ์ ์ฝ์ ์ํผ ํ์ ํ ํฐ์ผ๋ก ํด๊ฒฐํ๋ ค๋ ์๋๋ ์๋ค. ํ์ง๋ง, ์ด ๋ฐฉ๋ฒ๋ ์๋ฒฝํ์ง ์์ผ๋ฏ๋ก ์ฃผ์ํด์ ์ฌ์ฉํ์.
TODO: ์ํผ ํ์ ํ ํฐ(super type token)
ยท Favorites๊ฐ ์ฌ์ฉํ๋ ํ์ ํ ํฐ์ ๋นํ์ ์ ์ด๋ค.
- ์ฆ, getFavorite์ putFavorite๋ ์ด๋ค Class ๊ฐ์ฒด๋ ๋ฐ์๋ค์ธ๋ค.
- ์ด ๋ฉ์๋๋ค์ด ํ์ฉํ๋ ํ์ ์ ์ ํํ๊ณ ์ถ๋ค๋ฉด ํ์ ํ์ ํ ํฐ์ ์ฌ์ฉํ์.
- ํ์ ํ์ ํ ํฐ: ํ์ ์ ํ์ ๋งค๊ฐ๋ณ์(์์ดํ 29)๋ ํ์ ์ ์์ผ๋์นด๋(์์ดํ 31)๋ฅผ ์ฌ์ฉํ์ฌ ํํ ๊ฐ๋ฅํ ํ์ ์ ์ ํํ๋ ํ์ ํ ํฐ
ยท ์ ๋ํ ์ด์ API(์์ดํ 39)๋ ํ์ ์ ํ์ ํ ํฐ์ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋ค.
๋ค์ ์ฝ๋๋ AnnotatedElement ์ธํฐํ์ด์ค์ ์ ์ธ๋ ๋ฉ์๋๋ก ๋์ ์์์ ๋ฌ๋ ค ์๋ ์ ๋ํ ์ด์ ์ ๋ฐํ์ ์ ์ฝ์ด์จ๋ค.
์ด ๋ฉ์๋๋ ๋ฆฌํ๋ ์ ์ ๋์์ด ๋๋ ํ์ ๋ค(java.lang.Class<T>, java.lang.reflect.Method, java.lang,reflect.Field)์ ํ๋ก๊ทธ๋จ ์์๋ฅผ ํํํ๋ ํ์ ๋ค์์ ๊ตฌํํ๋ค.
annotationType ์ธ์๋ ์ ๋ํ ์ด์ ํ์ ์ ๋ปํ๋ ํ์ ์ ํ์ ํ ํฐ์ด๋ค. ์ด ๋ฉ์๋๋ ํ ํฐ์ผ๋ก ๋ช ์ํ ํ์ ์ ์ ๋ํ ์ด์ ์ด ๋์ ์์์ ๋ฌ๋ ค ์๋ค๋ฉด ๊ทธ ์ ๋ํ ์ด์ ์ ๋ฐํํ๊ณ , ์๋ค๋ฉด null์ ๋ฐํํ๋ค.
- ์ฆ, ์ ๋ํ ์ด์ ๋ ์์๋ ๊ทธ ํค๊ฐ ์ ๋ํ ์ด์ ํ์ ์ธ ํ์ ์ด์ข ์ปจํ ์ด๋๋ค.
Class<?> ํ์ ์ ๊ฐ์ฒด๋ฅผ ํ์ ์ ํ์ ํ ํฐ์ ๋ฐ๋ ๋ฉ์๋(getAnnotation)์ ๋๊ฒจ์ผ ํ๋ค๋ฉด?
๊ฐ์ฒด๋ฅผ Class<? extends Annotaion>์ผ๋ก ํ๋ณํํ ์๋ ์์ง๋ง, ์ด ํ๋ณํ์ ๋น๊ฒ์ฌ์ด๋ฏ๋ก ์ปดํ์ผํ๋ฉด ๊ฒฝ๊ณ ๊ฐ ๋ฌ๋ค(์์ดํ 27).
Class ํด๋์ค๋ ์ด๋ฐ ํ๋ณํ์ ์์ ํ๊ณ , ๋์ ์ผ๋ก ์ํํด์ฃผ๋ asSubClass ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ ํธ์ถ๋ ์ธ์คํด์ค ์์ ์ Class ๊ฐ์ฒด๋ฅผ ์ธ์๊ฐ ๋ช ์ํ ํด๋์ค๋ก ํ๋ณํํ๋ค.
- ํ๋ณํ๋๋ค๋ ๊ฒ์ ์ด ํด๋์ค๊ฐ ์ธ์๋ก ๋ช ์ํ ํด๋์ค์ ํ์ ํด๋์ค๋ผ๋ ๋ป์ด๋ค.
ํ๋ณํ์ ์ฑ๊ณตํ๋ฉด ์ธ์๋ก ๋ฐ์ ํด๋์ค ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ณ , ์คํจํ๋ฉด ClassCastException์ ๋์ง๋ค.
๋ค์์ ์ปดํ์ผ ์์ ์๋ ํ์ ์ ์ ์ ์๋ ์ ๋ํ ์ด์ ์ asSubclass ๋ฉ์๋๋ฅผ ๋ฐํ์์ ์ฝ์ด๋ด๋ ์๋ค. ์ด ๋ฉ์๋๋ ์ค๋ฅ๋ ๊ฒฝ๊ณ ์์ด ์ปดํ์ผ ๋๋ค.
์ฎ๊ธด์ด์ ๋ง
ยท ๋งค๊ฐ๋ณ์(parameter)๋ ๋ฉ์๋์ ์ ์ธํ ๋ณ์์ด๊ณ , ์ธ์(argument)๋ ๋ฉ์๋ ํธ์ถ ์ ๋๊ธฐ๋ '์ค์ ฏ๊ฐ'์ด๋ค.
์๋ ์ฝ๋์์ value๋ ๋งค๊ฐ๋ณ์์ด๊ณ 10์ ์ธ์๋ค.
์ด ์ ์๋ฅผ ์ ๋ค๋ฆญ๊น์ง ํ์ฅํ ์ ์๋ค. ์๋ ์ฝ๋์์ T๋ ํ์ ๋งค๊ฐ๋ณ์๊ฐ ๋๊ณ , Integer๋ ํ์ ์ธ์๊ฐ ๋๋ค.
์๋ฐ ์ธ์ด ๋ช ์ธ์์๋ ์ด๋ฅผ ๊ตฌ๋ถํ๊ณ ์๋ค.
Last updated
Was this helpful?