Item 20. ์ถ์ ํด๋์ค๋ณด๋ค๋ ์ธํฐํ์ด์ค๋ฅผ ์ฐ์ ํ๋ผ
์ถ์ ํด๋์ค vs ์ธํฐํ์ด์ค
์์/๊ตฌํํ๋ ํด๋์ค์ ๊ณ์ธต ๊ตฌ์กฐ ์์ฑ ์ฌ๋ถ
์ถ์ ํด๋์ค๋ ์ด๋ฅผ ์์ํ๋ ๋ชจ๋ ํ์ ํด๋์ค๋ค์ ๊ณตํต ์กฐ์์ด์ด์ผ ํจ
์ธํฐํ์ด์ค๋ ๋ค์ํ ์ข
๋ฅ์ ํด๋์ค๊ฐ ์ํํ ์ ์๋ ๋ถ๊ฐ ๊ธฐ๋ฅ
์ ์ถ๊ฐํ๊ฒ ํ ์ ์์
ํ๋์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ค์ด ๋ชจ๋ ๊ฐ์ ๊ณ์ธต์ผ๋ก ๋ฌถ์ผ ํ์๊ฐ ์์
์ด๋ฌํ ์ ๋๋ถ์ ํน์ ์ธํฐํ์ด์ค๊ฐ ๋ฑ์ฅํ์ ๋ ๋ค์ํ ํด๋์ค๋ค์ด ์ถํ ๋ฆด๋ฆฌ์ค์์ ์ด ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ ์ ์์
ex) Comparable, Iterable ๋ฑ
๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ
์ถ์ ํด๋์ค๋ ๊ธฐ์กด ๋์์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด์๋ ๋ฐ๋์ ์์
์ ํด์ผ ํจ
์ ์ฐ์ฑ ๋ฉด์์ ์ข์ง ์๊ณ , ๋ถ์์ฉ์ด ์์ ์ ์์ (Item 18)
์ธํฐํ์ด์ค๋ ์ปดํฌ์ง์
๊ณผ ํจ๊ป ์ด์ฉํ์ฌ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ชจ๋ ํด๋์ค๋ฅผ ๋ด๋ถ ํ๋๋ก ์์ ํ์ฌ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ํ์ฉ์ฑ์ด ์ข์ ๋ํผ ํด๋์ค
๋ฅผ ์ ๊ณตํ ์ ์์
๋ ๊ฐ์ง์ ์ฅ์ ์ ๋ชจ๋ ์ทจํ๋ ์ถ์ ๊ณจ๊ฒฉ ๊ตฌํ
interface Interface {
default void print () {
System .out .println ("๊ธฐ๋ฐ ๋ฉ์๋" );
}
}
abstract class AbstractInterface implements Interface {
@ Override
public int hashCode () {
return super .hashCode ();
}
@ Override
public boolean equals (Object obj ) {
return super .equals (obj );
}
@ Override
public String toString () {
return super .toString ();
}
}
์ธํฐํ์ด์ค๋ก ํ์
๊ณผ ์ผ๋ถ ๋ํดํธ ๋ฉ์๋๋ฅผ ๊ตฌํ
์ด๋ฅผ ๊ธฐ๋ฐ ๋ฉ์๋
๋ผ๊ณ ํจ
(์ถ์) ๊ณจ๊ฒฉ ๊ตฌํ ํด๋์ค๋ (์ค๋ฒ๋ผ์ด๋ฉ์ด ํ์ํ) ๊ธฐ๋ฐ ๋ฉ์๋๋ฅผ ์ ์ธํ๊ณ ๋๋จธ์ง ํ์ ๊ฐ๋ฅํ ๋ฉ์๋๋ฅผ ๊ตฌํ
์์ ๊ฐ์ด ๊ตฌํํ๋ฉด, ์๋์ ๊ฐ์ด ์์ฑ ์์ ์ ์ธํฐํ์ด์ค๋ก ํ๋ํ๋ ๋ถํ์ํ ๊ตฌํ์ ์๋ตํ ์ ์์
class Item20 {
public static void main (String [] args ) {
// ๊ฒฐ๊ณผ๋ ์ธํฐํ์ด์ค๋ก ๋ฐ์
Interface i = getInterface ();
}
public static Interface getInterface () {
// ๊ธฐ๋ฐ ๋ฉ์๋๋ง ์ค๋ฒ๋ผ์ด๋ฉํ๊ณ , ์ค๋ฒ๋ผ์ด๋ฉํ์ง ์์๋ ๋ ๋ฉ์๋๋ ์ถ์ ํด๋์ค๊ฐ ๊ตฌํํ๋๋ก ํจ
return new AbstractInterface () {
@ Override
public void print () {
System .out .println ("์ค๋ฒ๋ผ์ด๋ฉํ ๊ธฐ๋ฐ ๋ฉ์๋" );
}
};
}
}
์ด์ ๊ฐ์ด ์ธํฐํ์ด์ค์ ํน์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํจ์ผ๋ก์จ ํน์ ๊ธฐ๋ฅ๋ง ์ ์ดํ๊ณ , ๋๋จธ์ง ๋ถ๋ถ์ ์ถ์ ํด๋์ค์ ์ํด ์ ์ด๋๋๋ก ๊ตฌํํ ์ ์์ (ํ
ํ๋ฆฟ ๋ฉ์๋ ํจํด)
์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ๋ฉด์๋ ๋ชจ๋ ๋ด์ฉ์ ๊ตฌํํ ๊ท์ฐฎ์์ ๋์ด์ฃผ๋ ๊ตฌํ๋ฒ
๊ตฌํํ ์ ์ด ๋ง์ ๋งค์ฐ ๋ณต์กํ ์ธํฐํ์ด์ค๋ผ๋ฉด, ๊ณจ๊ฒฉ ๊ตฌํ์ ํจ๊ป ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํด๋ณด๋ ๊ฒ๋ ์ข์
๋์ ์ธํฐํ์ด์ค/์ถ์ ํด๋์ค ๋ด ์ค๋ฒ๋ผ์ด๋ฉ์ด ๊ฐ๋ฅํ ๋ฉ์๋๋ค์ Item 19์์ ๋ช
์ํ๋ฏ ์ค๋ฒ๋ผ์ด๋ฉ์ ์ผ๋์ ๋๊ณ ๋ฌธ์ํ๋ฅผ ํด์ผ ํจ