Java SE 8์์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
์ฒซ ๋ฒ์งธ๋ ์ธํฐํ์ด์ค ๋ด๋ถ์ ์ ์ (static) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ฉฐ, ๋ ๋ฒ์งธ๋ ๋ํดํธ(default) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
default๋ผ๋ ์๋ก์ด ํค์๋๋ ํด๋น ๋ฉ์๋๊ฐ ๋ํดํธ ๋ฉ์๋์์ ๊ฐ๋ฆฌํจ๋ค.
-- List ์ธํฐํ์ด์ค์ Default Method : sort
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, c);
ListIterator<E> i = this.listIterator();
Object[] var4 = a;
int var5 = a.length;
for(int var6 = 0; var6 < var5; ++var6) {
Object e = var4[var6];
i.next();
i.set(e);
}
}
๋ํดํธ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ์๋ฐ API์ ํธํ์ฑ์ ์ ์งํ๋ฉด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ๊ฟ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ณธ ๊ตฌํ์ ๊ทธ๋๋ก ์์ํ๋ฏ๋ก ์ธํฐํ์ด์ค์ ์์ ๋กญ๊ฒ ์๋ก์ด ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
๊ผญ ๊ตฌํํ ํ์๊ฐ ์๋ ๋ฉ์๋๋ฅผ Default Method๋ก ๊ตฌํํ์ฌ, ๋ถํ์ํ ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค.
์๋ฅผ ๋ค์ด, Iterator ์ธํฐํ์ด์ค์ remove ๋ฉ์๋ ๊ตฌํ์ ๋น์ด์๋ ์ํ๋ก ๊ตฌํํ๋๋ฐ ์ด๋ฅผ Default Method๋ก ๊ตฌํํด ๋์ ์ ์๋ค.
interface Iterator<T> {
boolean hasNext();
T next();
default void remove() {
throw new UnsupportedOperationException();
}
}
Default Method๋ก ๊ธฐ์กด์๋ ๋ถ๊ฐ๋ฅํ๋ ๋์ ๋ค์ค ์์์ ๊ตฌํํ ์ ์๋ค.
์ถ์ ํด๋์ค๋ ํ๋๋ง ์์์ด ๊ฐ๋ฅํ์ง๋ง, ์ธํฐํ์ด์ค๋ ๋ค์ค ๊ตฌํ์ด ๊ฐ๋ฅํ๋ฏ๋ก Default Method๋ก ๋์ ๋ค์ค ์์๋ ๊ฐ๋ฅํ๊ฒ ๋์๋ค.
๋ค์ค ์์์์์ ํด์ ๊ท์น
1. Default Method๋ณด๋ค ํด๋์ค์์ ์ ์ํ Method๊ฐ ํญ์ ์ฐ์ ์ด๋ค.
2. 1๋ฒ ๊ท์น ์ด์ธ์ ์ํฉ์์๋ Sub Interface๊ฐ ์ฐ์ ์ด๋ค.
3. 2๋ฒ๊น์ง ์ ํด์ง์ง ์์ผ๋ฉด, ์ฌ๋ฌ Interface๋ฅผ ์์๋ฐ๋ ํด๋์ค๊ฐ ๋ช
์์ ์ผ๋ก Default Method๋ฅผ Overrideํ๊ณ ํธ์ถํด์ผํ๋ค.