๐Ÿ’ป ๊ณต๋ถ€ ๊ธฐ๋ก/โ˜• Java

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

  • -

๊ณต๋ถ€ํ•œ๊ฑฐ ์žŠ์ง€ ์•Š์œผ๋ ค๊ณ  ํ•˜๋ฃจ ํ•˜๋ฃจ ์งฌ๋‚ด์„œ ๋‚จ๊ธฐ๋Š”๋ฐ..

์ด๋ฏธ ์•ž์—์„œ ๊ณต๋ถ€ํ•œ๊ฑด ์‚ฐ๋”๋ฏธ๊ณ  ์•„์ง ๊ธ€๋กœ ๋‹ด์•„๋‚ด์ง€ ๋ชปํ•œ ํŒŒํŠธ๊ฐ€ ๋งŽ์€๋ฐ..

์ด๊ฑธ ๋‹ค ์–ด์ฉ๋‹ค.. ( /_ \ )

 

 

์ถœ์ฒ˜ : ๋Œ€ํ•™์ผ๊ธฐ

 

 

์ž”๋ง ๋ง๊ณ  ์ผ๋‹จ ์จ..

 

 


 

 

[์ถœ์ฒ˜ : ์ ํ”„ ํˆฌ ์ž๋ฐ”]

 

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

๊ดด๋กญํžˆ์ง€ ๋งˆ.. ใ… 

 

๊ทน๋‹จ์ ์œผ๋กœ ๋™์ผํ•œ ๋ชฉ์  ํ•˜์— ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ๋” ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ

= ์ž๋ฐ”์˜ ๋‹คํ–ฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ฝ”๋“œ ์ˆ˜์ •์„ ์ค„์ด๊ณ  ํ”„๋กœ๊ทธ๋žจ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

[์ถœ์ฒ˜ : Limky ์‚ฝ์งˆ๋ธ”๋กœ๊ทธ]

 

 

๋™๋ฌผ์› ์‚ฌ์œก์‚ฌ๊ฐ€ ํ•˜๋Š” ์ผ

๋‚œ ๋™๋ฌผ์›์˜ ์‚ฌ์œก์‚ฌ์ด๋‹ค.
์œก์‹๋™๋ฌผ์ด ๋“ค์–ด์˜ค๋ฉด ๋‚œ ๋จน์ด๋ฅผ ๋˜์ ธ์ค€๋‹ค.
ํ˜ธ๋ž‘์ด๊ฐ€ ์˜ค๋ฉด ์‚ฌ๊ณผ๋ฅผ ๋˜์ ธ์ค€๋‹ค.
์‚ฌ์ž๊ฐ€ ์˜ค๋ฉด ๋ฐ”๋‚˜๋‚˜๋ฅผ ๋˜์ ธ์ค€๋‹ค.

ํด๋ž˜์Šค ์ž‘์„ฑ

class Animal5 {
	String name;

	void setName(String name) {
		this.name = name;
	}
}

class Tiger5 extends Animal5 {
}

class Lion5 extends Animal5 {
}

class ZooKeeper5 {
    // ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ์‚ฌ์šฉ
    void feed(Tiger5 tiger) {  // ํ˜ธ๋ž‘์ด๊ฐ€ ์˜ค๋ฉด ์‚ฌ๊ณผ๋ฅผ ๋˜์ ธ ์ค€๋‹ค.
        System.out.println("feed apple");
    }

    void feed(Lion5 lion) {  // ์‚ฌ์ž๊ฐ€ ์˜ค๋ฉด ๋ฐ”๋‚˜๋‚˜๋ฅผ ๋˜์ ธ์ค€๋‹ค.
        System.out.println("feed banana");
    }
}

public class A5_Interface {
    public static void main(String[] args) {
        ZooKeeper5 zooKeeper = new ZooKeeper5();
        Tiger5 tiger = new Tiger5();
        Lion5 lion = new Lion5();
        zooKeeper.feed(tiger);  // feed apple ์ถœ๋ ฅ
        zooKeeper.feed(lion);  // feed banana ์ถœ๋ ฅ
    }
}

์—ฌ๊ธฐ์„œ ๋™๋ฌผ์›์˜ ๋™๋ฌผ์ด ํ˜ธ๋ž‘์ด, ์‚ฌ์ž ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๋™๋ฌผ์ด ๋Š˜์–ด๋‚  ๊ฒฝ์šฐ ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ฐ˜๋ณต์ ์ธ feed ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.

์ด๋Ÿฐ ๋ถˆํŽธํ•จ๊ณผ ๊ท€์ฐฎ์Œ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋„์›€์ด ํ•„์š”ํ•˜๋‹ค.

 

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

์œก์‹๋™๋ฌผ(Predator5) ์˜ ๊ตฌ๋ถ„์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋Š” interface ๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

interface Predator5 {
}

class Animal5 {
    String name;

    void setName(String name) {
        this.name = name;
    }
}

(... ์ƒ๋žต ...)

๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋™๋ฌผ ํด๋ž˜์Šค์— ์ž‘์„ฑํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

๊ตฌํ˜„ํ•˜๋Š” ํ‚ค์›Œ๋“œ๋Š” implements ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

(... ์ƒ๋žต ...)

class Tiger5 extends Animal5 implements Predator5 {
}

class Lion5 extends Animal5 implements Predator5 {    
}

(... ์ƒ๋žต ...)

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•จ์— ๋”ฐ๋ฅธ ์‚ฌ์œก์‚ฌ ํด๋ž˜์Šค๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

(... ์ƒ๋žต ...)

class ZooKeeper5 {
    void feed(Predator5 predator) {
        System.out.println("feed apple");
    }
}

(... ์ƒ๋žต ...)

์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์œก์‚ฌ ํด๋ž˜์Šค์—๋Š” ๋”ฐ๋กœ ์ถ”๊ฐ€ํ•  ํ•„์š” ์—†์ด feed ๋ฉ”์†Œ๋“œ ํ•˜๋‚˜๋งŒ ๋‚จ์•„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

์œก์‹๋™๋ฌผ์ด ์ถ”๊ฐ€๋œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•œ๋‹ค.

class Crocodile extends Animal implements Predator {
}

 

์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์†Œ๋“œ

์œ„์—์„œ feed ๋ฉ”์†Œ๋“œ์˜ ๋ฐ˜๋ณต์„ ์˜ˆ๋ฐฉํ•˜๊ณ  ์œก์‹๋™๋ฌผ์˜ ์ถ”๊ฐ€๋ฅผ ์ข€ ๋” ํŽธํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.

์ด์ œ๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋™๋ฌผ์— ๋”ฐ๋ฅธ ์‚ฌ์œก์‚ฌ์˜ ํ–‰๋™์„ ๊ตฌ๋ถ„ํ•ด์•ผํ•˜๋Š”๋ฐ, ์‚ฌ์œก์‚ฌ ํด๋ž˜์Šค๋ฅผ ๋ณด๋ฉด์€ ์‚ฌ๊ณผ๋งŒ ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๋˜์–ด์žˆ๋‹ค.

ํ˜ธ๋ž‘์ด๋Š” ์‚ฌ๊ณผ, ์‚ฌ์ž๋Š” ๋ฐ”๋‚˜๋‚˜ ๋กœ ๊ตฌ๋ถ„ํ•ด์ค˜์•ผํ•˜๋Š”๋ฐ

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

interface Predator {
    String getFood();
}

(... ์ƒ๋žต ...)

๋‚ด์šฉ ์—†์ด ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„๊ณผ ์ž…์ถœ๋ ฅ์— ๋Œ€ํ•œ ์ •์˜๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ทœ์น™ ๋•Œ๋ฌธ์ด๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์œก์‹๋™๋ฌผ์˜ ๋ฉ”์†Œ๋“œ๋„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

class Tiger5 extends Animal5 implements Predator5 { // 'implements Predator5' ๋ฌธ์ž๋ฅผ ๋ถ™์—ฌ์ฃผ์–ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
	public String getFood5() { // ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์†Œ๋“œ๋Š” ํ•ญ์ƒ public์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
		return "apple";
	}
}

class Lion5 extends Animal5 implements Predator5 {
	public String getFood5() {
		return "banana";
	}
}

์ด์ œ๋Š” ์ •ํ™•ํ•œ ์ถœ๋ ฅ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์œก์‚ฌ์˜ ํ–‰๋™์— ๋Œ€ํ•œ ์ถœ๋ ฅ์„ ์ˆ˜์ •ํ•ด์ค€๋‹ค.

class ZooKeeper5 {
	void feed(Predator5 predator5) {
		System.out.println("feed " + predator5.getFood5());
	}
}

predator5.getFood5()๋ฅผ ํ˜ธ์ถœํ•จ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด์ธ ์œก์‹๋™๋ฌผ์˜ getFood() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

 

์ธํ„ฐํŽ˜์ด์Šค์˜ ํ•ต์‹ฌ๊ณผ ๊ฐœ๋…

์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌ์„ฑ

์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฐ•์ œ์„ฑ์„ ๊ฐ–๋Š”๋‹ค.

 

์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฌธ๋ฒ•๊ณผ ๋‹คํ–ฅ์„ฑ

public interface ์ธํ„ฐํŽ˜์ด์Šค๋ช… {
    //์ƒ์ˆ˜
    ํƒ€์ž… ์ƒ์ˆ˜๋ช… = ๊ฐ’;

    //์ถ”์ƒ ๋ฉ”์†Œ๋“œ
    ํƒ€์ž… ๋ฉ”์†Œ๋“œ๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜, ... );

    //๋””ํดํŠธ ๋ฉ”์†Œ๋“œ
    default ํƒ€์ž… ๋ฉ”์†Œ๋“œ๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜, ... ){
    //๊ตฌํ˜„๋ถ€
    }

    //์ •์  ๋ฉ”์†Œ๋“œ
    static ํƒ€์ž… ๋ฉ”์†Œ๋“œ๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜) {
    //๊ตฌํ˜„๋ถ€
    }
}
  • ์ƒ์ˆ˜ : ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๊ฐ’์„ ์ •ํ•ด์ค„ํ…Œ๋‹ˆ ํ•จ๋ถ€๋กœ ๋ฐ”๊พธ์ง€ ๋ง๊ณ  ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฐ’๋งŒ ์ฐธ์กฐํ•ด๋ผ (์ ˆ๋Œ€์ )
  • ์ถ”์ƒ๋ฉ”์†Œ๋“œ : ๊ฐ€์ด๋“œ๋งŒ ์ค„ํ…Œ๋‹ˆ ์ถ”์ƒ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ดํŒ…ํ•ด์„œ ์žฌ๊ตฌํ˜„ํ•ด๋ผ. (๊ฐ•์ œ์ )
  • ๋””ํดํŠธ๋ฉ”์†Œ๋“œ : ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ์ง€๋งŒ, ๋ง˜์— ์•ˆ๋“ค๋ฉด ๊ฐ์ž ๊ตฌํ˜„ํ•ด์„œ ์จ๋ผ. (์„ ํƒ์ )
  • ์ •์ ๋ฉ”์†Œ๋“œ : ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๋ฌด์กฐ๊ฑด ์‚ฌ์šฉ (์ ˆ๋Œ€์ )

[์ถœ์ฒ˜ : Limky ์‚ฝ์งˆ๋ธ”๋กœ๊ทธ]

 

 

 


 

 

์ผ๋ฐ˜์ ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋Š” ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์™€ ๊ทธ ๋ฐฉ๋ฒ•์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ,

๋ฌธ๋ฒ•์ด๋‚˜ ๋‹คํ–ฅ์„ฑ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ์‚ฌ์šฉ์ด ์ต์ˆ™ํ•˜์ง€ ์•Š์•„ ์‹ค์ „์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ฑฑ์ •์ด ๋“ค์—ˆ๋‹ค.

 

๊ฒฐ๊ตญ ํ•˜๋‹ค๋ณด๋ฉด ๋˜๊ฒ ์ง€ ๋งˆ์ธ๋“œ..

 

์˜ค๊ณต์™„!!

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.