Generics๋?
Java์ Generics์ ํด๋์ค๋ ๋ฉ์๋์์ ์ฌ์ฉํ ๋ฐ์ดํฐ ํ์ ์ ์ธ๋ถ์์ ์ง์ ํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฌธ๋ฒ์ผ๋ก ํ์ ์ ๋ฏธ๋ฆฌ ์ ํ์ง ์๊ณ ๋์ค์ ์ ํ๋ ๋ฐฉ์์
์ด๋ฐ Generics๋ ์ปดํ์ผ ์์ ์ ํ์ ์ ๋ฏธ๋ฆฌ ํ์ ํด์ ๋ชจ๋ ํ์ ๊ด๋ จ ์ค๋ฅ๋ฅผ ๊ฒ์ฌํ๊ธฐ ๋๋ฌธ์ ํ์ ์์ ์ฑ์ ๋์ฌ์ฃผ๊ณ ๋ถํ์ํ ์บ์คํ ์ ์ค์ฌ์ฃผ๊ธฐ์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋จ
=> Generics๊ฐ ์์ ๋๋ Object๋ก ์ ์ฅ์ํ๊ณ ์บ์คํ ์ ์ง์ ํ์ง๋ง Generics๊ฐ ๋ฑ์ฅํ๋ฉฐ ์ปดํ์ผ๋ฌ๊ฐ ํ์ ์ ๋ฏธ๋ฆฌ ํ์ ํ๊ณ ์๋์ผ๋ก ์บ์คํ ์ ํด์ค
Generic Array Creation ์๋ฌ๋?
Java Generics์ ๋ํ ๋ช ํํ ๊ฐ๋ ์ ์ก์ง ์๊ณ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด Cannot create a generic array of T๋ผ๋ ์ปดํ์ผ ์๋ฌ๋ฅผ ๊ฒช์ ์ ์์
new List<String>[10] ๊ณผ ๊ฐ์ด ํ์ ํ๋ผ๋ฏธํฐ๊ฐ ๋ช ์๋ ๋ฐฐ์ด์ ๋ง๋๋ ๊ฒฝ์ฐ์ฒ๋ผ ์ ๋ค๋ฆญ ํ์ ์ด ํฌํจ๋ ๋ฐฐ์ด์ ์ง์ ์์ฑํ๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋๋ฐ T๊ฐ์ ํ์ ๋ณ์๊ฐ ์๋๋ผ String์ฒ๋ผ ๊ตฌ์ฒด์ ์ธ ํ์ ์ธ๋ฐ๋ ์๋ฌ๊ฐ ๋๋ ๊ฒ์ ๋ณผ ์ ์์
์ด ์๋ฌ์ ๊ทผ๋ณธ์ ์ธ ์์ธ์ ์๋ฐ ์ ๋ค๋ฆญ์ ๋์ ๋ฐฉ์์ธ ํ์ ์๊ฑฐ ๋๋ฌธ์
์๋ฐ ์ปดํ์ผ๋ฌ๋ ์ ๋ค๋ฆญ ์ฝ๋๋ฅผ ์ปดํ์ผํ ๋, <String>์ด๋ <Integer>์ ๊ฐ์ ํ์ ํ๋ผ๋ฏธํฐ ์ ๋ณด๋ฅผ ์ง์๋ฒ๋ฆฌ๊ณ ๋ฐํ์(JVM)์๋ List<String>์ด๋ List<Integer> ๋ชจ๋ ๊ทธ๋ฅ List๋ผ๋ ์์ ํ์ (Raw Type)์ผ๋ก๋ง ์ธ์๋จ
ํ์ง๋ง, ๋ฐฐ์ด์ ์ค์ฒดํ๋ ํ์ ์ผ๋ก ๋ฐํ์์ ์์ ์ ์ปดํฌ๋ํธ ํ์ ์ ์ ํํ ์๊ณ ์์
(Stirng[] ๋ฐฐ์ด์ ์์ ์ด String์ ๋ด๋ ๋ฐฐ์ด์์ ์๊ณ ์๋ ๊ฒ์)
์ด์ฒ๋ผ JVM์ ๋ฐํ์์ List<String>๊ณผ List<Integer>๋ฅผ ๊ตฌ๋ถํ ์ ์๊ธฐ์ List<String>[] list = new List<String>[10]; ๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ํ์ฉ๋๋ค๊ณ ๊ฐ์ ํ์ ๋
1. ๋ฐํ์์ ํ์ ์๊ฑฐ๋ก ์ธํด ์ฌ์ค์ List[] ๋ฐฐ์ด๋ก ์ทจ๊ธ๋จ
2. ๋ฐฐ์ด์ ๊ณต๋ณ(S๊ฐ T์ ํ์ ํ์
์ด๋ฉด, S[]๋ T[]์ ํ์ ํ์
์)์ด๋ฏ๋ก ์ปดํ์ผ ์์ ์ List<String>[](์ค์ ๋ก List[])๋ Object[]๋ก ์
์บ์คํ
์ด ๊ฐ๋ฅํจ
=> Object[] objArray = list;๋ก ์ปดํ์ผ์ ํต๊ณผํจ
3. list[0] = new ArrayList<Integer>();๋ฅผ ํ๋ฉด objArray ์ฐธ์กฐ๋ฅผ ํตํด ๋ฐฐ์ด์ 0๋ฒ ์ธ๋ฑ์ค์ ArrayList<Integer>๋ฅผ ํ ๋นํจ
=> objArray๋ฅผ Object[]๋ก ์ธ์ํ๊ณ , ArrayList<Integer>๋ Object์ ํ์ ํ์ ์ด๋ฏ๋ก ๋ฌธ๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด ์ฝ๋๋ ์ปดํ์ผ์ ํต๊ณผํจ ๋ํ, JVM์ list ๋ฐฐ์ด์ List[]๋ก ์๊ณ ์๊ณ , new ArrayList<Integer>()๋ฅผ List ๊ฐ์ฒด๋ก ์ธ์ํ๊ธฐ์ ๋ฐํ์์๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์
4. ํ์ง๋ง, List<String> s = list[0]; ๋ฅผ ํ๋ฉด ArrayList<Integer> ๊ฐ์ฒด๋ฅผ List<String> ํ์ ์ผ๋ก ์บ์คํ ํ๋ ค ์๋ํ๋ฉด์ ClassCastException์ด ๋ฐํ์์ ๋ฐ์ํจ
์ ๋ค๋ฆญ์ ์ด๋ฐ ๋ฐํ์ ClassCastException์ ๋ง๊ณ ํ์ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋์ ๋์์ง๋ง ์ ๋ค๋ฆญ ๋ฐฐ์ด ์์ฑ์ ํ์ฉํ๋ฉด ์ด ํ์ ์์ ์ฑ์ด ๊นจ์ ธ๋ฒ๋ฆฌ๋ ๋ชจ์์ด ๋ฐ์ํจ
๊ทธ๋์ ์๋ฐ๋ ์ด ๋ชจ์์ ์ฐจ๋จํ๊ธฐ ์ํด ์ปดํ์ผ ์์ ์ Generic array creation ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ ๊ฒ์
ํด๊ฒฐ ๋ฐฉ๋ฒ
2๊ฐ์ง์ ์ฐํ ์ ๋ต์ด ์์
์ ๋ค๋ฆญ ์ ๋ณด๋ฅผ ๋บ Raw Type(List)์ ๋ฐฐ์ด์ ์์ฑํ ๋ค, ์ํ๋ ์ ๋ค๋ฆญ ๋ฐฐ์ด ํ์ (List<String>[])๋ก ๊ฐ์ ํ ๋ณํ
// ์ผ๋จ List ๋ฐฐ์ด์ ๋ง๋ค๊ณ ,
// ์ด๊ฑธ List<String> ๋ฐฐ์ด์ด๋ผ๊ณ ๋ณด์ฆํ๋ค๋ ์๋ฏธ
@SuppressWarnings("unchecked") // ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ๋ฌด์
List<String>[] stringLists = (List<String>[]) new List[10];
// ์ด์ ๋ฐฐ์ด์ ์ฌ์ฉํ ์ ์์
stringLists[0] = new ArrayList<String>();
์ ๋ค๋ฆญ(<String>)์ ๋บ List ๋ฐฐ์ด์ ๋ง๋ ๋ค, (List<String>[])๋ก ๊ฐ์ ํ ๋ณํํ๋ ๋ฐฉ๋ฒ์ผ๋ก
@SuppresWarnings๋ฅผ ๋ถ์ฌ ์ปดํ์ผ๋ฌ์ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํจ
List์ List ์ฌ์ฉ(๋ฐฐ์ด ๋์ ArrayList ์ฌ์ฉ)
// List<String> ํ์
์ ์์๋ก ๊ฐ์ง๋ ArrayList๋ฅผ ๋ง๋ฌ
List<List<String>> listOfLists = new ArrayList<>();
listOfLists.add(new ArrayList<String>()); // 0๋ฒ ์ธ๋ฑ์ค์ ์ถ๊ฐ
List<String> firstList = listOfLists.get(0); // 0๋ฒ ์ธ๋ฑ์ค ๊ฐ์ ธ์ค๊ธฐ
์ ์ด์ ๋ฐฐ์ด์ ์ฐ์ง ์๊ณ , List๋ฅผ ๋ด๋ ๋ ๋ค๋ฅธ List๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฅ ์์ ํ๊ณ ํ์ ๊ฒฝ๊ณ ๋ ์๋ ๋ฐฉ๋ฒ์
=> ์ด๋ ๊ฒ ํ๋ฉด ์ ๋ค๋ฆญ์ ํ์
์์ ์ฑ์ด 100% ๋ณด์ฅ๋จ
(List๋ ๋ฐฐ์ด๊ณผ ๋ค๋ฅด๊ฒ ๋ถ๊ณต๋ณ์. ์ฆ, List<List<String>>๊ณผ List<Object>๋ ์์ ํ ๋ค๋ฅธ ํ์
์ผ๋ก ํธํ๋์ง ์์)
'๐กLanguage > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Maven๊ณผ Gradle (0) | 2025.12.26 |
|---|---|
| Java ์ ์ถ๋ ฅ(I/O) ์์๋ณด๊ธฐ (0) | 2025.06.03 |
| Java Collections Framework ์์๋ณด๊ธฐ (0) | 2025.05.29 |
| [Java] int ์ Integer ์ฐจ์ด (0) | 2025.03.21 |
| Java๋ ์ปดํ์ผ ์ธ์ด์ผ๊น? ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ผ๊น? (0) | 2025.03.10 |