JiwonDev

5-1 ์ œ๋„ค๋ฆญ์„ ๊ทธ๋ƒฅ Raw ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ๋ผ(+ ๋น„๊ฒ€์‚ฌ ๊ฒฝ๊ณ ์ œ๊ฑฐ)

by JiwonDev

Raw ํƒ€์ž…์ด๋ž€ ์ œ๋„ค๋ฆญ ๋ณ€์ˆ˜<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());
        
        ...
    }

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ