2013년 8월 19일 월요일

[4주차 2일] interface의 사용

Interface의 상속과 구현

아래의 그림과 같이 AImp클래스는 A인터페이스를 구현하고,
B인터페이스는 A인터페이스를 상속받고,
BImp클래스는 B인터페이스를 구현하고, 
X클래스는 B인터페이스를 구현했다고 가정하자.

이때 아래의 코드가 가능한지 확인해 보자.

A a = new A();       ==> 불가능  : 인터페이스는 new로 객체생성 못함.
A a = new B();       ==> 불가능  : 인터페이스는 new로 객체생성 못함.
A a = new AImp();  ==> 가능
A a = new BImp();  ==> 가능

B b = new BImp();  ==> 가능
B b = new AImp();  ==> 불가능  : AImp클래스는 B에서 지정한 기능을 구현 안함.

* X와BImp클래스A와 B인터페이스의 기능을 모두 구현해야 한다.







Interface로 기능제한과 개발의 자유

: 리턴타입을 Interface로 하는 경우 구현 메서드에서는 해당 메서드를 구현한 클래스를 사용하므로 다양한 기능을 사용할 수 있어서 개발이 자류롭고, 리턴받은 쪽에서는 불필요한 기능의 사용을 제한하므로 오사용을 막을수 있다.

아래의 그램에서 보면
X클래스는 A, B, C 인터페이스를 구현상 상황이다.

이때,

A a  = new X();   ==> A의 메서드만 사용가능
B a  = new X();   ==> B의 메서드만 사용가능
C a  = new X();   ==> C의 메서드만 사용가능
X a  = new X();   ==> X의 메서드 모두 사용가능


* 현업에서는 특별한 경우가 아니고서 리스트의 리턴타입 Collection 또는 List로 한다.




댓글 없음:

댓글 쓰기