인터페이스는 무엇일까?
인터페이스 (Interface)
--
인터페이스는
클래스가 구현해야 할 메서드의 집합을 정의하는 일종의 추상적인 틀이다.
추상 클래스처럼 추상 메서드를 가지고 있지만
추상 클래스보다 추상화 정도가 높아서
추상 크래스와 달리 몸통을 갖춘(구현된) 일반 메서드나 멤버변수를 구성원으로 가질 수 없다.
오직 "추상 메서드"와 "상수"만을 멤버로 가진 틀이다.
추상 클래스는
일반 클래스에 추상 메서드가 하나라도 있는 경우를 의미하고
인터페이스는
구성원이 전부 추상 메서드나 상수로 이루어진 경우를 의미한다.
인터페이스 기본 형식
interface 인터페이스명 {
추상 메서드 or 상수
}
interface Test {
public static final double PI = 3.14; // 상수
// double PI = 3.14; (public static final 생략 가능)
public abstract void play(); // 추상 메서드
// void play(); (public abstract 생략 가능)
}
인터페이스 규칙
- 모든 멤버변수는 "public static final"로 선언된 상수여야 한다. (이러한 규칙으로 인해 생략도 가능)
- 모든 메서드는 "public abstract"로 선언된 메서드야 한다. (이러한 규칙으로 인해 생략도 가능)
- JDK 1.8부터는 static 메서드나 default 메서드는 사용 가능 (구현부 있어야 함)
- 추상 클래스처럼 객체로 생성이 불가능하여 구현부를 완성할 클래스를 작성해줘야 객체로 생성 가능하다.
- 인터페이스도 다형성 가능
--
인터페이스의 상속
--
인터페이스도 상속할 수 있지만, 인터페이스끼리만 상속이 가능하다.
인터페이스 규칙
- 인터페이스끼리만 상속 가능
- 클래스와 다르게 "다중 상속"이 가능
- 클래스와 동일하게 "extends" 키워드 사용하여 상속 가능
- 클래스와 다르게 Object 클래스처럼 최상단 부모 인터페이스가 없다.
인터페이스 상속 기본 형식
interface 자식인터페이스명 extends 부모인터페이스명1, 부모인터페이스명2, ... {
...
}
interface Movable {
void move(int x, int y);
}
interface Attackable {
void attack(Unit u);
}
interface Fightable extends Movable, Attackable {
...
}
--
인터페이스의 구현
--
인터페이스도 추상 클래스처럼 그 자체로 객체를 생성할 수 없으며,
구현부를 완성할 클래스를 작성해야 한다.
인터페이스 구현 기본 형식
class 클래스명 implements 인터페이스명 { ... }
class AAA Implements III {
public void move(int x, int y) {
// move 추상 메서드 구현부 작성
}
public void stop() {
// stop 추상 메서드 구현부 작성
}
}
만약 인터페이스에서 일부 추상 클래스만 구현한다면
해당 클래스는 추상 클래스가 되어 "abstract" 키워드를 붙여야 한다.
abstract class AAA Implements III {
public void move(int x, int y) {
// move 추상 메서드 구현부 작성
}
// stop() 추상 메서드는 아직 구현 안함
}
클래스 상속과 인터페이스의 구현을 동시에 작성할 수도 있다.
class AAA extends BBB Implements III {
public void move(int x, int y) {
...
}
public void stop() {
...
}
}
순서
AAA 클래스에 BBB 클래스를 상속 후 AAA 클래스에서 III 인터페이스 구현
--
'Language > Java' 카테고리의 다른 글
예외처리 (try-catch, finally, throw) (0) | 2024.10.24 |
---|---|
내부 클래스 (+ 익명 클래스) (0) | 2024.10.23 |
다형성 (예시 : A opt = new B()) (0) | 2024.10.21 |
제어자, 접근 제어자 (+ static, final, abstract, 추상 클래스, 추상 메서드) (0) | 2024.10.20 |
package와 import (+ static import) (1) | 2024.10.19 |