본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


블스님의 동영상 강좌를 보고 많은 이해가 되었기 때문에 해당 내용을 코딩하여 포스팅하였습니다.

문제시 삭제하겠습니다. 감사합니다.


Java는 다중상속이 불가능합니다. 하지만 Java에서는 Interface 를 통해 여라 가지 타입으로 객체를 선언할 수 있습니다. 몇몇 사람들은 이것을 가지고 Java에서도 다중 상속이 존재한다고 생각합니다. 하지만 Java에서도 Interface를 통해 여러 가지 타입으로 객체를 선언할 수 있습니다. 몇몇 사람들은 이것을 가지고 java 에서도 다중 상속이 존재한다고 생각합니다. 그러나 정확하게 말하면 java는 다중 상속이 아닌 다형성이 존재한다고 이해하셔야 합니다. 다른 말로는 '다중 구현'이라고 합니다.


인터페이스를 통한 로봇 장난감 만들기 프로그래밍


마트에 가면 로봇 장난감이 많고, 장난감에는 다양한 기능들을 가지고 있습니다.

 

 미사일 발사

불빛 발사 

팔다리 움직임 

곰돌이

 X

마징가 

비행기 


위의 표와 같이 구현을 하기 위해 인터페이스를 통해 코딩을 해 보았습니다.

Main에서 호출을 했을 때 Source는 아래와 같습니다.


package interfacestudy;

public class ToyMain {
    public static void main(String[] args) {
        Toy pooh = new PoohToy();
        Toy airplain = new AirPlainToy();
        Toy manzinger = new ManzingerToy();
    }
}

Toy라는 객체를 선언해놓고 생성은 PoohToy, AirPlainToy, manzinerToy 선언을 했습니다.

어떻게 설계를 했고 코딩을 했길래 Toy라는 객체의 이름으로 3가지의 다른 장난감을 생성하여 처리할 수 있을까..?


먼저 소스를 공유하고 아래설명을 간략하게 작성해 보겠습니다.

최상위 Interface

package interfacestudy;

public interface Toy {

}

Toy인터페이스를 상속받은 각 기능들의 인터페이스
package interfacestudy;

public interface I_Light extends Toy{
    public void light();
}


package interfacestudy;

public interface I_Missile extends Toy{
    public void missile();
}


package interfacestudy;

public interface I_MoveLegArm extends Toy{
    public void moveLegArm();
}


장난감들의 클래스 

package interfacestudy;

public class PoohToy implements I_MoveLegArm{
    
    public PoohToy() {
        // TODO Auto-generated constructor stub
        System.out.println("곰돌이 입니다");
        moveLegArm();
        System.out.println("====================");
    }

    @Override
    public void moveLegArm() {
        // TODO Auto-generated method stub
        System.out.println("팔다리를 움직입니다");
    }
}


package interfacestudy;

public class ManzingerToy implements I_Missile, I_MoveLegArm {
    
    public ManzingerToy() {
        // TODO Auto-generated constructor stub
        System.out.println("마징가 입니다");
        missile();
        moveLegArm();
        System.out.println("====================");
    }

    @Override
    public void moveLegArm() {
        // TODO Auto-generated method stub
        System.out.println("팔다리를 움직입니다");
    }

    @Override
    public void missile() {
        // TODO Auto-generated method stub
        System.out.println("미사일을 발사합니다.");
    }

}


package interfacestudy;

public class AirPlainToy implements I_Light, I_Missile{
    
    public AirPlainToy() {
        // TODO Auto-generated constructor stub
        System.out.println("비행기 입니다");
        missile();
        light();
        System.out.println("====================");
    }
    
 

    @Override
    public void missile() {
        // TODO Auto-generated method stub
        System.out.println("미사일을 발사합니다.");
    }

    @Override
    public void light() {
        // TODO Auto-generated method stub
        System.out.println("빛을 냅니다.");
    }
    
}


위의 사진은 Toy라는 인터페이스가 최상위 부모 Interface가 되고 I_Missle, I_Light, I_MoveLegArm은 Toy인터페이스를 상속받게됩니다. 그리고 각 장난감들의 클래스는 가지고 있는 기능들의 인터페이스를 상속하여 처리하게 됩니다.