๐ŸŒˆJava Interface๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

HCยท2022๋…„ 9์›” 20์ผ
1

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์ด ์•„๋‹Œ Dog๋กœ ๊ต์ฒด๋ฅผ ํ•ด์•ผํ•œ๋‹ค๋ฉด?

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();
profile
์˜ค๋ฅ˜๋ณด๊ณ 

0๊ฐœ์˜ ๋Œ“๊ธ€