JAVA 추상 클래스

‍박소연·2025년 5월 14일

미완성 설계도로 인스턴스를 생성할 수 없고 상속을 통해서 자손클래스에 의해서만 완성될 수 있다. abstract 키워드를 붙여서 사용한다.

	abstract class clsName {
    	abstract void play(int pos);
    }

추상 클래스는 추상 메서드를 포함하고 있다.

추상 메서드를 포함하고 있지 않은 클래스에도 abstract 키워드를 붙여서 추상 클래스로 지정할 수도 있다. 추상 클래스로 지정되면 클래스의 인스턴스를 생성할 수 없다.

추상 메서드

선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것.

추상 메서드를 사용하는 이유?

메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에, 자손 클래스에서 상황에 맞게 적절히 구현하게 한다.

자손 클래스는 오버라이딩을 통해 조상인 추상클래스의 추상 메서드를 모두 구현해주어야 한다. 하나라도 구현하지 않는다면, 자손 클래스 역시 추상 클래스로 지정해 주어야 한다.

	abstract class clsName {
    	abstract void play(int pos);
        abstract void stop();
        
        /*추상 메서드 모두 구현*/
        class AudioPlayer extends clsName {
        	void play(int pos) {...구현 내용};
            void stop() {...구현 내용};
        }
        
        /*추상 메서드를 하나라도 구현하지 않는 경우*/
        abstract class AbstractPlayer extends clsName {
        	void play(int pos) {...구현 내용};
        }
    }

추상 메서드 vs 일반 메서드 빈 괄호{}

추상 메서드 대신, 아무 내용도 없이 단지 괄호{}만 있어도, 추상 메서드가 아닌 일반 메서드로 간주된다.

그럼에도 추상 메서드로 선언하는 이유

자손 클래스를 작성할 때 내용을 반드시 구현해주어야 한다는 사실은 인식하기 위해

추상 메서드가 아닌 빈 괄호{}로만 정의되어 있다면, 상속받는 자손 클래스에서 온전히 구현된 것으로 인식하고 오버라이딩으로 구현하지 않을 수도 있다.


연습 문제

Q1

  abstract class Animal {
      abstract void speak();
      abstract void walk() {
          System.out.println("걷는다");
      }
  }

abstract 메서드는 구현부를 가질 수 없다.

0개의 댓글