1. 인터페이스 ( interface ) 란?
- 일종의 추상클래스. 추상클래스보다 추상화 정도가 높다.
- 실제 구현된 것이 전혀 없는 기본 설계도
- 추상메서드와 상수만을 멤버로 가질 수 있다.
- 인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적으로 사용된다.
- 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는 데 사용된다.
2. 인터페이스의 작성
- 'class' 대신 ' interface ' 를 사용한다는 것 외에는 클래스 작성과 동일하다.
interface 인터페이스이름 {
public static final 타입 상수이름 = 값 ;
public abstrace 메서드이름(매개변수목록);
}
- 하지만 , 구성요소(멤버)는 추상메서드와 상수만 가능하다.
- 모든 멤버변수는 public static final 이어야 하며 , 이를 생략할 수 있다.
- 모든 메서드는 public abstract 이어야 하며 , 이를 생략할 수 있다.
<덧붙임>
- 생략된 제어자는 컴파일 할 때에 컴파일러가 자동으로 넣어준다.
3. 인터페이스의 상속
- 인터페이스도 클래스처럼 상속이 가능하다. (클래스와 달리 다중상속 허용)
interface Fightable extends Movable, Attackable { }
- 인터페이스는 Object 클래스와 같은 최고 조상이 없다.
4. 인터페이스의 구현
- 인터페이스를 구현하는 것은 클래스를 상속받는 것과 같다.
다만, 'extends' 대신 'implements' 를 사용한다
class 클래스이름 implements 인터페이스이름 {
// 내용
}
- 인터페이스에 정의된 추상메서드를 완성해야 한다.
- 상속과 구현이 동시에 가능하다.
5. 인터페이스를 이용한 다형성
- 인터페이스 타입의 변수로 인터페이스를 구현한 클래스의 인스턴스를 참조할 수 있다.
- 인터페이스를 메서드의 매개변수 타입으로 지정할 수 있다.
- 인터페이스를 메서드의 리턴타입으로 지정할 수 있다.
6. 인터페이스의 장점
- 개발시간을 단출시킬 수 있다.
일단 인터페이스가 작성되면, 이를 사용해서 프로그램을 작성하는 것이 가능하다.
메서드를 호출하는 쪽에서는 메서드의 내용에 관계없이 선언부만 알면 되기 떄문이다.
- 표준화가 가능하다.
프로젝트에 사용되는 기본 틀을 인터페이스로 작성한 다음,
개발자들에게 인터페이스를 구현하여 프로그램을 작성하도록 함으로써
보다 일관되고 정형화된 프로그래므이 개발이 가능하다
- 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
서로 상속관계에 있지도 않고, 같은 조상클래스를 가지고 있지 않은서로 아무런 관계도 없는 클래스들에게 하나의 인터페이스를 공통적으로
구현하도록 함으로써 관계를 맺어 줄 수 있다.
- 독립적인 프로그래밍이 가능하다.
인터페이스를 이용하면 클래스의 선언과 구현을 분리시킬 수 있기 떄문에식제구현에 독립적인 프로그램을 작성하는 거싱 가능하다.
클래스와 클래스간의 직접적인 관계를 인터페이스를 이용해서 간접적인
관계로 변경하면, 한 클래스의 변경이 관련된 다른 클래스에 영향을 미치지
않는 독립적인 프로그래밍 가능하다.
7. 인터페이스의 이해
7. 인터페이스의 이해
- 인터페이스는...
- 두 대상(객체) 간의 '연결, 대화, 소통' 을 돕는 '중간 역할'을 한다.
- 선언(설계)와 구현을 분리시키는 것을 가능하게 한다.
- 인터페이스를 이해하려면 먼저 두 가지를 기억하자.
- 클래스를 사용하는 쪽(User) 과 클래스를 제공하는 쪽(Provider)이 있다.- 메서드를 사용하는 쪽 에서는 사용하려는 메서드의 선언부만 알면 된다.
<덧붙임>
- 직접적인 관계를 간접적인 관계로 프로그래밍 할 수 있다.
- 직접적인 관계(왼쪽 그림)의 경우 클래스 B가 완성되어야, 클래스 A를 작성할 수 있기 때문에, 클래스 A 작성자는 B가 완성될 때까지 기다려야 한다.
- 간접적인 관계(오르쪽 그림)의 경우, 인터페이스만 작성되어 있다면 클래스 A 작성자는 기다릴 필요가 없다.
'Dev. Java' 카테고리의 다른 글
[자바 기본기] public static void main(String[] args) 2탄 (0) | 2014.05.31 |
---|---|
static 블록은 언제 사용하는가? (0) | 2014.05.28 |
[자바 기본기] 추상 클래스 (0) | 2014.05.20 |
[자바 기본기] 다형성 (0) | 2014.05.19 |
[자바 기본기] 제어자 (0) | 2014.05.18 |