인터페이스 Fightable 을 클래스 Fighter가 구현했을 때, Fighter인스턴스를 Fightable 타입의 참조변수로 참조하는 것이 가능하다.
Fightable f = new Fighter();
따라서 인터페이스는 메서드의 매개변수 타입으로도 사용될 수 있다.
void attack(Fightable f){
//내용생략
}
인터페이스 타입의 매개변수가 갖는 의미는 메서드 호출 시 해당 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 제공해야 한다는 것이다.
class Fighter extends Unit implements Fightable{
public void move(int x, int y){/*내용*/}
public void attack(Fightable f){/*내용*/}
}
위 코드처럼 Fightable 인터페이스를 구현한 Fighter클래스가 있을 때, attack메서드의 매개변수로 Fighter인스턴스를 넘겨 줄 수 있다. 즉, attack(new Fighter())와 같이 할 수 있다는 것.
그리고 메서드의 리턴타입으로 인터페이스를 지정하는 것도 가능하다.
Fightable method(){
...
Fighter f = new Fighter();
return f;
}
리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다.
위의 코드에서 method()의 리턴타입이 Fightable 인터페이스이기 때문에 메서드의 return 문에서 Fightable인터페이스를 구현한 Fighter클래스의 인스턴스 주소를 반환한다.
인터페이스의 장점
- 개발시간을 단축시킬 수 있다.
- 표준화가 가능하다.
- 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
- 독립적인 프로그래밍이 가능하다.
🧨 개발시간이 단축된다
메서드를 호출하는 쪽에서 메서드 내용과 관계없이 선언부만 알면 된다.
그리고 어느 한 쪽이 인터페이스를 구현하는 클래스를 작성하고 있을 때, 클래스가 작성될 때까지 기다리지 않고 동시에 개발 진행이 가능하다.
🧨 표준화가 가능하다
프로젝트 기본틀을 인터페이스로 작성한 다음, 개발자들에게 인터페이스를 구현하여 프로그램을 작성하도록 하면
보다 일관되고 정형화된 프로그램의 개발이 가능하다.
🧨 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다
서로 상속관계도 아니고, 같은 조상클래스를 가지고 있지도 않은 클래스들에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어줄 수 있다.
🧨 독립적인 프로그래밍이 가능하다.
인터페이스를 이용하면 클래스 선언과 구현을 분리시킬 수 있기 때문에 실제 구현에 독립적인 프로그램 작성이 가능하다. 클래스와 클래스간의 직접적인 관계를 인터페이스를 이용해서 간접적인 관계로 변경하면 , 한 클래스의 변경이 다른 클래스의 영향을 미치지 않는 독립적인 프로그래밍이 가능하다.
인터페이스는 두 대상(객체)간의 '연결'을 돕는 '중간 역할'을 한다. 즉 껍데기의 느낌?
구현을 직접 다루면 변경이 어려운데 인터페이스가 껍데기 역할을 해줘서 변경에 유리하다.
'JAVA' 카테고리의 다른 글
[자바의 정석 기초편 chapter 10] Calendar/date (0) | 2022.12.15 |
---|---|
[자바의 정석 기초편 chapter 7] 디폴드 메서드와 static메서드 (0) | 2022.12.13 |
[자바의 정석 기초편 chapter 7] 인터페이스(interface) (0) | 2022.12.12 |
[자바의 정석 기초편 chapter 7] 추상클래스(abstract class) (0) | 2022.12.09 |
[자바의 정석 기초편 chapter 7] 매개변수의 다형성 (0) | 2022.12.09 |