인터페이스

C/Java : 2007. 11. 6. 14:24

인터페이스 정의


 [public] interface iname [extends i2name]

- public을 포함할수 있지만 생략

- abstract를 포함할수 있지만 생략

- 필드에 static과 final을 포함할수 있지만 생략

- 모든 인터페이스는 public과 abstract이다.

- 정의할수 있는 인터페이스의 속성은 static과 final


인터페이스 키워드 implements


[public] [qualefiers] class classname implements iname ( , i2name, ...)

- 클래스는 여러개의 인터페이스를 구현할 수 있다.

- 클래스는 avstract 또는 final일 수 있다.

- 클래스는 한개의 클래스 확장과 여러 개의 인터페이스를 구현할수 있다.


인터페이스와 추상 클래스

- 해당 기능이 객체에 매우 잘 결합되어 있을때는 추상 메서드

- 해당 기능이 객체에 보조적인 경우 인터페이스

- 해당 기능이 다른 객체에 광범위하게 적용가능하면 인터페이스




매개변수를 통해 동적으로 제공


class A {
 void autoPlay(I i) {
  i.play();
 }
}

interface I {
 public abstract void play();
}

class B implements I {
 public void play() {
  System.out.println("play in B class");
 }
}

class C implements I {
 public void play() {
  System.out.println("play in C class");
 }
}

public class InterfaceTest {
 public static void main(String[] args) {
  A a = new A();
  a.autoPlay(new B());
  a.autoPlay(new C());
 }
}



제 3의 클래스를 통해 제공


public class InterfaceTest {
 public static void main(String[] args) {
  A a = new A();
  a.methodA();
 }
}

class A {
 void methodA() {
  I i = InstanceManager.getInstance();  //제 3의 클래스 메서드를 통해 인터페이스 I를
  i.methodB();                                   // 구현한 클래스의 인스턴스를 얻어온다.
 }
}

interface I {
 public abstract void methodB();
}

class B implements I {
 public void methodB() {
  System.out.println("methodB in B class");
 }
}

class InstanceManager {
 public static I getInstance() {
  return new B();
 }
}

Posted by 청웨일