minghxx.blog
  • 자바의 정석 86~88강 추상 클래스, 추상 메서드
    2023년 08월 07일 01시 24분 13초에 업로드 된 글입니다.
    작성자: 민발자
    728x90

    ch 7-31~32 추상 클래스, 추상 메서드

    1. 추상클래스

    미완성 메서드(추상 메서드)를 갖고 있는 클래스

    다른 클래스 작성에 도움을 주기 위한 것으로 인스턴스 생성 불가

    상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능

    추상 클래스도 생성자 있어야 함

     

    2. 추상메서드 

    구현부가 없는 미완성 메서드

    필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우

    자손에서 구현할 때 하나라도 구현하지 않으면 추상클래스로 간주

    abstract class Player { // 추상 클래스
    	abstract void pay(int pos);
    	abstract void stop();
    }
    
    // 모두 구현
    class AudioPlayer extends Player {
    	void play(int pos) { /* 내용 생략 */ }  // 추상 메서드 구현
    	void stop() { /* 내용 생략 */ }  // 추상 메서드 구현
    }
    
    // 일부만 구현
    // 모두 구현한 것이 아니기 때문에 abstract
    abstract class AbstractPlayer extends Player {
    	void stop() { /* 내용 생략 */ }  // 추상 메서드 구현
    }

     

    3. 추상 메서드 호출

    추상 클래스에서 추상 메서드호출 가능 →호출할 때는 선언부만 필요, 상속을 통해 자손이 구현부 완성하기 때문에 가능

     

    abstract class Player {
        boolean pause;
        int currentPos;
    
        // 추상 클래스도 생성자 있어야 함
        Player() {
            pause = false;
            currentPos = 0;
        }
    
        abstract void play(int pos);
        abstract void stop();
    
        void paly() {
            // 추상 메서드 사용 가능
            // 상속을 통해 자손이 구현부 완성 -> 자손 객체를 통해 사용
            play(currentPos);
        }	
    }

     

     

    +) 추상클래스는 필수 기능을 강제

    예시로 플레이어는 최소한 재생과 멈추는 기능이 있어야지 플레이어다라고 정의한 것

    이를 상속받아 CD플레이어나 오디오플레이어는 자신의 클래스에 맞게 재생 기능과 멈춤 기능을 구현하고 확장함

    플레이어  CD플레이어, 오디오 플레이어

    추상 클래스가 구체화되는 과정


    ch 7-33~34 추상클래스의 작성

    1. 추상 클래스 작성

    여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 작성하거나

    기존 클래스의 공통부분을 뽑아서 추상클래스 작성

    // 공통부분을 뽑아 추상클래스로 작성
    abstract class Unit {
    	int x, y;
    	abstract void move(int x, int y);
    	// 상속받는 marine과 tank는 move기능이 공통부분
    	// move기능이 있지만 marine과 tank가 움직이는건 다름 -> 추상메서드
    }
    
    class Marine extends Unit{
    	void move(int x, int y) {/* 생략 */}
    	void stimPack() {/* 생략 */}
    }
    
    class Tank extends Unit{
    	void move(int x, int y) {/* 생략 */}
    	void changeMode() {/* 생략 */}
    }

     

    추상클래스를 의미있는 단계로 나눠 작성시 변경이 더욱 용이

    추상화된 코드는 구체화된 코드보다 유연해 변경에 유리함

     

     

    728x90
    댓글