인터페이스란?
일종의 추상클래스이다. 즉, 추상메소드의 집합이다.
추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 일반 메서드 또는 멤버변수를 가질 수 없다.
오직 추상메서드와 상수만 멤버로 가질 수 있다.
- 추상클래스: 미완성 설계도(부분적인 완성이 되어있음)
- 인터페이스: 기본 설계도(구현된 것이 아무것도 없음. 밑그림만 그려진 정도)
인터페이스의 목적
다른 클래스를 작성하는데 도움 줄 목적으로 작성된다.
인터페이스 작성법
클래스 작성법과 같다. 다만 class 대신 interfcace를 사용한다.
접근제어자는 class와 같이 public 또는 default만 가능하다.
interface 인터페이스이름{
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수목록);
}
제약사항
- 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.
- 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다.
- 단, static메서드와 디폴트 메서드는 예외(JDK1.8부터)
(생략 가능한 이유는 예외가 없기 때문이다. 모든 멤버변수와 메서드의 public static final이 붙고, public abstract가 붙기때문!!)
인터페이스의 상속
인터페이스는 인터페이스로부터만 상속받을 수 있고, 클래스와 달리 다중상속이 가능하다.
(클래스와 달리 Object클래스와 같은 최고 조상이 없다.)
추상클래스가 단일 상속만 허용하는 이유?
구현된 내용이 있을 경우 다중상속시 어느 조상 클래스의 내용을 상속받을지 몰라서 단일 상속만 허용한다.
인터페이스는 구현된 내용이 없으니까 다중 상속이 가능하다.
interface Movable{
//지정위치로 이동하는 메서드
void move(int x, int y);
}
interface Attackable{
//지정된 대상을 공격하는 메서드
void attack(Unit u);
}
interface Fightable extends Movable, Attackable{ }
인터페이스의 구현
인터페이스가 인스턴스를 생성하려면 구현한다는 의미의 키워드 'implements'를 사용한다.
class Fighter implements Fightable {
public void move(int x, int y){/*내용*/}
public void attack(Unit u){/*내용*/}
}
만약 구현하는 인터페이스 메서드 중 일부만 구현한다면, abstract 를 붙여서 추상클래스로 선언해야한다.
abstract class Fighter implements Fightable{
public void move(int x, int y){/*내용*/}
}
상속과 구현을 동시에 할 수도 있다.
class Fighter extends Unit implements Fightable{
public void move(int x, int y){/*내용*/}
public void attack(Unit u){/*내용*/}
}
인터페이스와 추상클래스 Q&A
Q) 인터페이스란?
A) 추상메서드의 집합
Q) 인터페이스의 구현이란?A) 추상메서드의 몸통 만들기
Q) 추상클래스와 인터페이스의 공통점A) 추상메서드를 가짐
Q) 추상클래스와 인터페이스의 차이점A) 인터페이스는 iv를 가질 수 없다. 추상클래스는 단일상속, 인터페이스는 다중 상속추상클래스는 일반 메서드와 멤버면수를 가질 수 있고, 인터페이스는 추상메서드와 상수만 가질 수 있다.
'JAVA' 카테고리의 다른 글
[자바의 정석 기초편 chapter 7] 디폴드 메서드와 static메서드 (0) | 2022.12.13 |
---|---|
[자바의 정석 기초편 chapter 7] 인터페이스를 이용한 다형성과 장점 (0) | 2022.12.12 |
[자바의 정석 기초편 chapter 7] 추상클래스(abstract class) (0) | 2022.12.09 |
[자바의 정석 기초편 chapter 7] 매개변수의 다형성 (0) | 2022.12.09 |
[자바의 정석 기초편 chapter 7] instanceof 연산자 (0) | 2022.12.09 |