7. 인터페이스
7.1 인터페이스란?
인터페이스는 일종의 추상클래스.
추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서
추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.
7.2 인터페이스의 작성
1 | interface 인터페이스이름{ |
- 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.
- 모든 메서드는 public abstract 이어야하며, 이를 생략할 수 있다.
7.3 인터페이스의 상속
인터페이스는 인터페이스로부터만 상속받을 수 있으며, 클래스와는 달리 다중상속이 가능하다.
1 | interface Movable{ |
7.4 인터페이스의 구현
그 자체로는 인스턴스를 생성할 수 없음. 클래스에서 implements를 사용하여 구현함.
1 | class 클래스 이름 implements 인터페이스이름{ |
구현하는 인터페이스의 메서드 중 일부만 구현하면 추상메서드로 선언되어야 함.1
2
3
4
5abstract class Fighter implements Figtable{
public void move(int x, int y){
//기능 구현
}
}
상속과 구현을 동시에 할 수 있음1
2
3
4
5
6
7
8class Figther extends Unit implements Figthable{
public void move(int x, int y){
//기능 구현
}
public void attack(){
//기능 구현
}
}
7.5 인터페이스를 이용한 다중상속
자바에서는 다중상속을 허용하지 않아서 인터페이스로 다중상속을 할 수는 있지만 거의 하지 않는다.
두개의 클래스를 상속받아야 하는 상황이라면 두 클래스중 비중이 높은걸 상속받고 나머지는 클래스 내부 멤버로 포함시키는 방법.
필요한 부분을 뽑아 인터페이슬슬 만든 후 구현함.
7.6 인터페이스를 이용한 다형성
인터페이스 타입의 참조변수로 이를 구현한 클래스의 인스턴스를 참조할 수있고 형변환도 가능함.
인터페이스 : Fightable, 클래스 : Fighter(implements Figtable)일때1
2Fightable f = (Fightable) new Figther();
Fightable f = new Fighter();
인터페이스는 매게변수 타입으로도 쓸 수 있음1
viod attack(Figtable f){}
메서드 호출 시 해당 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 제공해야한다.
여기서는 new Figther();
리턴타입으로 인터페이스 타입을 지정하는것도 가능함.1
2
3
4Fightable method(){
// ...
return new Fighter();
}
7.7 인터페이스의 장점
- 개발시간을 단축시킬 수 있다.
- 표준화가 가능하다.
- 서로 관계업는 클래스들에게 관계를 맺어줄 수 있다.
- 독립적인 프로그래밍이 가능하다.
7.8 인터페이스의 이해
- 클래스를 사용하는 쪽과 클래스를 제공하는 쪽이 있다.
- 메서드 사용하느 쪽에서는 사용하려는 메서드의 선언부만 알면된다.