Programing Language/Java

[Java] 추상 제어자와 추상 클래스(Abstract Modifier & Abstract Class)

vinedpillar 2022. 7. 4. 20:48

추상 클래스(Absract Class)

  • 추상 클래스는 분류가 비슷한 클래스들의 공통적인 속성과 기능을 추출하여 선언한 클래스입니다.

  • 즉, 부모 클래스로 활용하기 위하여 만들어지는 미완성된 클래스입니다.

  • 이런 이유로 추상 클래스는 스스로 객체를 만들어낼 수 없고, 상속을 통해서만 실체화 할 수 있습니다.

  • 추상 클래스도 일반 클래스와 같이 필드, 컨스트럭터, 메서드를 멤버로 가질 수 있습니다.

  • 하지만 추상 클래스는 반드시 하나 이상의 추상 메서드를 포함해야만 합니다.
    (반대로 하나라도 추상 메서드가 존재한다면 해당 클래스는 반드시 추상 클래스로 선언해야 함)

  • 추상 클래스로부터 상속 받는 미완성 메서드는 자식 클래스에서 반드시 구현(오버라이딩)해야 합니다.
    (단 자식 클래스도 추상 클래스로 선언되는 경우 예외)

 

 

 

 

추상 제어자(Abstract Modifier)

  • abstract는 추상적인 이라는 의미로 사용되는 제어자입니다.

  • abstract 제어자는 클래스나 메서드 앞에 붙어 미완성 상태(추상적 상태)임을 표시합니다.
    • abstract가 붙은 메서드를 추상 메서드라고 합니다.
    • abstract가 붙은 클래스를 추상 클래스라고 합니다.

  • 추상 클래스는 반드시 추상 메서드를 포함하기 때문에 메서드에 abstract가 붙는다면 이를 포함하는 클래스에도 반드시 abstract가 붙어야합니다.

 

 

 

 

추상 메서드(Abstract Method)

  • 추상 메서드는 세부 기능이 구현되지 않고, 반환 자료형, 메서드 이름, 매개변수만 정의된 메서드입니다.

  • 추상 메서드는 일반화를 통해 생성한 공통 클래스 안에서 공통 기능을 정의할 때 조금 더 효과적으로 활용하기 위해 사용됩니다.

  • 추상 클래스는 반드시 하나 이상의 추상 메서드를 선언해야 하고, 이를 상속받는 일반 클래스에서 반드시 메서드를 구현해야 합니다.

  • 때문에 추상 메서드는 자식 클래스에서 반드시 정의되어야 하는 기능을 놓치지 않고 구현할 수 있도록 도와줍니다.
추상 클래스 및 추상 메서드 선언 방법

abstract class 클래스명 {
    // 필드
    // 컨스트럭터
    // 추상 메서드
    abstract 반환자료형 메서드이름(매개변수 ... );
}

 

 

 

 

 

추상 클래스의 인스턴스 생성

  • 추상 클래스의 인스턴스를 생성하기 위해서는 이를 상속 받는 자식 클래스를 생성해야 합니다.

  • 이렇게 생성된 자식 클래스를 형 변환(업 캐스팅)하여 부모 클래스 타입으로 선언할 수 있게 됩니다.
추상 클래스의 인스턴스 생성 예시

// 추상 메서드를 포함하는 추상 클래스 선언
abstract class AbstractClass {
    abstract void abstractMethod();
}

class ConcreteClass extends AbstractClass {
    void abstractMethod() {
    	System.out.println("구체화된 추상 메서드");
    }
}

public class main {
    public static void main(String[] args) {
    	// 추상 클래스의 인스턴스를 직접 생성하는 방식은 작동하지 않음
        // AbstractClass ac = new AbstractClass();
        
        
        // 아래 방식으로 추상 클래스의 인스턴스 생성 가능
        AbstractClass ac = new ConcreteClass();
        
        // 자식 클래스에서 구체화한 메서드 사용 가능
        ac.abstractMethod();
    }
}