๋๋ ํน์ ์์ฒญ์ ๊ฐ์ง ์ฌ๋์๊ฒ ์ดํดํ๊ธฐ ์ด๋ ค์ด ๊ฒ์ ์ค๋ช
ํ๋ ค๋ ๋ชฉํ๊ฐ ์์ผ๋ฉด ๋์ ์ด์ผ๊ธฐ๊พผ์ด๋ฏ๋ก ๊ฐ๋จํ ๊ฒ๋ค์ ์ดํดํ๊ณ ์ผ๋จ ์ฌ๊ธฐ์ ๊ธ์ ์ฐ๊ฒ ์ต๋๋ค. ๋๋ ๋จผ์ ์ง๋ฌธ์ ํ๊ณ ๊ทธ ๋ค์์ ์ด๋ป๊ฒ ํ๋์ง ์๋ ค์ฃผ๋ JavaRush ๊ต์ก ์์ ๋ฅผ ๋ฐ๋ฅด์ง ์์ต๋๋ค. ๋๋ ๋งํ๊ณ , ๋จผ์ ๋ณด์ฌ์ฃผ๊ณ , ์ค๋ช
ํ๋ ๊ฒ์ฒ๋ผ ๋จผ์ ๋งํ๊ณ , ์ง๋ฌธํ๋ ๊ฒ์ ์ง์งํฉ๋๋ค.
BS: ๋์ == ๋์, ๋์์ด๋ก ๊ฐ์ฃผํ์ธ์. ๋์์ ๋จ์ํ ๋ ์ ํํ๊ฒ ์ดํด๋๋ฉฐ, ํญ์ ํ๋์ ์ธ ๊ฒ์ด๋ฉฐ ๋์์ ์๋ฌด ๊ฒ๋ ํ์ํ์ง ์์ ์ ์์ต๋๋ค.
์ธํฐํ์ด์ค - ์ธํฐํ์ด์ค
์ด๊ฒ ๋ญ๊ฐ์? ์์ ์ธํฐํ์ด์ค ๋ชฉ๋ก(์ ๋ค๋ฆญ ํฌํจ):public interface Store<T, ID> {
void add(T t);
void update(T t, ID i);
void delete(ID i);
T findOne(ID i);
List<T> findAll();
}
๊ณตํต crud(CRUD: ์์ฑ, ์ฝ๊ธฐ, ์
๋ฐ์ดํธ, ์ญ์ ) ์ธํฐํ์ด์ค. ๋๋ผ์ง ๋ง์ธ์. ๋ชจ๋ ๊ฒ์ด ์์ฃผ ๊ฐ๋จํฉ๋๋ค. ์ด ์ธํฐํ์ด์ค๋ ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ด ๋ค์ ์์น์ ๊ธฐ๋ฐ์ผ๋ก ํจ์ ์๋ฏธํฉ๋๋ค. ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ณ , ๋ ์ฝ๋๋ฅผ ์
๋ฐ์ดํธํ๊ณ , ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ญ์ ํ๊ณ ์ฐพ์์ผ ํฉ๋๋ค. ๋น์ ์ ์ด๊ฒ์ 100๋ฒ ๋ ์ ํ๊ฒ ๋ ๊ฒ์ด๋ฉฐ ๊ฑฐ์ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ ํ์๋งํผ ์ง์ ์์ฑํ๊ฒ ๋ ๊ฒ์
๋๋ค. ํด๋์ค์์ ๊ตฌํํด์ผ ํ๋ฏ๋ก ๊ณต๊ฐ๋ก ์ง์ ๋ฉ๋๋ค. ํด๋์ค๋ก ๊ตฌํ๋๋ค๋ ๊ฒ์ ๋ฌด์์ ์๋ฏธํฉ๋๊น ? ๋ชจ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ์ธํฐํ์ด์ค์ ๋ชจ๋ ๋ฉ์๋๋ฅผ ์ค๋ช
ํด์ผ ํฉ๋๋ค. ํด๋์ค ๊ตฌํ์ ๊ฐ์ฅ ๊ฐ๋จํ ์:
void add (T t) {
bookstore.add(t);
}
T t ๋์ ํน์ ์ผ๋ฐ ์ ํ์ด ๋์ฒด๋ฉ๋๋ค. ๊ฐ๋จํ ๋งํด์ ์ด๊ฒ์ ๋ณ์์ TYPE์ด๋ฏ๋ก T = Type์ผ๋ก ๊ฐ์ฅ ์์ฃผ ํ์๋ฉ๋๋ค. ์ด ์์์๋ ๋ค์๊ณผ ๊ฐ์ ์ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
void add (Book book) {
bookstore.add(book);
}
๋น์ฐํ Book book ๋์ ๊ตฌํ์ ํ์ํ ๋ชจ๋ ๋ณ์๋ฅผ ๋์ฒดํ ์ ์์ต๋๋ค. ์ดํดํ๊ธฐ ์ํด ์ด๋ก ์ ์ผ๋ก T = Object๋ผ๊ณ ๊ฐ์ ํ ์ ์์ผ๋ฉฐ Java์ ๋ชจ๋ ๊ฒ์ Object์ด๋ฏ๋ก ๊ฑฐ๊ธฐ์์ ํด๋์ค/๋ณ์๋ฅผ ์ ์ํ ์๋ ์์ต๋๋ค. ์ ์ผํ ๋ฌธ์ ๋ ๋์ค์ ๋ฐ์ํฉ๋๋ค. ํด๋์ค๊ฐ 0์ธ ๊ฒฝ์ฐ๋ ์์ธ์
๋๋ค. ๊ทธ ์์ฒด๋ก ๋งํ๋ฉด ๊ฐ์ฒด๋ฅผ ํน์ ๋์ ๋ถ๋ถ์ผ๋ก ๋๋์ด ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๋ ํน์ ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ์
๋๋ค. ์ธํฐํ์ด์ค์ ๋ชฉ์ ์ ํด๋์ค์ ์ํ ๊ตฌํ์ ์ํ ๊ธฐ๋ฅ์ ์ ์ํ๋ ๊ฒ์
๋๋ค. ์ฆ, ๋ฉ์๋ ์๋ช
์ ๋ํ ์ค๋ช
์
๋๋ค. ์ธํฐํ์ด์ค ๋ด๋ถ์๋ ๊ฐ์ ๋ฐํํ๊ณ ์
๋ ฅํ๋ ๋ฉ์๋์ ์ด๋ฆ์ด ์์ต๋๋ค. ๊ธ์, ์ฌ์ ํ ๊ฑฐ๊ธฐ์์ ์ผ๋ถ ๋ณ์๋ฅผ ์ง์ ํ ์ ์์ง๋ง ์ฆ์ ์์์ ์ผ๋ก public static final์ด ๋๋ฉฐ ํ๋ก๊ทธ๋จ์ ์ด๋ ๋ถ๋ถ์์๋ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค๋ ์์
์ ์ค๋ช
ํ๋ฏ๋ก ๋์ผํ ์์
์ด ์ธํฐํ์ด์ค์ ํฌํจ๋ฉ๋๋ค. ๊ธฐ๋ฅ์ด๋ ๋ฐฉ๋ฒ. ์ด๊ฒ์ด ์ ํ์ํ๊ฐ์? ์ด๊ฒ์ด ๋ฌด์์ ๋จ์ํํ๊ณ ์ด๋ค ์ด์ ์ ์ ๊ณตํฉ๋๊น? ํ๋๊ณผ ํ๋์ ๋ํ ์ค๋ช
์ ๋จ์ํํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฌด์์ ํด์ผ ํ ์ง ๋งํ์ง๋ง, ๊ฐ ํด๋์ค๋ ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์์ฒด์ ์ผ๋ก ๊ตฌํํฉ๋๋ค. ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ์๊ฐ์ ์ ์ฝํ์ธ์. ์ธํฐํ์ด์ค๋ ์ด๋ค ์์
์ ์ํํด์ผ ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ค์ํ ์ ์๋ ์ํฉ์์ ์์ฑ๋ฉ๋๋ค. ์ธํฐํ์ด์ค๋ ์์
์ ์ด๋ฆ์ ์ค๋ช
ํฉ๋๋ค. ์ด๋ ๋จ์ํ ์ผ๋ถ ์ถ์ํ์ ๋ฐฉํฅ์
๋๋ค. Cloneable, Remote ๋ฑ์ ๋ง์ปค์ ๊ฐ์ด ๋ฉ์๋์ ํ๋๊ฐ ์๋ ์ธํฐํ์ด์ค๋ ์์ ์ ์์ต๋๋ค. ๋ชจ๋๊ฐ ์ข์ํ๋ ์๋์ฐจ์ ์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ ์ธํฐํ์ด์ค๋ ์๋์ฐจ์ ๊ฐ๋ฅํ ๋์, ์คํฐ์ด๋ง ํ ํ์ ๋๋ ์ด๋ ๋ฐฉํฅ, ์๋ ์ฆ๊ฐ, ๋จ์ ํ๋ฐ์ ๋ฑ์ ์ค๋ช
ํฉ๋๋ค. ์ฆ, ๋ชจ๋ ์๋์ฐจ๊ฐ ๊ฐ์ง ์ ์๋ ๊ฒ๊ณผ ๋์ผํ ๋์์
๋๋ค. ์ฆ, ์ฐ๋ฆฌ๋ ์ต์ด์ ์๋์ฐจ๋ฅผ ๋ง๋๋ ๊ฐ์ฅ ๋ฎ์ ์์ค๊น์ง ์ ํ์ ์ ๊ธ๋ก ๋ด๋ ค๊ฐ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ๋ง๋ค์ด์ก๊ณ ๋ฌด์์ ๊ฐ์ก๋์ง ์ฐ๋ฆฌ ์์ ์ ๋๋๋ก ์์๋
๋๋ค. ๋น์ฐํ ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์ถ์์ ์ผ๋ก ์ค๋ช
ํ๊ณ ํ๋์ ๋ํด์๋ง ์ค๋ช
ํฉ๋๋ค. ์ต์ด์ ์๋์ฐจ์๋ ๋ฌด์์ด ์์๋์? ์ด์ ๋๊ฐ ์์๋์? ๊ทธ๊ฒ์ ์คํฐ์ด๋ง ํ /์์ง์์ ๋ฐฉํฅ์ผ๋ก ์ด๋๊ฐ๋ก ํ์ ํ๊ณ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฐํด๊ฐ ์์๋์? ๋ค, ๊ทธ๊ฑด ์ ๊ฐ ์ด๋ ์ ๋์ ์๋๋ก ์ด์ ํ๊ณ ์์๋ค๋ ๋ป์
๋๋ค. ์๋๊ฐ ๋ฐ๋์์ฃ . ์ด๊ฒ์ด ์ ์ฒด ์ธํฐํ์ด์ค์
๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ธํฐํ์ด์ค๋ ํน์ ์์
์ ์ผ๋ถ ๊ตฌํ์ ์ํด ์์ฑ๋ฉ๋๋ค. ์ ๊ฒ๋ค. ์ฐ๋ฆฌ๋ ๋น์ ์ด ์๊ฐํ ์ ์๋ ๊ทธ ์ด๋ค ๊ฒ๋ณด๋ค ๋ ๊ตฌ์ฒด์ ์ธ ํ๋ก๊ทธ๋จ์ ์์ฑํฉ๋๋ค. ๋ฐ๋ผ์ ์ธํฐํ์ด์ค ์์ฒด์๋ ๋ ๋ช
ํํ๊ณ ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ์ด ํฌํจ๋ฉ๋๋ค. ๋ฌผ๋ก ๊ฐ๋ฅํ ํ ์ถ์์ ์ผ ๊ฒ์
๋๋ค. ์ธํฐํ์ด์ค๋ ํด๋์ค๋ก ์๋ก ์์๋ ์ ์์ต๋๋ค.
interface MyInterface extends NotMyinterface;
์ธํฐํ์ด์ค๋ ํด๋์ค์์ ๊ตฌํ๋ฉ๋๋ค. ์ํ๋ ๋งํผ ๋ง์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ์์๊ณผ ๋ฌ๋ฆฌ ํ๋๋ง ์์ํฉ๋๋ค.
class NewClass extends OldClass implements MyInterface, NotMyinterface;
์ ๊ฒ๋ค. ์ฐ๋ฆฌ๋ ๋ช ๊ฐ์ง ์์
์ ์๊ฐํด ๋ด๊ณ ์ด๋ฆ์ ์ง์ ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ณ ์ด ๋ชจ๋ ๊ฒ์ ์ธํฐํ์ด์ค์ ์์ฑํ ๋ค์ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์ด ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ด ํด๋์ค์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ต๋๋ค. ๋ํ ์ธํฐํ์ด์ค์ ์ค๋ช
๋ ๋ชจ๋ ๋ฉ์๋/ํจ์์๋ ๊ตฌํ์ด ์์ด์ผ ํฉ๋๋ค. ๋ฉ์๋ ์์ default๋ผ๋ ๋จ์ด๋ฅผ ์ถ๊ฐํ๊ณ ํด๋์ค์ฒ๋ผ ๋ฉ์๋์ ์ง์ ๊ตฌํ์ ์์ฑํ์ฌ ์ธํฐํ์ด์ค ์์ฒด์์ ์ง์ ์ํํ ์ ์์ต๋๋ค. ์ด๋ Java ๋ฒ์ 8์์ ๊ฐ๋ฅํด์ก์ต๋๋ค. ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์์๋ ์ํํ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๊ณ , ํด๋์ค์ ๊ตฌํํ๊ณ , ํด๋์ค์ ๊ตฌํ์ ๋กค์์ํ๊ณ , ์คํํ๊ณ ํ
์คํธํ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค์์ ๋ค์ ๋ด์ฉ์ ์ฝ์ ์๋ ์์ต๋๋ค.
- ์ ์ ๋ฐฉ๋ฒ.
- ๋น๊ณต๊ฐ ๋ฐฉ๋ฒ. (์ฝ๋ ๋ฐ๋ณต)
- ๋ณ์/์์.
- ์ค์ฒฉ๋ ์ธํฐํ์ด์ค.
line1: Volvo v = new VolvoV2();
line2: Volvo v = new VolvoV3();
์ธํฐํ์ด์ค ์ธ์๋ ์ถ์ ํด๋์ค ๋ฐ ํด๋์ค์ ๋ํด ๊ณ์ํด์ ์์๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ด์ฉ๋ฉด ๋์ค์ ๋ช ์๊ฐ ๋ ์ฌ์ ๊ฐ ์๊ธธ ์๋ ์์ ๊ฒ์
๋๋ค. ))) ์ถ์ : ์ฌ๋ฌ๋ถ, ๊ฒ์๋ฌผ์ด๋ PM์์ ๋ชจ๋ ๋นํ์ ์์ฒญํฉ๋๋ค. ๋ชจ๋ ์ฌ๋์ด ๊ทธ๊ฒ์ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ์๋ฒฝํ๊ฒ ์ดํดํฉ๋๋ค.))) ์ด๊ฒ์ด ์กฐ๊ธ ๋ ๋์์ง ์ด์ ์ด๊ธฐ ๋๋ฌธ์ ํญ์ ๋ฃ๊ณ ์ถ์ต๋๋ค. ๋ค์ ๊ณ์ ์์ผ๋ก ๋์๊ฐ๋๋ค. ๊ทธ๋ผ ๋ชจ๋์๊ฒ ๊ฐ์ฌ๋๋ฆฌ๋ฉฐ ํ๋ก๊ทธ๋๋ฐ์ ํ์ด์ด ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. )))
GO TO FULL VERSION