안녕하세요 IT뽀로로입니다.
오늘은 인터페이스에 대하여 알아보도록 하겠습니다.
#인터페이스(interface)란?
인터페이스는 모든 기능을 추상화(abstract)로 정의한 상태이다.
즉, 모든 메서드의 선언만 정의하고 메서드의 기능에 대해 주석만 기입한 상태이다.
인터페이스도 모든 기능을 추상화하기 때문에 인스턴스화 할 수 없고 인터페이스를 사용하는 클래스에서 기능을
구현한 뒤 인터페이스화 할 수 있다.
#문법
기본 문법은 위의 그림과 같다. interface는 접근 지정자를 public, default 두 가지만 사용할 수 있다.
#인터페이스 필드, 메소드 생성 조건
인터페이스를 만들 때 안에 필드나 메소드를 생성할 때 조건은 다음과 같다.
Ex)
interface Clock{
public static final int ONEDAY = 24; //상수 필드 선언
abstract public int getMinute();
abstract public int getHour();
abstract void setMinute(int i);
}
interface Car{
int MAXIMUM_SPEED = 260; //상수 필드 선언, static final 생략 가능
int moveHandle(int degree); //abstract public 생략 가능
}
#인터페이스 상속
클래스는 인터페이스를 상속받을 수 없고 오직 인터페이스만이 인터페이스를 상속받을 수 있다.
인터페이스 상속도 마찬가지로 extends 키워드를 사용한다.
또 인터페이스는 다중 상속도 허용한다.
EX) 다중 상속
interface MobilePhone{
boolean sendCall();
boolean receiveCall();
boolean sendSMS();
boolean receiveSMS();
}
interface MP3{
void play();
void stop();
}
interface MusicPhone extends MobilePhone,MP3{ //인터페이스 다중 상속
void playMP3RingTone();
}
class MultiExtendsIntercae implements MusicPhone{
//MobilePhone 인터페이스 메소드 구현
boolean sendCall(){...};
boolean receiveCall(){...};
boolean sendSMS(){...};
boolean receiveSMS(){...};
//MP3 인터페이스 메소드 구현
void play(){...};
void stop(){...};
//MusicPhone 인터페이스 메소드 구현
void playMP3RingTone(){...};
}
위의 예제처럼 MusicPhone 인터페이스가 MobilePhone, MP3 인터페이스를 다중 상속받았으므로
MusicPhone인터페이스를 사용하기 위해서는 MobilePhone, MP3의 추상 메서드들도 구현해줘야 컴파일 에러가
발생하지 않는다.
#인터페이스 구현
인터페이스 구현이란 인터페이스의 추상 메소드를 클래스에서 구현하는 것을 말한다.
키워드는 implements라는 키워드를 사용하여 클래스를 작성한다.
EX)
interface USBMouseInterface{
void mouseMove();
void mouseClick();
}
public class MouseDriver implements USBMouseInterface{
public void mouseMove(){....} //인터페이스의 메소드를 구현
public void mouseClick(){....} //인터페이스의 메소드를 구현
int getStatus(){....} //일반 메서드
int getButton(){....} //일반 메서드
}
마지막으로 깔끔하게 추상 클래스와 인터페이스의 차이를 알아보도록 하죠.
#추상클래스 VS 인터페이스
'IT Study > JAVA' 카테고리의 다른 글
[JAVA] 16.추상클래스 (0) | 2019.09.15 |
---|---|
[JAVA] 15.업캐스팅, 다운캐스팅, instanceof (0) | 2019.09.08 |
[JAVA] 14.final 키워드 (0) | 2019.09.04 |
[JAVA] 13.static 멤버와 final 키워드 (0) | 2019.09.04 |
[JAVA] 12.접근 지정자 (0) | 2019.09.04 |