[Java] 7. 객체지향 프로그래밍 2 #6 추상클래스(abstract class)

2022. 5. 8. 14:47JAVA/Language

1. 추상 클래스란 무엇인가?

  • 추상 클래스는 추상 메서드가 포함된 클래스
  • 클래스를 설계도에 비유한다면 추상 클래스는 미완성 설계도에 비유할 수 있음
  • 추상 클래스를 상속받는 자손 클래스들이 추상 메서드드를 오버라이딩하여 재정의함
  • 예를 들어 TV 클래스가 존재한다면 TV 클래스를 상속받는 LgTV 클래스와 SamsungTV 클래스는 어느정도의 기능(ON/OFF, 채널 변경, 소리 변경 등)이 동일함을 알 수 있습니다. 하지만 제조사마다 내부 로직은 다르므로 추상 클래스를 정의함으로써 제조사마다 다르게 정의할 수 있도록 합니다.

 

추상 클래스의 선언 방법

abstract class 클래스이름{
	...
}

 

2. 추상 메서드(abstract method)

  • 추상 메서드는 추상 클래스의 메서드에 abstract 키워드를 선언하여 추상 메서드를 선언함
  • 추상 메서드의 특징은 메서드의 선언부(제어자, 리턴타입, 메서드이름, 매개변수 타입 및 개수 등)만 작성 구현부는 작성하지 않음
  • 추상 클래스를 상속받은 자손 클래스들은 추상 메서드들을 구현해야함

 

추상 메서드 선언

/* 주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명 */
abstract 리턴타입 메서드이름();

 

추상 클래스와 추상 메서드의 구현

abstract class Player{
	abstract void play(int pos); // 추상 메서드
    abstract void stop();        // 추상 메서드
}

class AudioPlayer extends Player{
    void play(int pos){ // 추상 메서드를 구현
    	// 내용 생략
    }
    void stop(){        // 추상 메서드를 구현
    	// 내용 생략
    }
}

abstract class AbstractPlayer extends Player{
    void play(int pos){	// 추상 메서드를 구현
    	// 내용 생략
    }
}

 

3. 추상 클래스의 작성

추상화란 무엇인가?

  • 기존의 클래스의 공통부분을 추출하여 조상 클래스를 만드는 것
  • 반대로 구체화는 상속을 통해서 클래스를 구현, 확장하는 작업을 의미함

 

추상 클래스 작성 예제

https://github.com/yonghwankim-dev/java_study/tree/main/toy/toy_02_player

 

GitHub - yonghwankim-dev/java_study: [도서] 자바의 정석 예제 및 자바 API 예제

[도서] 자바의 정석 예제 및 자바 API 예제. Contribute to yonghwankim-dev/java_study development by creating an account on GitHub.

github.com

 

왜 조상 클래스의 메서드를 일반 메서드가 아닌 추상 메서드로 정의해야 하는가?

class Player{
	...
    void play(int pos){
    	// 공백으로 둠
    }
    void stop(){
    	// 공백으로 둠
    }
}
  • 자손 클래스가 오버라이딩하여 재정의하지 않을 수 있음
  • 자손 클래스 입장에서는 이미 정의된 메서드라고 인식할 수 있음
  • 자손 클래스가 호출하지 말아야할 메서드를 호출할 수 있음
  • 즉, 자손 클래스가 오버라이딩하여 재정의 하도록 강제하기 위해서는 추상 메서드로 선언해야함

 

References

source code : https://github.com/yonghwankim-dev/java_study
Java의 정석, 남궁 성 지음