5-1 ์ ๋ค๋ฆญ์ ๊ทธ๋ฅ Raw ๋ก ์ฌ์ฉํ์ง ๋ง๋ผ(+ ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ์ ๊ฑฐ)
by JiwonDevRaw ํ์ ์ด๋ ์ ๋ค๋ฆญ ๋ณ์<T>๋ฅผ ์ฌ์ฉํ ๋ ์ ์ง ์๊ณ ๊ทธ๋ฅ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ๋งํฉ๋๋ค.
์ด๋ JDK 1.5 ์ดํ ๋ฒ์ ์ ํธํ์ฑ์ ์ํด ๋จ๊ฒจ๋ ๊ธฐ๋ฅ์ด์ง, ์ ๋ ์ฌ์ฉํด์๋ ์๋ฉ๋๋ค. ํ์ ์์ ์ฑ์ด ๋ณด์ฅ๋์ง ์์ต๋๋ค.
private final Collection stamps = ...;
stamps.add(new Coin(...)); // stamp ํ์
์ coin ํ์
์ ๋ฃ๊ณ ์์.
// RAW ํ์
์ ์ฌ์ฉํด๋ unchecked call "๊ฒฝ๊ณ "๋ฅผ ํธ์ถํ์ง๋ง ์ปดํ์ผ๋ ๋๊ณ ์คํ๋ ๋ฉ๋๋ค.
private final Collection<Stamp> stamps = ...;
stamps.add(new Coin()); // ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ๋ฐฉ๋ฒ. ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
# ๋ญ๋ ์ง ๋ฐ๋ Object ํ์ ์ด ํ์ํ๋ค๋ฉด ์์ผ๋์นด๋๋ฅผ ์ฐ์ธ์.
List<Object> ๋์ ์ List<?> ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ ์์ ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ํ์ ์ด ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์์ฌ ๋ค์ด๊ฐ๋๊ฑธ ๋ฐฉ์งํฉ๋๋ค.
# ๋ค๋ง ํด๋์ค ๋ฆฌํฐ๋(Class.class)์ ์์ธ์ ๋๋ค.
์ ๋ค๋ฆญ์ ์๋ฐ ์ฝ๋์์์ ์ปดํ์ผ ์ด์ ๊น์ง์๋ง ์กด์ฌํ๊ณ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํ๋๋ฉด ์์ด์ง๋ ์ฝ๋์ ๋๋ค. (Object๋ก ๋ณํ๋จ) ๊ทธ๋์ ๋ง์ฝ List<String>.class ๊ฐ์ ํด๋์ค ๋ฆฌํฐ๋์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ ๋ค๋ฆญ์ด๋๋ผ๋ Raw ํ์ ์ผ๋ก List.class๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ฐธ๊ณ ๋ก ์ด๋ instanceof ์ฐ์ฐ์์๋ ๊ด๋ จ ์์ต๋๋ค. ๋ฐํ์์๋ ์ ๋ค๋ฆญ์ ๋ณด๊ฐ ์ง์์ง๋ฏ๋ก
o instanceof Set<MyClass> ๊ฐ์ ๊ฑด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ํ์ํ๋ค๋ฉด ์๋์ ๊ฐ์ด RAW ํ์
์ธ Set์ผ๋ก ์ฌ์ฉํด์ผํฉ๋๋ค.
// o์ ํ์
์ด Set์ธ์ง ํ์ธํ ๋ค์, ์์ผ๋์นด๋ ํ์
์ผ๋ก ํ๋ณํํด์ผ ํฉ๋๋ค.
// ์ฌ๊ธฐ์ ๋ก ํ์
์ธ Set์ด ์๋ ์์ผ๋์นด๋ <?> ํ์
์ผ๋ก ๋ณํํจ์ ์ฃผ์!
if( o instanceof Set) {
Set<?> s = (Set<?>) o;
}
# ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ๋ผ
์ปดํ์ผ ๊ฒฝ๊ณ ๊ฐ ๋์จ๊น์ ํ๋ ์ด์ผ๊ธฐ์ธ๋ฐ, ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ ์ ๊ฑฐํ๋๊ฒ ๋ง์ต๋๋ค.
ํด๋์ค๋ฅผ ๊ฐ๋ฐํ ๋, ํด๋น ํด๋์ค๋ฅผ ์ปดํ์ผ ํ ๋ ๋์ค๋ ๊ฒฝ๊ณ ๊ฐ ์ ํ ๋ฌธ์ ๊ฐ ๋ ์ผ์ด ์๋ค๋ฉด @SuppressWaring์ผ๋ก ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํด์ฃผ์ธ์. ๊ตณ์ด ํ์์๋ ์ฃผ์์ฌํญ์ ๋ค๋ฅธ ๊ฐ๋ฐ์์๊ฒ ์ ํํ ํ์๋ ์์ต๋๋ค.
๋ฌผ๋ก ๊ฐ๋ฅํ ์ข์๋ฒ์๋ก ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ๊ณ , ์ ์ ๊ฑฐํ๋์ง ์ฃผ์์ ๋ฌ์์ฃผ๋๊ฒ ์ข๋ค.
public <T> T[] toArray(T[] a){
@SuppressWarnings("unchecked") T[] result = (T[]) Arrays.copyOf(a, a.length, a.getClass());
...
}
'๐ฑBackend > Effective-Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
6-1 Enum๊ณผ @์ ๋ํ ์ด์ ์ ์ฌ์ฉํ๋ผ. (0) | 2021.10.06 |
---|---|
5-2 ์ ๋ค๋ฆญ, ๋ฐฐ์ด๋ณด๋ค๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ผ, (+์ํผํ์ ๊ตฌํ๋ฐฉ๋ฒ) (0) | 2021.09.15 |
4-1 ์์, ์ธํฐํ์ด์ค, ํด๋์ค์ ๊ถํ ์ต์ํ(+Java9 ๋ชจ๋) (0) | 2021.09.15 |
3-4 Cloneable์ ์ฌ์ฉํ์ง ๋ง๋ผ & Comparable์ ์ฌ์ฉ (0) | 2021.09.15 |
3-1 Equals์ toString์ ์ฌ์ ์ (0) | 2021.09.15 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev