1. 인터페이스
- 일종의 추상클래스이다. 그러나 추상클래스보다 추상화 정도가 높다.
- 실제로 구현된 것이 전혀 없는 기본 설계도에 비유한다.
- 상수와 추상메소드만을 멤버로 가질 수 있다.
- 인스턴스를 생성할 수 없고, 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하고, 클래스 작성에 도움을 줄 목적으로 사용한다.
2. 인터페이스의 작성
- 'class' 대신 'interface'를 사용한다는 것 외에는 클래스를 작성하는 것과 같다.
- 구성요소는 상수와 추상메소드만 가능하다.
- 모든 멤버변수는 public, static, final 이어야 하고, 생략할 수 있다.
- 모든 메서드는 public, abstract 이어야 하고, 생략 할 수 있다.
public interface Test { public static final double PI = 3.14; final int x = 1; // public static final int x = 1; static int y = 2; // public static final int y = 2; int z = 3; // public static final int z = 3; public abstract String getNumber(); String getPI(); // public absract String getPI(); } // Test
3. 인터페이스의 상속
- 인터페이스로부터만 상속받을 수 있으며, 다중상속이 가능하다.
- 인터페이스는 Object 클래스와 같은 최고 조상이 없다.
4. 인터페이스의 구현 및 다형성
- 추상클래스가 자신을 상속받는 클래스를 정의하는 것과 다르지않다. 다만 'extends' 대신 'implements'를 사용한다.
- 인터페이스에 정의된 추상메소드를 완성해야 한다.
interface Movable { void move(int x, int y); // 지정된 위치(x, y)로 이동하는 기능의 메소드 } // Movable interface Attackable { void attack(Unit u); // 지정된 대상(u)을 공격하는 기능의 메서드 } // Attackable interface Fightable extends Movable, Attackable { } // Fightable extends Movable, Attackable class Unit { int currentHP; // 유닛의 체력 int x; // 유닛의 위치 (x좌표) int y; // 유닛의 위치 (y좌표) } // Unit class Fighter extends Unit implements Fightable { public void move(int x, int y) {} public void attack(Unit u) {} } public class FighterTest { public static void main(String[] args) { Fighter fighter = new Fighter(); if (fighter instanceof Unit) { System.out.println("fighter는 Unit 클래스의 자손입니다."); } if (fighter instanceof Fightable) { System.out.println("fighter는 Fightable 인터페이스를 구현했습니다."); } if (fighter instanceof Movable) { System.out.println("fighter는 Movable 인터페이스를 구현했습니다."); } if (fighter instanceof Attackable) { System.out.println("fighter는 Attackable 인터페이스를 구현했습니다."); } if (fighter instanceof Object) { System.out.println("fighter는 Object 클래스의 자손입니다."); } } // main } // FighterTest /* * 결과 * * fighter는 Unit 클래스의 자손입니다. * fighter는 Fightable 인터페이스를 구현했습니다. * fighter는 Movable 인터페이스를 구현했습니다. * fighter는 Attackable 인터페이스를 구현했습니다. * fighter는 Object 클래스의 자손입니다. * */
5. 인터페이스를 이용한 다중상속
- 두 개의 클래스로부터 상속을 받아야 할 상황이라면, 두 조상클래스 중에서 비중이 높은 쪽을 선택하고
다른 한쪽은 클래스 내부에 멤버로 포함시키는 방식으로 처리하거나 어느 한쪽의 필요한 부분을 뽑아서 인터페이스로 만든 다음 구현한다.
6. 인터페이스를 이용한 다형성
- 인터페이스의 타입의 변수로 인터페이스를 구현한 클래스의 인스턴스를 참조할 수 있다.
- 인터페이스를 메서드의 매개변수 타입으로 지정할 수 있다.
- 인터페이스를 메서드의 리턴타입으로 지정할 수 있다.
7. 인터페이스 장점
- 개발시간을 단축시킬 수 있다.
- 표준화가 가능하다.
- 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
- 독립적인 프로그래밍이 가능하다.
8. 인터페이스의 이해
- 두 대상(객체) 간의 '연결, 대화, 소통'을 돕는 '중간 역할'을 한다.
- 선언(설계)과 구현을 분리시키는 것을 가능하게 한다.
- 클래스를 사용하는 쪽(User)과 클래스를 제공하는 쪽(Provider)이 있다.
- 메서드를 사용(호출)하는 쪽(User)에서는 사용하려는 메서드(Provider)의 선언부만 알면 된다.
'Java > Java SE' 카테고리의 다른 글
Java 내부클래스(inner class) (0) | 2013.08.09 |
---|---|
Java 예외처리(exception handling) (1) | 2013.08.08 |
Java 추상클래스(abstract class) (0) | 2013.08.07 |
Java 다형성(polymorphism), instanceof 연산자 (0) | 2013.08.07 |
Java 제어자(modifier), 접근 제어자(access modifier) (0) | 2013.08.06 |