[자바(JAVA)] 추상 메서드와 추상 클래스

abstract 예약어 = 현재 (메서드,클래스)를 추상 (메서드, 클래스)로 정의한다

추상 메서드

메서드의 시그니쳐만 정의 되고 구체적인 행위는 정의 되지 않은 특수한 메서드
블록 부분을 정의하지 않음
메서드의 시그니쳐가 선언 되었기 때문에 동작을 유추하는 것은 가능하다.
여기서 시그니쳐란 리턴타입, 메서드명, 매개변수를 의미한다.

의미가 없는 추상 메서드를 자식 클래스에서 overidding 하게되면 추상 메서드는 상속을 통해 의미를 가지게 된다.

추상 클래스

//추상 메서드를 포함하지 않은 추상 클래스
abstract class AbstractClass1(){
    public void method1(){ ... }
}

//추상 메서드를 포함한 추상 클래스
abstract class AbstractClass2(){
    public abstract void method1(){}
}

추상 메서드를 포함하고 있는 클래스는 추상 클래스로 선언 되어야 한다.

추상 클래스는 객체 생성을 할 수 없다.

문법적으로 객체 생성을 허용하지 않음
클래스로 부터 객체를 생성하는것은 프로그램에서 사용하기 위함 인데, 아무런 기능을 제공하지 않는 메서드가 호출 되는 것이 논리적으로 맞지 않다.

자바가 추상 클래스를 지원하는 이유?
자식 클래스는 상속받은 부모의 모든 추상 메서드를 Overriding 해야 객체를 생성할 수 있다.
추상 클래스를 사용해야 유지보수의 편의성을 높일 수 있다.
추상 클래스를 적용하면 모든 이를 상속한 클래스들의 메서드를 통일할 수 있다.
공통된 부분을 추상 메서드로 정의함으로써 최소한의 수정으로 원하는 객체를 사용할 수 있게 된다.