티스토리 뷰

  1. 추상클래스

    1. 추상클래스는 미완성된 설계도로 비유할 수 있다.
    2. 클래스가 미완성이라는 것은 맴버의 개수에 관계된 것이 아니라, 미완성 메서드(추상 메서드)를 포함하고 있다는 것이다.
    3. 미완성이기 때문에 인스턴스를 생성할 수 없다.
    4. 오직 상속을 통해 자손클래스에 의해서만 완성될 수 있다.
    5. 클래스의 선언부에 abstract라는 키워드를 달아 미완성 메서드가 있다는 사실을 알려주도록 하자
    6. 미완성 메서드 이외에는 전부 일반 클래스와 동일하다는 특징이 있다. - 추상 메서드를 호출이 불가능한 것은 아니다.
    7. 추상 클래스라고 해서, 모든 메서드들이 추상 메서드 인 것은 아니다.
  2. 추상 메서드

    1. 추상 메서드는 선언부만 작성하고, 구현부는 남겨둔 것이다.

    2. 즉, 설계만 해놓고 실제 수행될 내용은 작성하지 않았기 때문에 미완성 메서드인 것이다.

    3. 메서드를 이와 같이 미완성 상태로 남겨 놓은 이유는 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문이다

    4. 구현부가 없으므로 {}는 적지 않고 ; 로 마무리 한다.

      abstract class Player{
       abstract void play(int pos);
       abstract void stop();
      }
  3. 추상화

    1. 추상화는 기존 클래스의 공통 부분을 뽑아내어 조상 클래스를 만드는 것이다.
    2. 반대로 구체화는 상속을 통해 클래스를 구현, 확장하는 작업이다.
      • 그냥 자손 클래스에서 또 play(int cur)을 따로 만드는 것과 무엇이 다르냐고 할 수 있을 지라도, 이는 패턴적으로 더욱더 이득을 볼 수 있으며 추상메서드는 구현을 반드시 강요할 수 있어 좋다.``
abstract class Player{   
    boolean pause;   
    int currentPos;   
    Player(){   
        pause = false; currentPos = 0; 
    } 
    abstract void play(int pos); 
    abstract void stop(); 
    void play(){ 
        play(currentPos); 
    } 
    void pause(){ 
        if(pause){ 
            pause = false; 
        }else{ 
            pause = true; 
            stop(); 
       } 
     } 
 } 
 class CDPlayer extends Player
 { 
     void play(int currentPos){} 
    void stop(){ } 
    int currentTrack; 
    void nextTrack(){ 
        currentTrack++; 
    } 
    void preTrack(){ 
        if(currentTrack > 1){ 
            currentTrack--; 
        } 
    } 
}
결론 : abstract는 강제로 구현해야한다는 의미에서 가치가 있다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함