추상클래스

Soobin Kim·2024년 4월 3일

Java

목록 보기
22/47

추상 클래스

구현부가 없는 추상 메소드를 하나 이상 포함하고 있는 클래스.

  • 새 클래스를 작성하는 데 있어 바탕이 되는 조상클래스로서 중요한 의미를 갖는다.

필요성

  • 다형성을 보장한다는 것은 다음과 같은 조건을 요구한다.

    1. 상속
    2. 재정의
    3. 업케스팅
    4. 동적 바인딩
  • 다형성은 '동일한 메시지로 서로 다른 동작'의 결과가 나타나야 보장된다. 만일, 상위 클래스의 동작을 하위 클래스가 재정의하지 않는다면 보장되지 않는다.

  • 따라서, 반드시 재정의가 되도록 강제할 필요가 있는데, 이는 상위 클래스를 추상클래스 또는 인터페이스로 두고 하위 인스턴스 생성 시 추상 메소드를 재정의하지 않는다면 문제가 발생하도록 한다.


문법

  • 접근 제어자

    • 클래스: public이나 default
    • 변수나 메서드: public, protected, private, default
  • 구성 필드 | 생성자 | getters, setters | 추상메소드를 포함한 메소드

    • 생성자의 경우, 자식 클래스가 super()를 호출하므로 가질 수 있다.

추상 메서드

public abstract class A{
	abstract 반환타입 메소드명();
}
  • 위와 같이 선언부만 작성하고 구현부를 작성하지 않는다.

    • 추상메소드의 구현부는 자식 클래스에서 작성한다.
  • 추상 메소드는 static이나 final 키워드를 사용할 수 없다.

    • final은 변경할 수 없는 상수를 의미하여 오버라이드를 금지하고 static은 오버라이드가 불가능하기 때문이다.

특징

  • 구현부가 없는 추상 메소드를 하나 이상 포함하고 있으며, 구현된 메서드를 가질 수 있다.

  • 다형성을 일부(모든 메소드가 추상 메소드가 아니어도 됨) 보장하기 위해 등장.

  • 공통 동작의 메서드를 상위 클래스의 추상 메소드로 선언하고 서로 비슷한 클래스가 공통 동작을 자신에 맞게 재정의 => 서로 비슷한 클래스의 공통부분을 묶을 때 사용.

  • cannot be instantiated 단독으로 인스턴스화할 수 없다.

    • 추상 클래스의 자식이 반드시 추상 클래스지 않지만, 최종적으로 상속받아 객체로 생성하는 하위 클래스는 일반클래스여야 한다.
    • 추상 클래스를 완전히 구현한 하위 클래스로 업케스팅하여 추상 클래스를 활용한다.

추상클래스와 인터페이스 비교

0개의 댓글