2012년 7월 5일 목요일

추상 클래스와 인터페이스

추상 클래스 ; 반드시 확장하여야 하는 클래스.
추상 매소드 : 반드시 오버라이드 해야 하는 매소드.
인터페이스 : 오로지 추상 매소드로 만들어져 있으면 인터페이스(사실 final 상수도 포함됨)




http://blog.daum.net/kbh0007/11089989

abstract class Animal {  
   public abstract void sound();//몸체없음   public abstract void who();//몸체 없음  
   public void whoami()
   { 
            System.out.println("I am animal"
);   }}

 abstract가 하나 이상 있으면 우선 인터페이스나 추성 클레스로 분류한다.

위 예제처럼 추상 클레스 안에 구현부가 있으면 인터페이스에서는 제외된다.

인터페이스는 


링크 설명이 좋고

인터페이스 하다보면 콜백 메서드 구현부로 가게 되는데


링크가 이해에 도움이 된다.

  1. interface Callable  
  2. {  
  3.     public void callBackMethod();  
  4. }  
  5. class Worker  
  6. {  
  7.     // Worker gets a handle to the boss object via the Callable interface.  
  8.     // There's no way this worker class can call any other method other than  
  9.     // the one in Callable.  
  10.     public void doSomeWork(Callable myBoss)  
  11.     {  
  12.         myBoss.callBackMethod();  
  13.         // ERROR!  
  14.         //myBoss.directMethod();  
  15.     }  
  16. }  
  17. class Boss implements Callable  
  18. {  
  19.     public Boss()  
  20.     {  
  21.         // Boss creates a worker object, and tells it to do some work.  
  22.         Worker w1 = new Worker();  
  23.         // Notice, we're passing a reference of the boss to the worker.  
  24.         w1.doSomeWork(this);  
  25.     }  
  26.     public void callBackMethod()  
  27.     {  
  28.         System.out.println("What do you want?");  
  29.     }  
  30.     public void directMethod()  
  31.     {  
  32.         System.out.println("I'm out for coffee.");  
  33.     }  
  34. }  
  35. public class CallBack  
  36. {  
  37.     // Main driver.  
  38.     public static void main(String[] args)  
  39.     {  
  40.         Boss b = new Boss();  
  41.         b.directMethod();  
  42.     }  
  43. }  


위와 같다.

사실 인터페이스를 아래에서 모두 구현했기 때문에 해당 인터페이스를 이용하면 

인터페이스이름 name = new 원하는객체();

로 편하게 생성하고 인터페이스에 명시된 객체를 쓸 수 있다. 

난 이게 인터페이스의 모든 것이라고 생각했고 콜백도 그렇게 쓰는 줄 알았다.

그런데 다음 두가지가 더 필요하다.

1. 자동적으로 다른 객체를 불러주려면 생성자에서 작업을 더 해주어야 한다.
2. 불리는 쪽(콜리라고 하자)에서 불러의 콜백 메서드를 실행해 주어야 한다.


우선 main부터 보자.

보스를 만들고 보스의 다이렉트 메서드를 호출했다. 일반적인 과정이다.

그러나 보스의 생성자에서 Worker를 생성하고 자신을 넘겨준다.

그럼 워커가 생성되는데 보스의 메서드를 부른다(콜러의 매서드를 부르는게 콜백 인 것 같다)

끗.

다시 정리하면 말하면
caller가 callable 인터페이스를 구현하고 생성자에서 callee를 부른다.
callee는 caller의 매서드를 실행해 주는데 그것이 콜백 메서드이다.

사실 완벽한 개념이 이해된게 아니라

잘못되었겠지만 우선 이렇게 이해하고 넘어가야 겠다.

- 시간이 지나면 자동 정리될 줄 알았건만. 비참한 기억력이 이해도를 더 떨어뜨리는 구먼.

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...