์ ๋ค๋ฆญ (Generic)
์ ์
์ปดํ์ผ ํ์์ ํ์ ์ ์ฒดํฌํด ์ฃผ๋ ๊ธฐ๋ฅ
์ ๋ค๋ฆญ์ ์ฌ์ฉ์ ๋ ๊ฐ์ง ์ด์ ์ ๊ฐ์ง๋ค.
์ง์ ํ ํ์ ์ด์ธ์ ํ์ ์ ๊ฐ์ง ๋ฐ์ดํฐ๊ฐ ํ ๋น๋๋ฉด ์ปดํ์ผ ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค. ๋ฐ๋ผ์,
ํ์ ์์ ์ฑ
์ ๋ณด์ฅํ ์ ์๋ค.ex) List์ผ๋ก ์ ์ธํ๋ฉด String ์ด์ธ ๊ฐ์ด ๋ค์ด๊ฐ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์
์ ๋ค๋ฆญ์ผ๋ก ์ ์ธํ ๊ฐ์ ๋ฌต์์ ํ๋ณํ์ด ๊ฐ๋ฅํ๋ค.
List ํด๋น ํ๋๋ก๋ถํฐ ๊บผ๋ธ ๊ฐ์ ํ๋ณํ ์์ด๋ String์ผ๋ก ๊ฐ์ฃผ
๋ด๋ถ์ ์ผ๋ก ์ปดํ์ผ๋ฌ๊ฐ ๋ช ์์ ํ๋ณํ์ด ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐํด์ฃผ๊ธฐ ๋๋ฌธ
์ฌ์ฉ ์ด์ (๋ชฉ์ )
์ ๋ค๋ฆญ ์ด์ ์๋ ์ด๋ค ์๋ฃํ์ธ์ง ํ์ ๋์ง ์์ ์ด๋ค ํ์ ์ ๊ฐ์ ๋ฃ๋ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์๊ณ , ๋ง์ฝ ์ด๋ฅผ ํน์ ์๋ฃํ์ผ๋ก ์ด์ฉํ๊ณ ์ ํ๋ค๋ฉด ๋ช ์์ ์ผ๋ก ํ๋ณํ์ ํด์คฌ์ด์ผ ํ๋ค.
๊ทธ๋ฌ๋ ์ด๋
๋ฐํ์ ์๋ฌ
๋ฅผ ๋ฐ์์ํฌ ๊ฐ๋ฅ์ฑ์ ๋ดํฌํ๋๋ฐ, ๋ฐํ์ ์๋ฌ๋ ์ต๋ํ ์ปดํ์ผ ์๋ฌ๋ก ๋๋ฆฌ๋ ๊ฒ์ด ์ข๋ค. ์ปดํ์ผ ์๋ฌ๋ ํ๋ก๊ทธ๋จ์ ์คํํ์ง ์๊ณ ๋ ์ ์ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํด ๊ฐ๋ฐ ์ค์ ๊ฐ์งํ๊ณ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. (๋ํ, ์์ฆ ๋๋ถ๋ถ IDE๋ ์ปดํ์ผํ์ง ์๊ณ ๋ ์ปดํ์ผ ์๋ฌ๋ ์๋ ค ์ค)
์ ๋ฆฌํ์๋ฉด, ์ ๋ค๋ฆญ์ โญ์๋ชป๋ ํ๋ณํ์ ์ํด ๋ฐ์ํ๋ ๋ฐํ์ ์๋ฌ์ธ
ClassCastException
์ ์ปดํ์ผ ํ์์ผ๋ก ๋์ด์ค๋๋ก ํ๋ ์ญํ ์ ์ํโญํ๋ค. ์ด๊ฒ์ด ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํฐ ์ด์ (๋ชฉ์ )์ด๋ค.
์ ๋ค๋ฆญ ์ ์ฉ
์ ๋ค๋ฆญ ํด๋์ค
ํด๋์ค๋ฅผ ์์ฑํ ๋ ํ์ ๋ณ์๋ฅผ ๋ช ์ํ ๊ฒ
๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ํ์ ๋ณ์ ์๋ฆฌ์ ์ค์ ํ์ ์ ์ง์ (๋์ )ํ ์ ์๋ค.
ํด๋์ค๋ช ์์ <ํ์ ๋ณ์>๋ฅผ ๋ช ์ํจ์ผ๋ก์จ ์ ์ธ ๊ฐ๋ฅํ๋ฉฐ, ํด๋์ค ๋ด๋ถ์
ํ๋ ํ์
,ํ๋ผ๋ฏธํฐ ํ์
,๋ฐํ ํ์
์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.์ ๋ค๋ฆญ ํด๋์ค ์ ์ธ ์ ๋ค์์ ์ ์ํด์ผ ํ๋ค.
์ ๋ค๋ฆญ ํด๋์ค ๋ด๋ถ์์๋ ์ด๋ค ๋ณ์๋ ์์ฑ ์์ ์์๋ ํ์ ๋ณ์๊ฐ ์ค๋ฉด ์ ๋๋ค. (๋น์ฐํ ์์ฑ ์์ ์๋ ํ์ ์ด ํ์ ๋ผ์ผ ํจ)
static ํ๋ ๋๋ ๋ฉ์๋์๋ ํ์ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. (static ํ๋/๋ฉ์๋๋ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณต์ ํ๋ ์์์ด๋ฏ๋ก ์ธ์คํด์ค๋ณ๋ก ํ์ ์ด ์ง์ ๋ ์ ์์)
์ ๋ค๋ฆญ ํด๋์ค์ ๋ํ์ ์ธ ์์๋ก๋ Collection์ List, Set, ๊ทธ๋ฆฌ๊ณ Map ์๋ฃ๊ตฌ์กฐ ๋ฑ์ด ์๋ค.
ex) ArrayList๋ JDK1.5์์ ์ ๋ค๋ฆญ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉด์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ๋์๋ค.
์ ํ๋ ์ ๋ค๋ฆญ ํด๋์ค (ํ์
์ ํ)
ํ์ ๋ณ์๋ฅผ <T extends ํด๋์ค>์ผ๋ก ์ค์ ํ๋ฉด ํ์ ์ง์ ์ ํน์ ํ์ (๊ณผ ๊ทธ ์์)๋ง ๊ฐ๋ฅํ๊ฒ ํ์ ์ ์ ํํ ์ ์๋ค.
<T extends ์ธํฐํ์ด์ค>์ ๊ฒฝ์ฐ์๋ implements๊ฐ ์๋ extends๋ฅผ ์ด๋ค.
โญ ์ด์ ๊ฐ์ด ํ์ ์ ์ ํํ๋ฉด ํด๋น ํด๋์ค/์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
ex) ๋ชจ๋ ํ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ์ ์๋
Box
์ ๊ณผ์ผ ๊ฐ์ฒด๋ง ์ ์ฅํ ์ ์๋FruitBox
์์ผ๋์นด๋
<T extends ํด๋์ค๋ช >์ ํด๋์ค์ ์ ์ธ ์์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด๊ณ , ์์ผ๋์นด๋๋ ์ด์ ๊ฐ์ ๋์์ ํ๋ ์ธ์คํด์ค ์ ์ธ ์์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์์ผ๋์นด๋๋ฅผ ์ด์ฉํ๋ฉด ํ๋์ ์ฐธ์กฐํ ๋ณ์๊ฐ ๊ฐ๋ฅํ ํ์ ๋ฒ์ ๋ด์์ ์ฌ๋ฌ ํ์ ์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
๊ทธ๋ฌ๋ ์ฃผ์ํ ์ ์, ์ด์จ๋ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ด ์ฌ๋ฌ๊ฐ์ผ ๋ฟ ์ฐธ์กฐ(์์ฑ ๋ฐ ํ ๋น) ์์ ์๋ ๋จ ํ๋์ ํ์ ์ผ๋ก ์ ํ๋์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
ํ์ ์ ํ ํด๋์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก <? extends List> ํ๋ฉด ์ด์จ๋ List๋ก ๊ฐ์ฃผํ์ฌ List์ ๋ฉ์๋ ์ด์ฉ ๊ฐ๋ฅํ๋ค.
์ฌ์ฉํ๋ฉด ํด๋น ํด๋์ค์ ๊ทธ ์์๋ค๋ง ํ ๋น์ด ๊ฐ๋ฅํ๋ค. - ํด๋น ํด๋์ค๋ก ๊ฐ์ฃผํ๊ณ ์ด์ฉํ ์ ์์ผ๋ฏ๋ก(๋คํ์ฑ) ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ค.
์ฌ์ฉํ๋ฉด ํด๋น ํด๋์ค์ ๊ทธ ์กฐ์๋ค๋ง ํ ๋น์ด ๊ฐ๋ฅํ๋ค.
ex) ๋์ผํ ์ฐธ์กฐํ ๋ณ์์ ํ์ ์ ํ์ ๋ง์กฑํ๋ ์ฌ๋ฌ ํ์ ํ ๋น ๊ฐ๋ฅ
์์ผ๋์นด๋๋ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์ ์์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, static ๋ฉ์๋์์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์ ๋ค๋ฆญ ๋ฉ์๋
๋ฉ์๋๋ฅผ ์ ์ํ ๋ ํ์ ๋ณ์๋ฅผ ์ ์ธํ๋ ๊ฒ์ด๋ค.
์ ๋ค๋ฆญ ํด๋์ค์ ๊ฐ์ด ์ฌ์ฉํ ์๋ ์๋ค.
๋ค๋ฅธ ํ์ ๋ณ์๋ช ์ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๋ ๊ฐ์ ๋ณ์๋ช ์ ์ฌ์ฉํ๋ฉด ์ ๋ค๋ฆญ ๋ฉ์๋์ ํ์ ๋ณ์๊ฐ ๋ ์ฐ์ ์๋๋ค.
global variable๋ณด๋ค local variable์ด ๋ ์ฐ์ ๊ถ์ ๊ฐ๋ ๊ฒ๊ณผ ์ ์ฌ
์ ๋ค๋ฆญ ๋ฉ์๋์ ์ํฅ ๋ฒ์๋
ํด๋น ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ
๋ฟ์ด๋ค.์ ๋ค๋ฆญ ๋ฉ์๋์์์ ํ์ ์ ๋๋ถ๋ถ ์๋ต์ด ๊ฐ๋ฅํ๋ค.
static ๋ฉ์๋์๋ ์ฌ์ฉํ ์ ์๋ค. (๋ฉ์๋ ํธ์ถ ์๋ง๋ค ํ์ ์ ๊ฒฐ์ ํ๋ฏ๋ก)
์ ๋ค๋ฆญ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์, ์์ผ๋์นด๋๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์์ ์๋ก ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ๋ ์ค ํ๋๋ฅผ ์ ํํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
ex) ์์์ ๊ณผ์ผ ํ์ ๊ฐ์ฒด๋ฅผ ๋ฐ์ ์ฃผ์ค๋ฅผ ๋ง๋ค์ด ๋ฐํํ๋ ๋ฉ์๋
๋๋ถ๋ถ ์์ผ๋์นด๋๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ฐ๊ณ , ์ธ ์ ์์ ๋ ๋์์ผ๋ก ์ ๋ค๋ฆญ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
Reference
Last updated