Android 개발/Java, Java8

JAVA Interface 안드로이드를 위한 자바 인터페이스 #다중상속 #콜백

Developer88 2016. 12. 21. 20:32
반응형

오늘은 안드로이드를 위한 자바의 Interface를 정리해볼려고 합니다.


참고로 여기서 말하는 Java의 혹은 android에서 사용하는 Interface는

User Interface, 즉 UI의 Interface가 아닙니다.

개발자의 코드와 생성한 객체간의 interface의 역할을 의미합니다.

음... 추상적이라 잘 않와닿으니,, 쓰임새를 보면서 알아보기로 하겠습니다.


안드로이드와 관련해서 Interface가 필요한 경우가 여러가지가 있겠지만,

크게 두가지를 짚고 가려고 합니다.

바로, 다중상속이 필요할 때와 콜백으로 사용할 때인데요.


1. 다중 상속이 필요할 때


사실 말이 어패가 좀 있는것이, 정확히는 다중 상속이 아니라, 다중 구현(implements)을 하는 것입니다.

특히나 다중 상속이 않되는 자바의 클래스에게는 매우 중요한 것이죠.


(참고로, 가볍게 상속(extends)을 상기해보면,

상속(extends)의 경우 객체 생성시에 부모객체가 생성되고나서, 자식객체가 생성이 되며,

부모메소드 호출시 super.부모메소드() 를 사용할 수 있습니다.

또한, 상속(extends)이 변수를 상속받을 수 있다면, 구현(implements)은 변수상속이 불가능하고,

하라고 하는 메소드만 구현하는 것이 다른점입니다.)


실제 코드로 진행해 보겠습니다.


>> 먼저 상업용차CommercialCar에는 AutoPay()라고 하는 자동 지불기능을 구현해야 한다고 하겠습니다.

>> 또한, BoostCar에는 SuperDrive()라고하는 기능을 가져야 된다라고 정하겠습니다.




>> 소나타와 아반테 클래스가 있습니다. 그리고 둘은 각각 Drive 라는 메소드를 가지고 있습니다. 


  


>> 이 때 소나타를 상업용차CommercialCar로서의 역할과 boostCar로서의 역할을 하도록 하고자 하면 다음과 같이 하면 됩니다. 




>> 이제 메인 클래스에 객체를 생산해 보겠습니다.

>> 소나타는 객체 생성후에 달리게하고, 오토페이와 슈퍼드라이브기능을 동작시키겠읍니다.

>> 아반테는 특별한 기능없이 달리는 기능만 있으므로 달리도록만 하겠습니다.


    run해보면 다음과 같이 나옵니다.


    네, 동작하였군요. 세상일이 이렇게만 쉬우면 좋으련만은...;;;;

    이런식으로 인터페이스를 이용해서 기능이나 역할을 부여하도록 하고, 다중으로 이를 구현할 수 있습니다.    

    다음으로 콜백을 정리해보겠습니다.


    2. 콜백을 유저 인터랙션에~!


    콜백 메소드는 너무나 중요한 인터페이스의 역할입니다.

    A라는 사건이 발생하면 B라는 메소드를 호출 하도록 정의하는 것인데요.

    대부분의 유저인터랙션이 이렇습니다.

    유저가 특정 엘리먼트를 클릭하거나, 드래그한다거나 하는 등등....의 말이지요.


    그리고 이렇게 콜백으로 사용하는 인터페이스는 Listener라는 이름이 어미에 붙는데요.

    특정 반응을 들으면(캐치하면) 뭘 하도록하는 녀석이라는 의미로 생각하시면 될 것 같아요.


    시나리오: 유저가 버튼을 누르면, 이미지가 로딩되고, 로딩이 끝나면 팝업이 뜬다.


    위 시나리오대로 구현하려면 어떻게 해야할지 코드로 정리해보겠습니다.


    >> 먼저 필요한 객체들을 생성하겠습니다.

    >> 안드로이드가 필요하니 먼저 클래스를 만들구요

    >> 이미지를 로딩하는 ImageLoader도 생성해 둡니다. 

    >> 이 안드로이드서 btnTouch()라는 메소드를 두어서, 유저가 버튼을 터치하면 ImageLoader를 실행토록 합니다.





    >> 안드로이드를 생산하고 버튼 터치기능을 실행토록 메인클래스를 씁니다.




    >> 이제 인터페이스를 만들어 보겠습니다.




    >> 준비가 다 되었으니, 안드로이드에서 리스너를 구현하겠습니다.

    >> OnLoadListener를 implement하면 onLoadFinish 메소드를 구현해야 합니다.


    그리고 ImageLoader의 생성자에 loadListener를 주고, ImageLoader가 생성시에 this를 넘겨주는데요,

    여기서 this는 OnLoadListener입니다.

    버튼을 누르면 이미지로더의 start메소드를 실행할테니,

    생성시에 넘긴 리스너를 통해서 로딩이 끝나면 

    onLoadFinish매소드가 실행을 하도록 해줍니다.



    아래는 loadListner를 생성자로 갖는 ImageLoader입니다.




    이클립스에서 실행을 하면, 아래와 같은 화면을 보게 됩니다.



    다시 정리해보면, Android 기계는 OnLoadListener 인터페이스를 구현하였고,

    버튼을 누르면, 이미지로더를 생성함과 동시에 리스너를 넘겨주었습니다.

    그리고 ImageLoader의 start버튼을 실행시켰는데요.

    ImageLoader가 리스너를 가지고 있으므로,

    이미지를 로딩하고 1초후에,  Android의 메소드인 onLoadFinish()를 실행해주는 것입니다.

    728x90