JAVA

[자바의 정석 기초편 chapter 7] 인터페이스를 이용한 다형성과 장점

zoozoo2 2022. 12. 12. 15:52

인터페이스 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클래스의 인스턴스 주소를 반환한다.

 


인터페이스의 장점

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

 

🧨 개발시간이 단축된다

메서드를 호출하는 쪽에서 메서드 내용과 관계없이 선언부만 알면 된다.

그리고 어느 한 쪽이 인터페이스를 구현하는 클래스를 작성하고 있을 때, 클래스가 작성될 때까지 기다리지 않고  동시에 개발 진행이 가능하다.

 

🧨 표준화가 가능하다

프로젝트 기본틀을 인터페이스로 작성한 다음, 개발자들에게 인터페이스를 구현하여 프로그램을 작성하도록 하면

보다 일관되고 정형화된 프로그램의 개발이 가능하다.

 

🧨 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다

서로 상속관계도 아니고, 같은 조상클래스를 가지고 있지도 않은 클래스들에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어줄 수 있다.

 

🧨 독립적인 프로그래밍이 가능하다.

인터페이스를 이용하면 클래스 선언과 구현을 분리시킬 수 있기 때문에 실제 구현에 독립적인 프로그램 작성이 가능하다. 클래스와 클래스간의 직접적인 관계를 인터페이스를 이용해서 간접적인 관계로 변경하면 , 한 클래스의 변경이 다른 클래스의 영향을 미치지 않는 독립적인 프로그래밍이 가능하다. 

 

 

인터페이스는 두 대상(객체)간의 '연결'을 돕는 '중간 역할'을 한다. 즉 껍데기의 느낌?

구현을 직접  다루면 변경이 어려운데 인터페이스가 껍데기 역할을 해줘서 변경에 유리하다.