๐๏ธ ์๋ฐ ์ ๋ค๋ฆญ
์ด ๊ธ์์ ์๋ฐ ์ ๋ค๋ฆญ์ด๋ ๋ฌด์์ธ์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ์ ๋ํด ๋ฐฐ์ธ ๊ฒ์ ๋๋ค. ์ ๋ค๋ฆญ์ด๋ ์ ์, ๋ฌธ์์ด ๋ฑ ๋ชจ๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ ํ์ ์ ์ผ๋ฐํํ๋ ํ์ ์ ์๋ฏธํฉ๋๋ค. ๐ ์ ์๋ฐ์์ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋๊ฐ? 1๏ธโฃ ํ์ ์์ ์ฑ ์๋ฐ์ ์ ๋ค๋ฆญ์ ํ์ ์์ ์ฑ์ ์ ๊ณตํฉ๋๋ค. ์ ๋ค๋ฆญ์ ์ปดํ์ผ ํ์ ๋์ ํ์ ๋ถ์ผ์น๋ฅผ ํ์ธํ ์ ์๊ฒ ๋์์ค๋๋ค. 2๏ธโฃ ๋ถํ์ํ ํ์ ์บ์คํธ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ ์ปฌ๋ ์ ์์ ๋ฐํ๋๋ ๋ฐ์ดํฐ์ ํ์ ์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ํ์ ์บ์คํธ๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. 3๏ธโฃ ์ฝ๋ ์ฌ์ฌ์ฉ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๋ฐ์ดํฐ ํ์ ์ ๋ํด ํ๋์ ํด๋์ค๋ ๋ฉ์๋๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๐ ์๋ฐ์ ์ ๋ค๋ฆญ ํ์ 1๏ธโฃ ์ ๋ค๋ฆญ ํด๋์ค ํ์ ๋งค๊ฐ๋ณ์(T)๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ๋ฉ๋๋ค. ์ํ๋ ๋ฐ์ดํฐ ํ์ ์ ์ ๋ฌํ์ฌ ๋ค๋ฅธ ํด๋์ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ``` class Test { // ํด๋์ค ๋ด์ฉ } ``` 2๏ธโฃ ์ ๋ค๋ฆญ ๋ฉ์๋ ์ ๋ค๋ฆญ ๋ฉ์๋๋ก ์๋ ค์ง ํ๋ผ๋ฏธํฐ๋ก ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ ์์ฉํ ์ ์์ต๋๋ค. ``` public class Test{ //generic method public static void printData(T data) { System.out.println("Data: "+ data); } } ``` ๐ ์ ๋ค๋ฆญ ํ์ ํ๋ผ๋ฏธํฐ * T: Type * E: Element * K: Key * V: Value * N: Number ๐์ ๋ค๋ฆญ ์์ผ๋์นด๋ ์ ์, ๋ฌธ์์ด, ๋ฌธ์ ๋ฑ๊ณผ ๊ฐ์ ํน์ ์ ํ์ ์ ์ํ๋ ๋์ ์์ผ๋์นด๋(?)๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์์ผ๋์นด๋๋ ์ธ ๊ฐ์ง ์ ํ์ด ์์ต๋๋ค. * Upper bound wildcards A * A ํด๋์ค๋ B ํ์ ํด๋์ค์ ๋งค๊ฐ ๋ณ์ ํ์ ์ ์์ฉํ ์ ์์ต๋๋ค. * Lower bound wildcards A * A ํด๋์ค๋ B์ ํ๋ผ๋ฏธํฐ ํ์ ๋๋ B์ ์ํผ ํด๋์ค๋ฅผ ์์ฉํ ์ ์์ต๋๋ค. * Noon-bounded wildcards A * A ํด๋์ค๋ ์ด๋ค ํ์ ์ ํ๋ผ๋ฏธํฐ๋ ์์ฉํ ์ ์์ต๋๋ค.