ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA8]자바의 다중 상속 관련 내용
    JAVA/in 기초 2014. 12. 19. 13:01
    728x90

    자바7 버젼까지 다중 상속의 개념 보다는 확장이라는 개념이 지배적이었다.

    인터페이스를 다중으로 상속받아 좀더 확장된 인터페이스가 되기 때문이다.


    그런데 자바8에서는 default method를 이용한 다중상속이 가능하다. 



    다음은 그 예제를 구현간단하게 구현 하여 보았다.

    비행카(PlaneCar) 라는 다중상속을 받은 인터페이스가 있고, 비행기(Plane)와 자동차(Car)라는 인터페이스가 있다 각 인터페이스는 다음과 같은 기능을 가진다.



    [비행카 클래스도]


    비행카 인터페이스 에서는 다중상속에는 다이아몬드 문제라는 것이 있다, 그것을 어떻게 처리하는지를 보여주기 위해 carry()라는 default method를 추가 하였다.


    public interface Plane{
        default void fly(){
            System.out.println("I can fly.");
        }
        default void carry(){
            System.out.println("plane carry");
        }
    }
    
    

    [PLANE INTERFACE]


    public interface Car {
        default void drive(){
            System.out.println("I can drive.");
        }
        default void carry(){
            System.out.println("car carry");
        }
    }
    

    [CAR INTERFACE]


    public interface PlaneCar extends Plane, Car{
        @Override default void carry(){
            Plane.super.carry();
            Car.super.carry();
        }
    }
    

    [PLANECAR INTERFACE]

    carry() method의 다이아몬드 문제를 위해 @Override를 통해 처리를 하였다. IDE 툴에서 해당 method를 override 하지 않을 경우 오류가 발생한다.

    public class Call implements PlaneCar{
        public static void main(String[] arags){
            new Call().call();
        }
        public void call(){
            fly();
            drive();
            carry();
        }
    }
    

    [CALL CLASS]


    앞으로 설계를 할때 다중 상속이 필요할 경우 위와 같이 처리 할 수 있을 것이다.

    다만, java 개발을 하면서 다중 상속에 대한 생각 없이 설계를 했었는데, 고민할 부분이 추가 된거 같기도하다.

    뭐.. 그냥 안써도 되겠지만...


    참고 자료 : 

    http://m.egloos.zum.com/gyumee/v/3200829

    http://www.slideshare.net/mobile/gyumee/8-37599530

    728x90

    'JAVA > in 기초' 카테고리의 다른 글

    [DESIGN PATTERN]시작하기 전에 알아야 할 것들  (0) 2015.01.17
    [발번역]언제 ArrayList 대신 LinkedList을 쓰나요?  (0) 2014.12.25
    [JAVA8]Stream 맛보기  (0) 2014.12.02
    스레드 기본(3)  (0) 2014.03.05
    스레드 기본(2)  (0) 2014.03.05
Designed by Tistory.