목표
자바의 인터페이스에 대해 학습하세요.
목차
1. 인터페이스 정의하는 방법
2. 인터페이스 구현하는 방법
3. 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법
4. 인터페이스 상속
5. 인터페이스의 기본 메소드 (Default Method), 자바 8
6. 인터페이스의 static 메소드, 자바 8
7. 인터페이스의 private 메소드, 자바 9
1. 인터페이스 정의하는 방법
interface 키워드
인터페이스는 클래스들이 구현해야 하는 동작을 지정하는데 사용되는 추상 자료형이다. (=규격, 틀)
클래스들이 기능을 서로 다르게 구현할 수 있도록 하는 클래스의 규격 선언, 클래스의 다형성 실현 도구.
interface PhoneInterface{ // 인터페이스 선언
public static final int TIMEOUT = 10000; // 상수 필드. public static final 생략가능
public abstract void sendCall(); // 추상 메소드. public abstract 생략가능
public default void printNum(){ // 디폴드 메소드. public 생략가능
System.out.println("NUM:");
};
}
- 추상 메소드: public abstract, 생략 가능, 다른 접근 지정으로 지정할 수 없다.
특징
- 인터페이스는 객체를 생성할 수 없다.
- 인터페이스 타입의 레퍼런스 변수는 선언 가능
- 인터페이스끼리 상속 가능
- 인터페이스를 상속받아 클래스를 작성하면 인터페이스의 모든 추상 메소드를 구현해야 한다.
2. 인터페이스 구현하는 방법
인터페이스의 모든 추상 메소드를 구현한 클래스를 작성
class SamsungPhone implements PhoneInterface{ // 인터페이스 구현
// 인터페이스에 있던 추상 메소드를 구현
public void sendCall(){
System.out.println("알림음");
}
// 추가로 메소드를 작성할 수 있음
public void flash(){
System.out.println("불 켜짐");
}
}
3. 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법
PhoneInterface galaxy;
4. 인터페이스 상속
클래스는 인터페이스를 상속받을 수 없다. 인터페이스끼리만 상속이 가능하다.
상속은 extends 키워드 사용. 다중상속도 가능하다.
interface MobilePhoneInterface extends PhoneInterface{
void sendSMS();
void receiveSMS();
}
5. 인터페이스의 기본 메소드 (Default Method), 자바 8
- default 메소드: 접근 지정자는 public만 가능.
- 인터페이스 내에 코드 작성.
6. 인터페이스의 static 메소드, 자바 8
- static 메소드: 접근 지정자가 없으면 public이고 private 가능
- 인터페이스 내에 코드 작성.
7. 인터페이스의 private 메소드, 자바 9
- private 메소드: 인터페이스 내에서만 호출 가능.
- 인터페이스 내에 코드 작성.
추가) 인터페이스와 추상클래스
목적 | 구성 | |
추상클래스 | 추상 클래스는 서브 클래스에서 필요로 하는 대부분의 기능을 구현하고 서브 클래스가 상속받아 활용할 수 있도록 하되, 서브클래스에서 구현할 수밖에 없는 기능만을 추상 메소드로 선언하여 서브 클래스에서 구현할도록 하는 목적(다형성) | - 추상 메소드와 일반 메소드 모두 포함 - 상수, 변수 필드 모두 포함 |
인터페이스 | 인터페이스는 객체의 기능을 모두 공개한 표준화 문서와 같은 것으로, 개발자에게 인터페이스를 상속받는 클래스의 목적에 따라 인터페이스의 모든 추상 메소드를 만들도록 하는 목적(다형성) | - 변수 필드는 포함하지 않음 - 상수, 추상 메소드, 일반 메소드, 디폴트 메소드, static메소드 모두 포함 - protected 접근 지정 선언 불가 - 다중 상속 지원 |
명품 JAVA Programming/황기태,김효수
'자바 스터디' 카테고리의 다른 글
10주차 과제: 멀티쓰레드 프로그래밍 (0) | 2022.06.10 |
---|---|
9주차 과제: 예외 처리 (0) | 2022.06.08 |
7주차 과제: 패키지 (0) | 2022.06.04 |
6주차 과제: 상속 (0) | 2022.05.30 |
5주차 과제: 클래스 (0) | 2022.05.20 |