๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
FOR SW ENGINEER๐Ÿ‘ฉ‍๐Ÿ’ป/JAVA

JAVA_์ธํ„ฐํŽ˜์ด์Šค(Interface)

by ์”จ๋‹ˆ 2021. 9. 14.
728x90

์ธํ„ฐํŽ˜์ด์Šค(Interface)

 

 

1. ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ƒ๊ธด์ด์œ 

- ๊ธฐ๋ณธ ํด๋ž˜์Šค๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ์ง€์›ํ•˜์ง€ ์•Š์•„ ๋ฌธ์ œ ๋ฐœ์ƒ.

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ฌธ์ œํ•ด๊ฒฐ

2. ์ธํ„ฐํŽ˜์ด์Šค

- ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ƒ์ˆ˜, ์ถ”์ƒ๋ฉ”์„œ๋“œ ๊ฐ€์ง€๊ณ  ์žˆ์Œ.

- ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ ์ถ”์ƒ๋ฉ”์„œ๋“œ ํ˜•์‹์œผ๋กœ ์„ ์–ธํ•˜๋ฉด abstract๋ถ™์ด์ง€ ์•Š๋”๋ผ๋„ ์ž๋™์œผ๋กœ ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ๋ถ™๊ฒŒ ๋จ.

- ํด๋ž˜์Šค์—์„œ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ํ•  ๋•Œ ํด๋ž˜์Šค ์ด๋ฆ„ ๋’ค์— implementsํ‚ค์›Œ๋“œ ์‚ฌ์šฉ.

- ์ถ”๊ฐ€์ ์œผ๋กœ static, default๋ฉ”์„œ๋“œ ์„ ์–ธ ๋˜ํ•œ ๊ฐ€๋Šฅํ•จ.

 

โ–ถ ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ณธ๋ฌธ๋ฒ•

์ธํ„ฐํŽ˜์ด์Šค

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ์œ„ํ•ด impletmentsํ•œ ํ›„ ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์—์žˆ๋Š” ๋ฉ”์†Œ๋“œ Overridigํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๋ฐœ์ƒ.

์˜ค๋ฅ˜ํ•ด๊ฒฐ๋ฐฉ๋ฒ• - ์ถ”์ƒํ™”, ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
main๋ฌธ์—์„œ interface์‚ฌ์šฉ

 

3. ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋Šฅ1 - ๋‹ค์ค‘์ƒ์†์ด ๊ฐ€๋Šฅ

- ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘์ƒ์† ํ‘œํ˜„ ๊ฐ€๋Šฅ.

- ์—ฌ๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค ๋™์‹œ๊ตฌํ˜„ ๊ฐ€๋Šฅ.

- ๋‹จ, ์ธํ„ฐํŽ˜์ด์Šค์— ์žˆ๋Š” ๋ชจ๋“  ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค ๋‚ด์— ์ „๋ถ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋˜์–ด์•ผํ•จ.

- Inteface๊ฐ„์—๋„ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค. Interface๊ฐ„ ์ƒ์†์€ extends์‚ฌ์šฉ.

 

โ–ถ ๋‹ค์ค‘์ƒ์†ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์˜ˆ์ œ1

์ธํ„ฐํŽ˜์ด์Šค 2๊ฐœ Inter1 & Inter2
2๊ฐœ์˜ interface๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๋Š” Basicํด๋ž˜์Šค

โ–ฒ ๋‹ค์ค‘์ƒ์†์˜ ์˜ˆ โ–ฒ

์ธํ„ฐํŽ˜์ด์Šค๊ธฐ๋Šฅ ์‚ฌ์šฉํ•˜๋Š” MAINํด๋ž˜์Šค

 

4. ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋Šฅ2 - ๋ถ€๋ชจํƒ€์ž…์ด ๋  ์ˆ˜ ์žˆ๊ณ , ๋‹คํ˜•์„ฑ ๊ตฌํ˜„ํ•˜๋Š” ์›๋ฆฌ

- ์ž๋ฐ”์˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ์ฒด์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ ํƒ€์ž…(๋ฉ”์„œ๋“œ ๋ช…์„ธ์„œ)์ด๋‹ค.

- ๋”ฐ๋ผ์„œ ๊ฐ์ฒด์˜ ๊ตํ™˜์„ฑ ๋†’์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋‹คํ˜•์„ฑ ๊ตฌํ˜„ํ•˜๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ํ•จ.

 

โ–ถ ๋ถ€๋ชจํƒ€์ž…์ด๊ณ , ๋‹คํ˜•์„ฑ์„ ๊ตฌํ˜„ํ•˜๋Š” Interface์˜ˆ์‹œ

๋ถ€๋ชจํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค

์ถ”์ƒํด๋ž˜์Šค์ธ ๋ถ€๋ชจํด๋ž˜์Šค Animal, Fish์™€ Interface IPet์„ ์ƒ์†๋ฐ›๋Š”

๋ชจ๋“  ํด๋ž˜์Šค๋“ค์€ ๋ถ€๋ชจํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์—์žˆ๋Š” ๋ฉ”์„œ๋“œ๋“ค์„ ์žฌ์ •์˜(Overriding)ํ•ด์•ผํ•จ.

public class MainClass{
	public static void main(String[] args){
    
      //์ƒ์„ฑ์ž Animal ๋ถ€๋ชจํƒ€์ž…์— ์ €์žฅ๋จ. <- Animal์˜ ๊ธฐ๋Šฅ๋งŒ ์‹คํ–‰๋จ.
      Animal dog = new Dog();
      Animal cat = new Cat();
      Animal tiger = new Tiger();

      Animal[] ani = {dog, cat, tiger};

      for(Animal a : ani){
          a.eat();
      }
      System.out.println("============================")

      //์ƒ์„ฑ์ž ์ธํ„ฐํŽ˜์ด์Šค IPetํƒ€์ž…์— ์ €์žฅ๋จ <- IPet์˜ ๊ธฐ๋Šฅ๋งŒ ์‹คํ–‰๋จ.
      IPet dog2 = new Dog();
      IPet cat2 = new Cat();
      IPet fish2 = new GoldFish();

      IPet[] pets = {dag2, cat2, fish2};

      for(IPet p : pets){
          p.play();
      }
    }
}

์œ„ MainClass์˜ ์‹คํ–‰๊ฒฐ๊ณผ

 

5. ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋Šฅ3 - ํด๋ž˜์Šค ์‚ฌ์šฉ๋ฐฉ๋ฒ• ์ •์˜ํ•œ ๊ทœ๊ฒฉํ™”

- ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์‚ฌ์šฉ๋ฐฉ๋ฒ•์ด ๋™์ผํ•œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

 

โ–ถ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‹ค์ œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ• ์˜ˆ์‹œ(๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์—์„œ ์ •์˜ํ•œ sw์‚ฌ์šฉ๋ฒ•)

์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ๊ทœ๊ฒฉํ™”ํ•œ Printed์ธํ„ฐํŽ˜์ด์Šค
ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ• ์ •์˜ํ•˜๋Š” ๊ฒƒ ๊ฐ€๋Šฅ

์œ„์—์„œ LG์™€ Samsungํด๋ž˜์Šค๋Š” ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฌผ๋ ค์•˜์Œ.

ํ•˜์ง€๋งŒ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ๋‹ฌ๋ฆฌ ์ •์˜ํ•˜์—ฌ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ’์„ ๋„์ถœํ•˜๊ฒŒ ํ•จ.

 

 

6. ์ธํ„ฐํŽ˜์ด์Šค ์ •๋ฆฌ

- ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ƒ์ˆ˜์™€ ์ถ”์ƒ๋ฉ”์„œ๋“œ๋งŒ์„ ๊ตฌ์„ฑ๋ฉค๋ฒ„๋กœ ๊ฐ€์ง!

 

1. ์ธํ„ฐํŽ˜์ด์Šค๋Š”๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์ค‘์ƒ์† ์ง€์›ํ•จ.

2. ์ž๋ฐ”์˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ์ฒด์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ ํƒ€์ž…์ด๋‹ค. ์ด๋Š” ๋‹คํ˜•์„ฑ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•จ.

   -->์ธํ„ฐํŽ˜์ด์Šค๋„ ๋ฐ์ดํ„ฐ ํƒ€์ž…(๋ถ€๋ชจํƒ€์ž…)์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

3. ์‚ฌ์šฉ๋ฐฉ๋ฒ•์ด ๋™์ผํ•œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ธฐ์ˆ .

 

- ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ํ‚ค์›Œ๋“œ : Implements

- ์ธํ„ฐํŽ˜์ด์Šค๋„ extends ํ‚ค์›Œ๋“œ ์‚ฌ์šฉํ•ด ์ธํ„ฐํŽ˜์ด์Šค๊ฐ„ ์ƒ์† ๊ตฌํ˜„๊ฐ€๋Šฅ.

 

728x90