자바 인터페이스
- 클래스가 구현해야 하는 메소드들이 선언되는 추상형
- 인터페이스 선언 방법
- interface 키워드로 선언
public interface MobliePhone{...}
- 자바 인터페이스의 변화
- ~ Java 7 : 인터페이스는 상수와 추상 메소드로만 구성
- Java 8 ~
- 상수와 추상 메소드 포함
- default 메소드 포함 (Java 8) (접근 지정자 디폴트랑은 다름)
- private 메소드 포함 (Java 9)
- static 메소드 포함 (Java 9)
- 여전히 인터페이스에는 필드(멤버 변수) 선언 불가
interface Phone{//인터페이스 선언
public static final int TIME = 120000;//상수 필드, public static fianl 생략 가능
public abstract void ring();//추상 메소드, public abstract 생략 가능
public abstract void call();
public abstract void printLogo(){//default 메소드, public 생략 가능
System.out.println("this is the phone");
}
}
- 인터페이스 구성 요소들
상수 | public 만 허용, public static final 생략 가능 |
추상 메소드 | public abstract 생략 가능 |
default 메소드 | 인터페이스에 코드가 작성된 메소드 인터페이스를 구현하는 클래스에 자동 상속 public 접근 지정만 허용. 생략 가능 |
private 메소드 | 인터페이스 내에 메소드 코드가 작성되어야함 인터페이스 내에 있는 다른 메소드에 의해서만 호출 가능 |
static 메소드 | public, private 모두 지정 가능 ( 생략시 public ) |
자바 인터페이스의 특징
- 인터페이스의 객체 생성 불가
- 인터페이스 타입의 레퍼런스 변수 선언 가능
- 인터페이스 구현 : 인터페이스를 상속받는 클래스는 인터페이스의 모든 추상 메소드 반드시 구현
- 다른 인터페이스 상속 가능
- 인터페이스의 다중 상속 가능
interface phoneInterface{}
interface iPhoneInterface extends phoneInterphone{}
//iPhonInterface는 phoneInterface를 상속
class iPhone implements iPhoneInterface, korPhoneInterface{}
//iPhone 클래스는 iPhoneInterface 와 korPhoneInterface 다중 상속
new phoneInterface();//!컴파일 오류! 인터페이스 PhoneInterface 객체 생성 불가
phoneInterface myPhone;//iPhone은 인터페이스에 대한 레퍼런스
myPhone = new iPhone(); //myPhone은 phoneInterface를 구현해야 함
- 인터페이스 구현 : 인터페이스의 추상 메소드를 모두 구현한 클래스 작성
- implements 키워드 사용
- 여러 개의 인터페이스 동시 구현 가능
interface phoneInterface{
void sendCall();
void receiveCall();
}
class newPhone implemens phoneInterface {
@Override
public void sendCall(){
System.out.println("ddu-ddu");
}
@Override
public void receiveCall(){
System.out.println("Ring Ring");
}
}
- 인터페이스 상속
- 인터페이스가 다른 인터페이스 상속 : extends 키워드 이용
- 다중 인터페이스 상속
interface MobliephoneInterface extends phoneInterface{
//extends 키워드로 다른 인터페이스 상속
void sendmessage();//추상 메소드 추가
void receivemessage();//추상 메소드 추가
}
interface Mp3Interface{
void play();//추상 메소드
void stop();//추상 메소드
}
interface Mp3PhoneInterface extends MobliephonInterface,Mp3PhoneInterface{
//extends 키워드와 ,로 인터페이스 다중 상속
void newRingbell();//새로운 추상 메소드 추가
}
추상 클래스와 인터페이스
유사점 | - 객체를 생성할 수 없고, 상속을 위한 슈퍼 클래스로만 이용 - 클래스의 다형성을 실현하기 위한 목적 |
차이점 | 목적 | 구성 |
추상 클래스 | 추상 클래스는 서브 클래스에서 필요로 하는 대부분의 기능을 구현해서 서브 클래스가 상속받아 활용할 수 있도록 함. 다만, 서브 클래스에서 구현할 수밖에 없는 기능만을 추상 메소드로 선언하여, 서브 클래스에서 구현하도록 하는 목적 (다형성) |
- 추상 메소드와 일반 메소드 모두 포함 - 상수, 변수 필드 모두 포함 |
인터페이스 | 인터페이스는 객체의 기능을 모두 공개한 표준화 문서와 같은 것으로, 개발자에게 인터페이스를 상속받는 클래스의 목적에 따라 인터페이스의 모든 추상메소드를 만들도록 하는 목적 (다형성) | - 변수 필드는 포함하지 않음 - 상수, 추상 메소드, 일반 메소드,default 메 소드, static 메소드 모두 포함 - protected 접근 지정 선언 불가 - 다중 상속 지원 |
'JAVA' 카테고리의 다른 글
[Java.4-2] 패키지 2 : 자바의 주요 패키지 (0) | 2022.04.19 |
---|---|
[Java.4-1] 패키지 1 : 패키지의 개념 (0) | 2022.04.19 |
[Java.3-4] 추상 메소드와 추상 클래스 (0) | 2022.04.16 |
[Java.3-3] 메소드 오버라이딩 (0) | 2022.04.16 |
[Java.3-2] 업캐스팅과 다운캐스팅 (0) | 2022.04.16 |