Java ์์ ์ ๋ค์ผ๋ฉด์ MVCํจํด๊ณผ JDBC๋ฅผ ์ด์ฉํ ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์๋ค.
์ค๋ก์ง ์๋ฐ๋ก๋ง ๋ง๋ ํ๋ก๊ทธ๋จ์ด๋ผ View๋ ๋ฐ๋ก ์์๋๋ฐ ์์ ์ ๋ค์ผ๋ฉด์ ์ดํด๊ฐ ์ ์๊ฐ๋ ๋ถ๋ถ์ด ์์๋ค.
Service ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ณ , ๊ทธ๊ฑธ ๊ตฌํํ ํด๋์ค์ธ SeviceImpl ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ๊ตฌํํ ๋ค, DAO๊ฐ์ฒด๋ก returnํด์ฃผ๋ ์์คํ ์ธ๋ฐ, ์ดํด๊ฐ ์๊ฐ๋ค.
๋์ฒด ์ธํฐํ์ด์ค๋ฅผ ์ ๋ง๋ ๊ฑธ๊น?
์ด์ฐจํผ controller์์ SeviceImpl๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ฃผ๋๋ฐ, ์ฒ์๋ถํฐ SeviceImpl ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ ์ฒ๋ฆฌํ๋ฉด ๋ ๊ฒ ๊ฐ์๋ฐ..
ํ๋ก๊ทธ๋จ ์์์ ์ธํฐํ์ด์ค์ ์ญํ ์ด ๋ฑํ ์๋ค๊ณ ๋๊ปด์ก๋ค. ๊ทธ๋์ ์ฐพ์๋ดค๋ค.
๋์ฒด MVCํจํด์์๋ ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ๊น?
๊ตฌ๊ธ๋งํ ๊ฒฐ๊ณผ, ๋คํ์ฑ์ ๊ฐ๋ฅํ๊ฒ ํด์ ์ ์ง๋ณด์์ ์ข๋ค๋ ๋ด์ฉ์ด์๋ค.
//์ธํฐํ์ด์ค
public interface IMemberService {
public int insertMember(MemberVO memVo);
}
//๊ทธ๊ฑธ ๊ตฌํํ ์๋น์ค ๊ฐ์ฒด
public class MemberServiceImpl implements IMemberService {
@Override
public int insertMember(MemberVO memVo) {
return dao.insertMember(memVo);
}
}
์ด๋ ๊ฒ ๋ด ์ฝ๋ ์์์๋ ์ธํฐํ์ด์ค IMemberService์ insertMember() ๋ฉ์๋๋ฅผ
MemberServiceImpl๊ฐ์ฒด๊ฐ ๊ตฌํํด์ ์ฌ์ฉํ๊ณ ์๋ค.
๊ทธ ์ธ์ IMemberService๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๋ ํ๋๋ ์๋ค. ๋ด๊ฐ ๋ง๋ ํ๋ก๊ทธ๋จ ์์์๋ ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๊ฐ ์ผ๋์ผ๋ก๋ง ๋งค์นญ๋์๊ธฐ ๋๋ฌธ์ ๋คํ์ฑ์ด๋ผ๋ ์ฅ์ ์ด ๋์๊ฒ ์๋ฟ์ง ์์๋ ๊ฒ ๊ฐ๋ค.
์ฐธ๊ณ ๋ก, ์์์ is-a ๊ด๊ณ์ด๊ณ , ์ธํฐํ์ด์ค๋ be able to ๊ด๊ณ์ด๋ค.
์์๊ณผ ์ธํฐํ์ด์ค์ ๋น๊ต๋ ๋ค์ ๊ธ์ ์์ฑํ๊ฒ ๋ค.
public interface ๋ฌ๋ฆด ์ ์๋ {
๋ฌ๋ฆฌ๊ธฐ();
}
"๋ฌ๋ฆด ์ ์๋"์ด๋ผ๋ ์ด๋ฆ์ ์ธํฐํ์ด์ค๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์๋๋ฐ,
public class ์ฌ๋ implements ๋ฌ๋ฆด ์ ์๋ {
@Override
๋ฌ๋ฆฌ๊ธฐ() {
๋ ๋ฐ๋ก ๋ฌ๋ฆฌ๊ธฐ;
}
}
์ฌ๋์ "๋ฌ๋ฆด ์ ์๋" ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด ๊ทธ ์์ ์๋ "๋ฌ๋ฆฌ๊ธฐ()" ๋ฉ์๋๋ฅผ "๋ ๋ฐ๋ก ๋ฌ๋ฆฌ๊ธฐ"๋ผ๊ณ ๊ตฌ์ฒดํํ๋ค. ํ์ง๋ง ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋๋ ๋ด์ฉ์ ๋ฌ๋ฆฌํ ์ ์๋ค.
public class ๊ณ ์์ด implements ๋ฌ๋ฆด ์ ์๋ {
@Override
๋ฌ๋ฆฌ๊ธฐ() {
๋ค ๋ฐ๋ก ๋ฌ๋ฆฌ๊ธฐ;
}
}
๊ณ ์์ด๋ ๋ค ๋ฐ๋ก ๋ฌ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ง๋ง ๊ทธ ๋ด์ฉ์ ๋ฌ๋ผ์ง๋ค.
๋ํ, ์ธํฐํ์ด์ค ์์ ์๋ ๋ฉ์๋๋ค์ ๊ทธ ๋ด์ฉ์ด ๊ตฌ์ฒดํ๋์ด ์์ง์๊ณ ์ถ์์ ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฑธ ์ด์ฉํ๋ ๊ฐ์ฒด์์ ์์ ๋กญ๊ฒ ๊ตฌ์ฒดํํ ์ ์๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ๊น์ง๋ง ๋ด์๋ ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋์ง ์ฝ๊ฒ ์๋ฟ์ง ์์ ์ ์๋ค.
public void behavior() {
Cat cat = new Cat();
move(cat);
}
public void move(Cat cat) {
run(cat);
walk(cat);
}
behavior() ์์ move()๊ฐ ์๊ณ move()๋ Cat ๊ฐ์ฒด๋ฅผ ์ธํ๋ผ๋ฏธํฐ๋ก run()๊ณผ walk() ๋๊ฐ์ง์ ๋ฉ์๋๋ฅผ ์คํํ๋ค. ํ์ฌ ๋ชจ๋ ๋ฉ์๋๋ ์ธํ๋ผ๋ฏธํฐ๋ก Cat๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ์ํฉ์ด๋ค.
Cat๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ณ ์๋ move(cat)๊ณผ ๊ทธ ๋ด๋ถ์ ์๋ run(cat), walk(cat) ๋ชจ๋๋ฅผ ์์ ํด์ผํ๋ค. ์์ ํด์ผํ ๊ฒ์ด ๋ง์ ์ ์ฐ์ฑ์ด ์ข์ง ์๊ณ , ์ ์ง๋ณด์์ ์ด๋ ค์์ด ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ฝ๋๊ฐ ๊ธธ์ด์ง์๋ก ๊ทธ ์ด๋ ค์์ ๋์ฑ ์ปค์ง ๊ฒ์ด๋ค.
public interface Animal {
public void behavior();
}
๊ทธ๋ฆฌ๊ณ ์๋์๋ Animal์ ๊ตฌํํ Dog์ Cat์ด ์๋ค.
public class Cat implements Animal { }
public class Dog implements Animal { }
์ด๊ฑธ ์ด์ฉํด behavior()์ move()๋ฅผ ์์ฑํด๋ณด๋ฉด,
public void behavior() {
Animal animal = new Cat();
move(animal);
}
public void move(Animal animal) {
run(animal);
walk(animal);
}
์ด๋ ๊ฒ ๋๋ค. ํ์ฌ animal์ Cat์ผ๋ก ์ ์ธ๋์ด์๋ค. ๋ค์ ์๊ตฌ์ฌํญ๋๋ก Dog๋ก ๋ฐ๊พธ๋ ค๋ฉด ์ด๋๋ฅผ ๋ฐ๊ฟ์ผํ ๊น?
๋ต์ Animal animal = new Dog(); ๋ก ๋ฐ๊พธ๋ฉด ๋์ด๋ค.
์ธํฐํ์ด์ค ๊ฐ์ฒด๋ฅผ ์ ์ธํด๋๊ณ ๊ทธ๊ฑธ ๊ตฌํํ๊ณ ์๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ค๋ก ์์ฝ๊ฒ ๊ฐ์๋ผ์ธ์์๋ค. ์ ์ฐ์ฑ์ด ์ข์์ก๊ณ ์ ์ง๋ณด์๋ ๋งค์ฐ ๊ฐํธํด์ก๋ค.
java์์ ์ฌ์ฉํ๋ ๋ํ์ ์ธ ๊ฒฝ์ฐ.
Collection list;
==> list = new LinkedList();
==> list = new HashMap();