[CH7. 객체지향프로그래밍2] 인터페이스의

7. 인터페이스

7.1 인터페이스란?

인터페이스는 일종의 추상클래스.
추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서
추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.

7.2 인터페이스의 작성

1
2
3
4
interface 인터페이스이름{
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수 목록);
}
  • 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.
  • 모든 메서드는 public abstract 이어야하며, 이를 생략할 수 있다.

7.3 인터페이스의 상속

인터페이스는 인터페이스로부터만 상속받을 수 있으며, 클래스와는 달리 다중상속이 가능하다.

1
2
3
4
5
6
7
8
interface Movable{
void move(int x, int y);
}
interface Attactable{
void move(Unit u);
}

interface Fightable extends Movable, Attackable{}

7.4 인터페이스의 구현

그 자체로는 인스턴스를 생성할 수 없음. 클래스에서 implements를 사용하여 구현함.

1
2
3
4
5
6
7
8
9
10
11
class 클래스 이름 implements 인터페이스이름{
//인터페이스에 정의된 추상메서드 구현
}
class Figther implements Fightable{
public void move(int x, int y){
//기능 구현
}
public void attack(Unit u){
//기능 구현
}
}

구현하는 인터페이스의 메서드 중 일부만 구현하면 추상메서드로 선언되어야 함.

1
2
3
4
5
abstract class Fighter implements Figtable{
public void move(int x, int y){
//기능 구현
}
}

상속과 구현을 동시에 할 수 있음

1
2
3
4
5
6
7
8
class Figther extends Unit implements Figthable{
public void move(int x, int y){
//기능 구현
}
public void attack(){
//기능 구현
}
}

7.5 인터페이스를 이용한 다중상속

자바에서는 다중상속을 허용하지 않아서 인터페이스로 다중상속을 할 수는 있지만 거의 하지 않는다.
두개의 클래스를 상속받아야 하는 상황이라면 두 클래스중 비중이 높은걸 상속받고 나머지는 클래스 내부 멤버로 포함시키는 방법.
필요한 부분을 뽑아 인터페이슬슬 만든 후 구현함.

7.6 인터페이스를 이용한 다형성

인터페이스 타입의 참조변수로 이를 구현한 클래스의 인스턴스를 참조할 수있고 형변환도 가능함.
인터페이스 : Fightable, 클래스 : Fighter(implements Figtable)일때

1
2
Fightable f = (Fightable) new Figther();
Fightable f = new Fighter();

인터페이스는 매게변수 타입으로도 쓸 수 있음

1
viod attack(Figtable f){}

메서드 호출 시 해당 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 제공해야한다.
여기서는 new Figther();
리턴타입으로 인터페이스 타입을 지정하는것도 가능함.

1
2
3
4
Fightable method(){
// ...
return new Fighter();
}

7.7 인터페이스의 장점

  • 개발시간을 단축시킬 수 있다.
  • 표준화가 가능하다.
  • 서로 관계업는 클래스들에게 관계를 맺어줄 수 있다.
  • 독립적인 프로그래밍이 가능하다.

7.8 인터페이스의 이해

  • 클래스를 사용하는 쪽과 클래스를 제공하는 쪽이 있다.
  • 메서드 사용하느 쪽에서는 사용하려는 메서드의 선언부만 알면된다.

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×