๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/JAVA

[Java] 14์ผ์ฐจ : ์ธํ„ฐํŽ˜์ด์Šค(interface)

by ๋”ฐ๊ถˆ 2024. 3. 5.

 

 

์ธํ„ฐํŽ˜์ด์Šค(interface)๋ž€?
ํด๋ž˜์Šค๋ฅผ ์œ„ํ•œ ํƒฌํ”Œ๋ฆฟ์œผ๋กœ์„œ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ถ”์ƒ ํด๋ž˜์Šค์˜ ํ•œ ์ข…๋ฅ˜
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” interface๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธํ•˜๋ฉฐ, ๋ฉ”์†Œ๋“œ ์‹œ๊ทธ๋„ˆ์ฒ˜์™€ ์ƒ์ˆ˜ ์„ ์–ธ(static๊ณผ final์ด ๋‘˜ ๋‹ค ์„ ์–ธ๋˜๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ)๋งŒ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. 
  • ์ž๋ฐ” 8๋ฏธ๋งŒ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๊ฐ€ ์„ ์–ธ๋งŒ ์žˆ๊ณ  ์ •์˜๊ฐ€ ์—†๋Š” ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋งŒ ์„ ์–ธ ๊ฐ€๋Šฅ
  • ์ธํผํ…Œ์ด์Šค ๋‚ด์˜ ํ•„๋“œ๋Š” ์ƒ์ˆ˜ ์„ ์–ธ๋งŒ ํ•œ๋‹ค.
  • ํด๋ž˜์Šค์—์„œ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” implementsํ•œ ํด๋ž˜์Šค๋Š” ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ๋“  ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•ด์•ผ ํ•œ๋‹ค. 
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅํ•จ. ๋‹ค์ค‘ ์ƒ์†์€ ","(์ฝค๋งˆ)๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋ฆฌ ์ƒ์† ํ•  ๊ฒฝ์šฐ extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • โ–ถ ํŠน์ง•
  • ํด๋ž˜์Šค๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค.
  • ํ‘œ์ค€ํ™”๊ฐ€ ๊ฐ€๋Šฅ
  • ๊ฐœ๋ฐœ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค. 

ํ˜•์‹

 

์ธํ„ฐํŽ˜์ด์Šค ๋ฉค๋ฒ„ 

โ–ถ ์ƒ์ˆ˜ ํ•„๋“œ (constant field)

  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ƒ์ˆ˜ ํ•„๋“œ๋งŒ ์„ ์–ธ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋Ÿฐํƒ€์ž„ ์‹œ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ƒ์ˆ˜ ํ•„๋“œ๋Š”  public final static๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, public final static๋ฅผ ์ƒ๋žต ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ๋žตํ•ด๋„ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
  •  public final static ์ž๋ฃŒํ˜• ํ•„๋“œ๋ช… = ์ดˆ๋ฆฌ๊ฐ’;
  • static {} ์ดˆ๊ธฐํ™” ๋ธ”๋ก์œผ๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ƒ์ˆ˜ ํ•„๋“œ๋ฅผ ์„ ์–ธํ•˜๋ฉด์„œ ์ดˆ๊ธฐํ™” ํ•ด์•ผ ํ•œ๋‹ค.

โ–ถ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ(abstract method)

  • ์ž๋ฐ” 8๋ฏธ๋งŒ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๊ฐ€ ์„ ์–ธ๋งŒ ์žˆ๊ณ  ์ •์˜๊ฐ€ ์—†๋Š” ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋งŒ ์„ ์–ธ ๊ฐ€๋Šฅ
  • ์ ‘๊ทผ์ œ์–ด์ž์˜ ์ƒ๋žต์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ธฐ์ˆ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” public๋งŒ ๊ฐ€๋Šฅ
  • ์ถ”์ƒ๋ฉ”์†Œ๋“œ์— public abstract ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด์ง€ ์•Š์•„๋„ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. public abstract ๋ฆฌํ„ดํƒ€์ž… ๋ฉ”์†Œ๋“œ๋ช…([์ธ์ˆ˜]);
  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ๋“  ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•ด์•ผ ํ•œ๋‹ค.

โ–ถ ๋””ํดํŠธ ๋ฉ”์†Œ๋“œ(default method)

  • ์ž๋ฐ” 8๋ถ€ํ„ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋””ํดํŠธ ๋ฉ”์†Œ๋“œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์„ ์–ธ๋˜์ง€๋งŒ, ์ •์˜๊ฐ€ ๋œ ๋ฉ”์†Œ๋“œ๋กœ ๊ตฌํ˜„ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋””ํดํŠธ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ—ˆ์šฉ๋œ ์ด์œ ๋Š” ๊ธฐ์กด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์žฅํ•ด์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋ชฉ์ 

โ–ถ ์ •์  ๋ฉ”์†Œ๋“œ(static method)

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

โ–ถprivate ๋ฉ”์†Œ๋“œ

  • ์ž๋ฐ” 9๋ถ€ํ„ฐ๋Š” private ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค. 
package ch08.unit06;

public class Ex01 {

	public static void main(String[] args) {
		// Demo1 d = new Demo1 (); // ์ปด์˜ค๋ฅ˜
		// ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ถ”์ƒ ํด๋ž˜์Šค์˜ ์ผ์ข…์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ ๋ถˆ๊ฐ€

		// ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํด๋ž˜์Šค์˜ ์ƒ์œ„ ํด๋ž˜์Šค์™€ ์œ ์‚ฌ
		Demo1 dm = new Test1(); // ์—…์บ์ŠคํŒ…
		dm.disp();

		// dm.sub(); // ์ปด์˜ค๋ฅ˜
		((Test1) dm).sub(); // ๋‹ค์šด์บ์ŠคํŒ…

		System.out.println(Demo1.A);
		// Demo1.B = 200 ; // ์ปด์˜ค๋ฅ˜ final ํ•„๋“œ๋Š” ๊ฐ’ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€
	}

}

//์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์„ ์–ธ๋งŒ ์žˆ๊ณ  ์ •์˜๊ฐ€ ์—†๋Š” abstract ํด๋ž˜์Šค์˜ ์ผ์ข…
interface Demo1 {
	public static final int A = 10;
	int B = 20; // ํ•„๋“œ๋Š” public static final์„ ๋ถ™์ด์ง€ ์•Š์•„๋„ public static final๋จ

	// ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์†Œ๋“œ public abstract๋งŒ ๊ฐ€๋Šฅ
	public abstract void disp();

	void print(); /// ๋ฉ”์†Œ๋“œ๋Š” public abstract๋ฅผ ๋ถ™์ด์ง€ ์•Š์•„๋„ public abstract๋จ

	// public void write() {} // ์ปด์˜ค๋ฅ˜ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋ฉ”์†Œ๋“œ์˜ ๊ตฌํ˜„์€ ๋ถˆ๊ฐ€
}

// ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
// ์ธํ„ฐํŽ˜์ด์Šจ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋Š” ์ถ”์ƒํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ 
// ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•ด์•ผํ•จ 

class Test1 implements Demo1 {

	@Override
	public void disp() {
		System.out.println("disp()...");

	}

	@Override
	public void print() {
		System.out.println("print()...");

	}

	public void sub() {
		System.out.println("sub()...");
	}

}

 

 

package ch08.unit06;

public class Ex02 {

	public static void main(String[] args) {
		DemoImp12 d1 = new DemoImp12();
		
		d1.disp();
		d1.print();
		d1.sub();
		System.out.println();
		
		//์—… ์บ์ŠคํŒ…
		Ademo2 d2 = new DemoImp12();
		Bdemo2 d3 = new DemoImp12();
		
		d2.disp();
		//d2.print(); ์ปด์˜ค๋ฅ˜
		
		d3.print();
		((Ademo2)d3).disp(); // Ademo2, Bdemo2 ๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฏ€๋กœ ๊ฐ€๋Šฅ
		
		((DemoImp12)d3).sub(); // ๋‹ค์šด ์บ์ŠคํŒ… 

	}

}

interface Ademo2 {
	public void disp() ;
		
	}
interface Bdemo2 {
	public void print ();
}

//2๊ฐœ ์ด์ƒ์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
class DemoImp12 implements Ademo2, Bdemo2 {

	@Override
	public void print() {
		System.out.println("print()....");
		
	}

	@Override
	public void disp() {
		System.out.println("disp()....");
		
	}
	public void sub() {
		System.out.println("sub()....");
	}
}

package ch08.unit06;

public class Ex03 {

	public static void main(String[] args) {
		Demo3 d = new Test3();
		d.print();
		

	}

}
interface Demo3{
	public void print();
	public void disp();
	
}
//์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„๋จ
abstract class DemoImp13 implements Demo3{
	@Override
	public void disp() {
		System.out.println("disp()...");
	}
}
class Test3 extends DemoImp13{
	
	public void print() {
		System.out.println("disp()...");
	}
	
	
}

 

package ch08.unit06;

public class Ex04 {

	public static void main(String[] args) {
		Cdemo4 d= new DemoImp4();
		d.print();

	}

}
interface Ademo4{
	public void print();
	
}
interface Bdemo4{
	public void disp();
}

//์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘ ์ƒ์† ๊ฐ€๋Šฅ
interface Cdemo4 extends Ademo4, Bdemo4{
	public void sub();
	
}

class DemoImp4 implements Cdemo4{

	@Override
	public void print() {
		System.out.println("print...");
		
	}

	@Override
	public void disp() {
		System.out.println("disp...");
	}

	@Override
	public void sub() {
		System.out.println("sub...");
	}
	
}

package ch08.unit06;

public class Ex05 {
	public static void main(String[] args) {
		Store st = new Store();
		
		Fruit f = new Orange();
		st.sell(f);
		
		st.sell(new Apple());
		
	}
}

/*
 - ์ธํ„ฐํŽ˜์ด์Šค ํŠน์ง•
  : ํด๋ž˜์Šค๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค.
  : ํ‘œ์ค€ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 
  : ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. 
 */

interface Fruit {
	public int gerPrice();
	public String getName();
	
}

class Apple implements Fruit{

	@Override
	public int gerPrice() {
		return 1500;
	}

	@Override
	public String getName() {
		return "์‚ฌ๊ณผ";
	}
	
}
class Orange implements Fruit{

	@Override
	public int gerPrice() {
		return 1000;
	}

	@Override
	public String getName() {
		return "์˜ค๋ Œ์ง€";
	}
	
}
class Store { 
	public void sell(Fruit f) {
		System.out.println(f.getName()+":"+f.gerPrice());
}
}

 

๋””ํดํŠธ ๋ฉ”์†Œ๋“œ 

  • ์ž๋ฐ” 8๋ถ€ํ„ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋””ํดํŠธ ๋ฉ”์†Œ๋“œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์„ ์–ธ๋˜์ง€๋งŒ, ์ •์˜๊ฐ€ ๋œ ๋ฉ”์†Œ๋“œ๋กœ ๊ตฌํ˜„ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜๊ฐ€ ๊ฐ€๋Šฅ
  • ๋””ํดํŠธ ๋ฉ”์†Œ๋“œ๋Š” public๋ฅผ ์ƒ๋žตํ•ด๋„ public ํŠน์„ฑ์„ ๊ฐ–๋Š”๋‹ค.
  • ๋””ํดํŠธ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์† ๋ฐ›์€ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋””ํดํŠธ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋กœ ์„ ์–ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ˜•์‹

 

package ch08.unit06;

public class Ex06 {

	public static void main(String[] args) {
		int s = Demo6.sum(10);
		System.out.println(s);
		
		Demo6 d = new DemoImp16();
		int x = d.max(10, 5);
		d.write(x);
		
	}

}

interface Demo6 {
	public void write(int n);

	public static int sum(int n) {
		int s = 0;
		for (int i = 1; i <= n; i++) {
			s += i;
		}
		return s;
	}
	
	
	// default ํ‚ค์›Œ๋“œ๋กœ ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„, JDk 8๋ถ€ํ„ฐ ๊ฐ€๋Šฅ 
	// ๊ตฌํ˜„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ ๊ธฐ๋Šฅ 
	public default int max(int m, int n) {
		return m > n ? m : n;
	}
}

class DemoImp16 implements Demo6 {

	@Override
	public void write(int n) {
		System.out.println("๊ฒฐ๊ณผ :"+n);
		
	}
	
}

 

 

 

์ •์ (static)๋ฉ”์†Œ๋“œ

  • ์ž๋ฐ” 8๋ถ€ํ„ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋””ํดํŠธ ๋ฉ”์†Œ๋“œ์™€ ๋‹ฌ๋ฆฌ ๊ฐ์ฒด๊ฐ€ ์—†์–ด๋„ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์œผ๋กœ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅ
  • static ๋ฉ”์†Œ๋“œ๋Š” public๋ฅผ ์ƒ๋žตํ•ด๋„ public ํŠน์„ฑ์„ ๊ฐ–๋Š”๋‹ค.

 

 

private ๋ฉ”์†Œ๋“œ

  • ์ž๋ฐ” 9๋ถ€ํ„ฐ private ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ˜•์‹

 

 

์ธํ„ฐํŽ˜์ด์Šค(interface)์˜ ์ƒ์† 

  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์† ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉ ํ•œ๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ์ง€์›

 

 

ํด๋ž˜์Šค์—์„œ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ 

  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํด๋ž˜์Šค๋ฅผ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์ด๊ธฐ ๋•Œ๋ฌธ์— class ์—์„œ implements ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • ํด๋ž˜์Šค๋Š” ๋™์‹œ์— 2๊ฐœ ์ด์ƒ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ implements ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ implementsํ•œ ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จํ•ด ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„(override)ํ•ด์•ผ ํ•˜๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ถ”์ƒ(abstract) ํด๋ž˜์Šค๋กœ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

 

 

์ต๋ช… ๊ตฌํ˜„ ๊ฐ์ฒด 

  • ๊ตฌํ˜„ ํด๋ž˜์Šค์˜ ์ž‘์„ฑ์„ ์ƒ๋žตํ•˜๊ณ   new  ์ˆ˜์‹์ด ์žˆ๋Š” ๊ณณ์—์„œ ๋ฐ”๋กœ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ธํ„ฐํŽ˜์ด์Šค ์ฐธ์กฐํ˜•์˜ ํ˜• ๋ณ€ํ™˜

  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ƒ์œ„ํด๋ž˜์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ˜• ๋ณ€ํ™˜ ์—†์ด ๋ฐ”๋กœ ๊ตฌํ˜„ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์€ ํด๋ž˜์Šค์™€๋Š” ํ˜•๋ณ€ํ™˜์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ˜• ๋ณ€ํ™˜ ํ›„ ๋‹ค์‹œ ๊ตฌํ˜„ ํด๋ž˜์Šค๋กœ ํ˜• ๋ณ€ํ™˜์€ ๋ฐ˜๋“œ์‹œ ๊ฐ•์ œ ์บ์ŠคํŒ…์„ ํ•ด์•ผ ํ•œ๋‹ค.
  • โ–ถ์—… ์บ์ŠคํŒ… ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ์ฒด๋ช… = ๊ตฌํ˜„ํด๋ž˜์Šค๊ฐ์ฒด;
  • โ–ถ๋‹ค์šด ์บ์ŠคํŒ… : ๊ตฌํ˜„ํด๋ž˜์Šค ๊ฐ์ฒด๋ช… = (๊ตฌํ˜„ํด๋ž˜์Šค) ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ์ฒด;
  •  
package ch08.unit06;

public class Ex07 {

	public static void main(String[] args) {
		// ์ธํ„ฐํŽ˜์ด์Šค ์ต๋ช… ๊ตฌํ˜„
		
		Demo7 obj = new Demo7() {
			
			@Override
			public void disp() {
				System.out.println("disp...");
			}
		};
		
		obj.disp();
	}

}

interface Demo7{
	public void disp();
}